徐亮偉, 江湖人稱標桿徐。多年互聯網運維工作經驗,曾負責過大規模集群架構自動化運維管理工作。擅長Web集群架構與自動化運維,曾負責國內某大型電商運維工作。 個人博客" "徐亮偉架構師之路" "累計受益數萬人。 筆者Q:552408925、572891887 架構師群:471443208 雲計算基本概 ...
徐亮偉, 江湖人稱標桿徐。多年互聯網運維工作經驗,曾負責過大規模集群架構自動化運維管理工作。擅長Web集群架構與自動化運維,曾負責國內某大型電商運維工作。
個人博客"徐亮偉架構師之路"累計受益數萬人。
筆者Q:552408925、572891887
架構師群:471443208
該博客文章同步視頻在51cto上線了,想詳細瞭解的朋友可以點擊下方視頻鏈接地址
[51cto視頻地址傳送門](http://edu.51cto.com/course/13208.html)
雲計算基本概述
雲計算是一種按使用量付費的模式,這種模式提供可用的、便捷的、按需的網路訪問,進入可配置的計算資源共用池(資源包括網路,伺服器,存儲,應用程式,服務),這些資源能夠被快速提供,只需投入很少的管理工作,或與服務供應商進行很少的交互。
在使用雲計算之前的模式和技術
1、IDC托管
2、IDC租用
3、虛擬主機(賣空間)
4、VPS:虛擬專用主機 openvz(通過超賣技術坑人) xen(不支持超賣)
雲計算之前,傳統數據中心面臨的問題
1、資源利用率低
2、資源分配不合理
3、自動化能力差
4、初始成本高
雲計算是什麼
1、雲計算是一個概念, 不是任何技術(指的是資源使用和交付模式)
2、雲計算使用方法必須通過網路來訪問
3、雲計算的優勢(彈性付費、按需付費、快速擴展)
4、雲計算不用關係底層基礎設施架構
雲計算優勢
1、海量動態資源池,靈活的調配和綁定
2、無處不在的網路訪問
3、隨需應變的自助服務
4、服務應用的可用性
5、快速的彈性伸縮
雲計算服務模型
雲計算分層
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虛擬化
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
創建KVM虛擬機
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.安裝系統步驟忽略, 但一定要記得配置好對應的地址
創建WIN7虛擬機
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
安裝過程, 記憶體與磁碟不夠會導致安裝慢或失敗
管理KVM虛擬機
//虛擬機隨著系統啟動
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虛擬機擴容
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
KVM虛擬機快照
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
KVM圖形化管理
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支持轉發
KVM虛擬機克隆
KVM虛擬機遷移
KVM可視化管理
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: [email protected]
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