徐亮偉, 江湖人稱標杆徐。多年互聯網運維工做經驗,曾負責過大規模集羣架構自動化運維管理工做。擅長Web集羣架構與自動化運維,曾負責國內某大型電商運維工做。
我的博客"徐亮偉架構師之路"累計受益數萬人。
筆者Q:55240892五、572891887
架構師羣:471443208html
該博客文章同步視頻在51cto上線了,想詳細瞭解的朋友能夠點擊下方視頻連接地址
[51cto視頻地址傳送門](http://edu.51cto.com/course/13208.html)
node
雲計算是一種按使用量付費的模式,這種模式提供可用的、便捷的、按需的網絡訪問,進入可配置的計算資源共享池(資源包括網絡,服務器,存儲,應用程序,服務),這些資源可以被快速提供,只需投入不多的管理工做,或與服務供應商進行不多的交互。python
在使用雲計算以前的模式和技術linux
一、IDC託管
二、IDC租用
三、虛擬主機(賣空間)
四、VPS:虛擬專用主機 openvz(經過超賣技術坑人) xen(不支持超賣)nginx
雲計算以前,傳統數據中心面臨的問題git
一、資源利用率低
二、資源分配不合理
三、自動化能力差
四、初始成本高github
雲計算是什麼web
一、雲計算是一個概念, 不是任何技術(指的是資源使用和交付模式)
二、雲計算使用方法必須經過網絡來訪問
三、雲計算的優點(彈性付費、按需付費、快速擴展)
四、雲計算不用關係底層基礎設施架構shell
雲計算優點vim
一、海量動態資源池,靈活的調配和綁定
二、無處不在的網絡訪問
三、隨需應變的自助服務
四、服務應用的可用性
五、快速的彈性伸縮
雲計算分層
IDC 全部都得自行管理
IAAS 基礎設施及服務
PAAS 平臺及服務
SAAS 軟件及服務
公有云(阿里雲、騰訊雲)只有使用權,按需付費(技術層面:數據不安全 道德層面)
私有云(自建機房,本身搭建,全部自行管理 (侷限:資源固定))
混合雲(主要業務放私有云、當有臨時需求的時候使用公有云,使用結束不用)
什麼是KVM, 內核級虛擬化技術Kernel-based Virtual Machine
虛擬化是一種具體的技術,將物理機虛擬成多個相互獨立的虛擬機。
在一臺計算機上同時運行多個邏輯計算機,每一個邏輯計算機可運行不一樣的操做系統,而且應用程序均可以在相互獨立的空間內運行而互不影響,能夠實現資源的動態分配、靈活調度、跨域共享,提升資源利用率,服務於各行各業中靈活多變的應用需求。從而顯著提升服務器的工做效率。
虛擬化的分類
全虛擬化
半虛擬化(qemu模擬網絡以及硬盤)
硬件虛擬化(Inter vt-x/EPT) (AMD AMD-v /RVI)
桌面虛擬化 (銀行,操做層面控制-沒法複製、沒法使用usb、最多手機拍照))
應用虛擬化 (將應用經過瀏覽器進行交付,只須要安裝插件便可實現"貴")
虛擬化使用場景
1.虛擬化能夠虛擬出來多個操做系統,它們之間是相互獨立的,因此每一個操做系統上所跑的應用程序是相互不影響的。
2.支持異構,linux系統能夠虛擬化windows系統,方便不一樣場景系統的使用。
3.支持快照、克隆、遷移、等功能。
企業案例一
公司有一臺服務器, 在盤點資產時, 你並不清楚該虛擬機是否能中止, 也不清楚上面運行了什麼, 問技術部門沒有一我的清楚, 只會告訴你, 有可能有用你放着把。
若是這是一臺物理機你看怎麼辦,真的很無奈、想改個啥你都不敢該,只能讓他跑在那裏。
企業案例二
公司這臺物理機有沒有用,全部人告訴你,沒事刪把確定沒有用,而後到店慶的時候,產品經理過來了:咱們去年店慶作了一個積分抽獎的活動,我花錢買的,個人代碼哪去了,個人服務器呢?服務器早都格式化多少遍了,產品經理說那沒辦法,那麼趕忙聯繫提供商把,提供商倒閉了。怎麼辦,從新作唄。
若是有虛擬機就好辦了,我把虛擬機關了放在那,只要不刪除,是否是永遠都在,哪天用在起來就好了。無非就佔點硬盤,分配的時候,可使用多少分配多少。
虛擬化與雲計算總結
雲計算不等於虛擬化,二者並不能相互比較。
雲計算是一種資源和使用交互的方式。
虛擬化是一種具體的技術。
雲計算要依賴虛擬化技術來實現的一種經過網絡訪問獲取資源,流量,交付的使用模式。(例如:彈性計算)。
虛擬化至關於實幹家,而云計算是思想家。
KVM須要硬件支持, 因此須要開啓虛擬化支持
1.硬件設備直接在BIOS設置開啓CPU虛擬化
2.我的電腦一樣進入BIOS開啓虛擬化支持
3.VM須要找到對應虛擬機開啓對應的VT-EPT虛擬化技術
//沒有任何內容則表示服務器沒有啓用虛擬化 [root@kvm-node1 ~]# egrep '(vmx|svm)' /proc/cpuinfo
1.服務器環境規劃
系統 | 主機名 | IP | 內存 | 磁盤 |
---|---|---|---|---|
CentOS7 | kvm-node1 | 192.168.56.11 | 4G | 80G |
CentOS7 | kvm-node2 | 192.168.56.12 | 4G | 80G |
2.基礎環境配置
//查看當前系統版本 [root@kvm-node1 ~]# hostnamectl Static hostname: kvm-node1 Icon name: computer-vm Chassis: vm Machine ID: 6878674c84644fd381a5e3a82d80cf18 Boot ID: fd8e37aca7e4421fa5674fc0fff147e9 Virtualization: vmware Operating System: CentOS Linux 7 (Core) CPE OS Name: cpe:/o:centos:centos:7 Kernel: Linux 3.10.0-693.el7.x86_64 Architecture: x86-64 //設定主機名 [root@kvm-node1 ~]# hostnamectl set-hostname kvm-node1 //關閉防火牆 [root@kvm-node1 ~]# systemctl stop firewalld [root@kvm-node1 ~]# systemctl disable firewalld //關閉Selinux [root@kvm-node1 ~]# sed -i '/SELINUX=/cSELINUX=disabled' /etc/selinux/config [root@kvm-node1 ~]# setenforce 0 //配置hosts解析 [root@kvm-node1 ~]# echo "192.168.56.11 kvm-node1" >> /etc/hosts
3.安裝KVM
虛擬化工具
//qeum 虛擬化軟件,能夠虛擬不一樣的CPU,以及模擬網卡、聲卡、PCI設備等 //libvirt 用於管理KVM的工具 //virt-install 命令行安裝虛擬機工具 //virt-manager 圖形化管理虛擬機工具 //openssh-askpass 遠程鏈接KVM主機 [root@kvm-node1 ~]# yum install qemu-kvm qemu-kvm-tools \ libvirt virt-manager virt-install \ openssh-askpass –y //KVM是linux內核的一個模塊,模塊不須要安裝只須要加載,經過用戶態程序來管理便可 [root@kvm-node1 ~]# lsmod|grep kvm kvm_intel 148081 0 kvm 461126 1 kvm_intel
4.啓動libvirt
管理KVM
工具
[root@kvm-node1 ~]# systemctl enable libvirtd.service [root@kvm-node1 ~]# systemctl start libvirtd.service #注意: 啓動後會新增一塊virbr0網絡
5.KVM
會給虛擬機分配NAT
模式網絡,可是在生產狀況,強烈推薦使用網橋模式
//配置KVM虛擬機使用的橋接網絡, 添加br0網卡 [root@kvm-node1 ~]# brctl addbr br0 //將eth0加入網橋,使用橋接模式,給br設置ip,添加路由網關,關閉防火牆 [root@kvm-node1 ~]# brctl addif br0 eth0 && \ ip addr del dev eth0 192.168.56.11/24 && \ ifconfig br0 192.168.56.11/24 up && \ route add default gw 192.168.56.2 [root@kvm-node1 ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.000c29726a96 no eth0 virbr0 8000.525400e6a3a3 yes virbr0-nic
1.在建立虛擬機以前, 咱們須要添加一塊磁盤來存放咱們的虛擬機, VM->關機->設置->添加磁盤
//直接使用整塊磁盤 [root@kvm-node1 ~]# mkdir -p /data [root@kvm-node1 ~]# mkfs.xfs /dev/sdb [root@kvm-node1 ~]# mount /dev/sdb /data #強烈建議加入開機自啓動
2.使用virsh-install
建立命令模式建立虛擬機
//掛載系統光盤, 創建ISO鏡像文件 [root@kvm-node1 ~]# dd if=/dev/cdrom of=/data/centos7u4_x86_64.iso //建立虛擬機磁盤 [root@kvm-node1 ~]# qemu-img create -f qcow2 /data/centos7u4-node1.qcow2 10G //建立虛擬機實例 virt-install --name centos7u4-node1 \ --virt-type kvm \ --ram 1024 \ --cdrom=/data/centos7u4_x86_64.iso \ --disk path=/data/centos7u4-node1.qcow2 \ --network bridge=br0 \ --graphics vnc,listen=0.0.0.0 \ --noautoconsole //參數概述 --virt-type:指定虛擬機類型(kvm、qemu、xen) --name:指定虛擬機名稱 --raw:指定虛擬機使用內存大小 --cpu:指定cpu的核數(默認爲1) --cdrom:指定虛擬機安裝的ISO鏡像 --disk:指定虛擬機數據存儲磁盤qcow2 --network:指定虛擬機網絡類型, 默認nat,經常使用bridge --graphics:指定虛擬機可鏈接方式, 好比VNC --noautoconsole:不鏈接虛擬機圖形界面控制檯
3.使用vnc
客戶端鏈接KVM
虛擬機,進行操做系統安裝
4.安裝CentOS7
在啓動前修改內核讓網卡爲eth0
5.安裝系統步驟忽略, 但必定要記得配置好對應的地址
1.準備Win7 ISO
鏡像
2.建立虛擬機磁盤
[root@kvm-node1 ~]# qemu-img create -f qcow2 win7-node1.qcow2
3.virt-install
命令建立Win7
虛擬機, 也可使用virt-manager
建立Win7
虛擬機
[root@kvm-node1 ~]# virt-install --name win7-node1 \ --virt-type kvm \ --ram 2048 \ --cdrom=/data/win7.iso \ --disk path=/data/win7-node1.qcow2 \ --network bridge=br0 \ --graphics vnc,listen=0.0.0.0 \ --noautoconsole
4.Win7
安裝過程, 內存與磁盤不夠會致使安裝慢或失敗
//虛擬機隨着系統啓動 virsh autostart Name //關閉虛擬機隨系統啓動 virsh autostart —disable Name //查看正在運行的KVM虛擬機 [root@kvm-node1 ~]# virsh list //查看全部KVM虛擬機 [root@kvm-node1 ~]# virsh list --all //啓動KVM虛擬機 [root@kvm-node1 ~]# virsh start name //關閉KVM虛擬機 [root@kvm-node1 ~]# virsh shutdown name //強制關閉KVM虛擬機 [root@kvm-node1 ~]# virsh destroy name //掛起KVM虛擬機 [root@kvm-node1 ~]# virsh suspend name //恢復掛起的虛擬機 [root@kvm-node1 ~]# virsh resume name //編輯KVM虛擬機的xml配置文件 [root@kvm-node1 ~]# virsh edit name //刪除建立的KVM虛擬機 [root@kvm-node1 ~]# virsh undefine name
KVM
虛擬機中有兩種磁盤格式:
raw格式: 直接佔用物理磁盤, 寫入快, 性能優, 但佔用空間
Qcow2格式: 使用多少佔多少磁盤, 支持壓縮、快照、鏡像
注意:raw不支持快照, Qcow2支持快照, 但二者文件類型是能夠相互間轉換
不管磁盤是raw qcow2
格式, 擴展思路以下
1.新添加一塊磁盤加入至須要擴容的虛擬主機
2.使用lvm邏輯卷管理方式進行擴展
1.查看當前KVM
虛擬機所使用的虛擬磁盤
[root@kvm-node1 ~]# virsh domblklist centos7u4-node1 Target Source ------------------------------------------------ vda /data/centos7u4-node1.qcow2
2.建立一塊qcow2
虛擬磁盤
[root@kvm-node1 ~]# qemu-img create -f qcow2 /data/centos7u4-node1-disk2.qcow2 10G
3.在線添加虛擬磁盤
//在線添加 [root@kvm-node1 ~]# virsh attach-disk centos7u4-node1 /data/centos7u4-node1-disk2.qcow2 vdb --cache=none --subdriver=qcow2 Disk attached successfully //查看新增磁盤狀態 [root@kvm-node1 ~]# virsh domblklist centos7u4-node1 Target Source ------------------------------------------------ vda /data/centos7u4-node1.qcow2 vdb /data/centos7u4-node1-disk2.qcow2 //第二種擴容方式方式, 新增以下配置 [root@kvm-node1 ~]# virsh edit centos7u4-node1 <disk type='file' device='disk'> <driver name='qemu' type='qcow2' cache='none'/> <source file='/data/centos7u4-node1-disk2.qcow2'/> <target dev='vdb' bus='virtio'/> </disk>
4.經過vnc
鏈接KVM
虛擬機進行磁盤擴容
5.擴容步驟以下
[root@localhost ~]# pvcreate /dev/vdb [root@localhost ~]# vgextend /dev/vdb centos [root@localhost ~]# lvextend -l +100%FREE /dev/centos/root [root@localhost ~]# xfs_growfs /dev/centos/root
1.查看磁盤格式raw
格式須要轉換成qcow2
[root@kvm-node1 ~]# qemu-img info /data/centos7u4-node1.raw image: /data/centos7u4-node1.raw file format: raw virtual size: 10G (10737418240 bytes) disk size: 1.2G cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false
2.必須關閉虛擬機進行磁盤轉換
[root@kvm-node1 ~]# virsh shutdown centos7u4-node1 [root@kvm-node1 ~]# qemu-img convert -f raw /data/centos7u4-node1.raw -O qcow2 /data/centos7u4-node1.qcow2 //convert 將磁盤文件轉換爲指定格式的文件 //-f 指定須要轉換文件的文件格式 //-O 指定要轉換的目標格式 //轉換完成後,將新生產一個目標映像文件,原文件保存
3.修改KVM虛擬機配置文件配置文件
[root@kvm-node1 ~]# virsh edit centos7u4-node1 <driver name='qemu' type='qcow2'/> <source file='/data/centos7u4-node1.qcow2'/>
4.對虛擬機當前進行快照拍攝
[root@kvm-node1 ~]# virsh snapshot-create centos7u4-node1 Domain snapshot 1523494907 created
5.查看虛擬機快照
[root@kvm-node1 ~]# virsh snapshot-list centos7u4-node1 Name Creation Time State ------------------------------------------------------------ 1523494907 2018-04-11 21:01:47 -0400 running //檢查當前虛擬機最新快照版本 [root@kvm-node1 ~]# virsh snapshot-current centos7u4-node1|less //快照xml文件存放路徑 [root@kvm-node1 ~]# ls /var/lib/libvirt/qemu/snapshot/centos7u4-node1/ 1523494907.xml 1523495036.xml
6.恢復快照
[root@kvm-node1 ~]# virsh snapshot-revert centos7u4-node1 1523494907 //確認恢復版本正確 [root@kvm-node1 ~]# virsh snapshot-current centos7u4-node1|grep "1523494907" <name>1523494907</name> <creationTime>1523494907</creationTime>
7.刪除快照
[root@kvm-node1 ~]# qemu-img info /data/centos7u4-node1.qcow2 image: /data/centos7u4-node1.qcow2 file format: qcow2 virtual size: 10G (10737418240 bytes) disk size: 1.8G cluster_size: 65536 Snapshot list: ID TAG VM SIZE DATE VM CLOCK 1 1523494907 282M 2018-04-11 21:01:48 00:16:25.489 2 1523495036 282M 2018-04-11 21:03:56 00:18:29.210 Format specific information: compat: 1.1 lazy refcounts: false //刪除最近一個快照 [root@kvm-node1 ~]# virsh snapshot-delete centos7u4-node1 1523495036 Domain snapshot 1523495036 deleted
1.服務端安裝x11
圖形界面工具
[root@kvm-node1 ~]# yum install -y xorg-x11-font-utils xorg-x11-server-utils xorg-x11-utils xorg-x11-xauth xorg-x11-xinit
2.服務端開啓SSH
隧道轉發X11
[root@kvm-node1 ~]# vim /etc/ssh/sshd_config X11Forwarding yes [root@kvm-node1 ~]# systemctl restart sshd
3.Windows
客戶端使用Xshell
鏈接KVM
宿主機
第一步: 鏈接KVM宿主機, 修改其屬性
第二步: 使用xming
接受SSH X11
圖形轉發
注意: 須要下載對應工具Xming, 而後啓動
第三步:從新鏈接KVM
宿主機, 執行virt-manager
第四步:安裝中文字符,解決界面亂碼問題
[root@kevin ~]# yum install -y dejavu-lgc-sans-fonts [root@kevin ~]# yum groupinstall -y "Fonts" //調整字體爲中文 [root@kvm-node1 ~]# export LANG=zh_CN.UTF-8
注意:
1.若是使用GUI界面Linux則無需安裝便可使用virt-manager
2.若是是MAC筆記本, 僅能使用Crt開啓X11圖形轉發, 同時必須下載XQuartz支持轉發
1.安裝 WebVirtMgr
WebVirtMgr官方參考手冊
[root@kvm-node1 ~]# yum -y install http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm [root@kvm-node1 ~]# yum -y install gcc python-devel git python-pip libvirt-python libxml2-python python-websockify supervisor nginx novnc [root@kvm-node1 ~]# pip install numpy
2.安裝要求和安裝Python
的Django
環境
[root@kvm-node1 ~]# git clone git://github.com/retspen/webvirtmgr.git [root@kvm-node1 ~]# cd webvirtmgr [root@kvm-node1 webvirtmgr]# pip install -r requirements.txt [root@kvm-node1 webvirtmgr]# ./manage.py syncdb //用戶信息,回車 You just installed Django's auth system, which means you don't have any superusers defined. Would you like to create one now? (yes/no): yes Username (leave blank to use 'root'): Email address: 552408925@qq.com Password: Password (again): Superuser created successfully. Installing custom SQL ... Installing indexes ... Installed 6 object(s) from 1 fixture(s) //添加額外的超級用戶 [root@kvm-node1 webvirtmgr]# ./manage.py collectstatic
3.配置Nginx
[root@kvm-node1 webvirtmgr]# cd .. [root@kvm-node1 ~]# mv webvirtmgr /var/www/ //在/etc/nginx/conf.d目錄中添加webvirtmgr.conf [root@kvm-node1 ~]# vim /etc/nginx/conf.d/webvirtmgr.conf server { listen 80 default_server; server_name $hostname; #access_log /var/log/nginx/webvirtmgr_access_log; location /static/ { root /var/www/webvirtmgr/webvirtmgr; expires max; } location / { proxy_pass http://127.0.0.1:8000; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for; proxy_set_header Host $host:$server_port; proxy_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 600; proxy_read_timeout 600; proxy_send_timeout 600; client_max_body_size 1024M; } } //注意: 註釋/etc/nginx/conf/nginx.conf文件中Server段 //設定目錄權限 [root@kvm-node1 ~]# chown -R nginx:nginx /var/www/webvirtmgr //啓動nginx,並將其加入開機自啓 [root@kvm-node1 ~]# systemctl start nginx [root@kvm-node1 ~]# systemctl enable nginx
4.安裝配置Supervisor
//建立文件/etc/supervisord.d/webvirtmgr.ini如下內容 [root@kvm-node1 ~]# vim /etc/supervisord.d/webvirtmgr.ini [program:webvirtmgr] command=/usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /var/www/webvirtmgr/conf/gunicorn.conf.py directory=/var/www/webvirtmgr autostart=true autorestart=true logfile=/var/log/supervisor/webvirtmgr.log log_stderr=true user=nginx [program:webvirtmgr-console] command=/usr/bin/python /var/www/webvirtmgr/console/webvirtmgr-console directory=/var/www/webvirtmgr autostart=true autorestart=true stdout_logfile=/var/log/supervisor/webvirtmgr-console.log redirect_stderr=true user=nginx
5.啓動supervisord
並加入開機自啓
[root@kvm-node1 ~]# systemctl start supervisord.service [root@kvm-node1 ~]# systemctl enable supervisord.service
6.配置ssh
認證SSH官方參考資料
[root@kvm-node1 ~]# su - nginx -s /bin/bash -bash-4.2$ ssh-keygen -bash-4.2$ touch ~/.ssh/config -bash-4.2$ echo -e "StrictHostKeyChecking=no\nUserKnownHostsFile=/dev/null" >> ~/.ssh/config -bash-4.2$ chmod 0600 ~/.ssh/config -bash-4.2$ ssh-copy-id root@localhost