1、靜態遷移(冷遷移)python
對於靜態遷移,你能夠在宿主機上保存一個完整的客戶機鏡像快照,而後在宿主機中關閉或 者暫停該客戶機,而後將該客戶機的鏡像文件複製到另外一臺宿主機中,使用在源主機中啓動該客戶機時的命令來啓動複製過來的鏡像。vim
2、動態遷移(熱遷移)centos
若是源宿主機和目的宿主機共享存儲系統,則只須要經過網絡發送客戶機的 vCPU 執行狀 態、內存中的內容、虛機設備的狀態到目的主機上。不然,還須要將客戶機的磁盤存儲發到目的主機上。共享存儲系統指的是源和目的虛機的鏡像文件目錄是在一個共享的存儲上的。安全
3、在基於共享存儲系統時,KVM 動態遷移的具體過程爲:bash
一、遷移開始時,客戶機依然在宿主機上運行,與此同時,客戶機的內存頁被傳輸到目的主機上。服務器
二、QEMU/KVM 會監控並記錄下遷移過程當中全部已被傳輸的內存頁的任何修改,並在全部內存頁都傳 輸完成後即開始傳輸在前面過程當中內存頁的更改內容。網絡
三、QEMU/KVM 會估計遷移過程當中的傳輸速度,當剩餘的內存數據量可以在一個能夠設定的時間週期 (默認 30 毫秒)內傳輸完成時,QEMU/KVM 會關閉源宿主機上的客戶機,再將剩餘的數據量傳輸 到目的主機上,最後傳輸過來的內存內容在目的宿主機上恢復客戶機的運行狀態。dom
四、至此,KVM 的動態遷移操做就完成了。遷移後的客戶機儘量與遷移前一致,除非目的主機上 缺乏一些配置,好比網橋等。ssh
注意,當客戶機中內存使用率很是大並且修改頻繁時,內存中數據不斷被修改的速度大於KVM可以 傳輸的內存速度時,動態遷移的過程是完成不了的,這時候只能靜態遷移。ui
關於實時遷移的效率,業界很多人提出了改進的建議,好比經過使用內存壓縮技術,減小須要傳輸的內存的大小
4、遷移注意事項:
一、最好遷移的服務器cpu品牌同樣
二、64位只能在64位宿主機間遷移,32位能夠遷移32位和64位宿主機
三、宿主機名字不能衝突
四、目的宿主機和源宿主機軟件配置儘量的相同,若有相同的橋接網卡,資源池等。
五、兩臺遷移的主機 cat /proc/cpuinfo |grep nx 的設置是相同的
NX,全名爲「No eXecute」,即「禁止運行」,是應用在CPU的一種技術,用做把存儲器 區域分隔爲只供存儲處理器指令集,或只供數據使用。
任何使用NX技術的存儲器,表明僅供數據使 用,所以處理器的指令集並不能在這些區域存儲。這種技術可防止大多數的緩衝溢出攻擊,即一些 惡意程序,把自身的惡意指令集放在其餘程序的數據存儲區並運行,從而把整臺計算機控制。
5、靜態遷移
1.安裝虛擬化所須要的環境
yum install qemu qemu-img qemu-kvm libvirt libvirt-python libguestfs-tools virt-install 安裝虛擬化程序(若是服務器存在虛擬化環境則不要安裝) grep -e vmx /proc/cpuinfo 檢查是否能支持虛擬化 mkdir /kvm-vm/ 建立虛擬機磁盤文件目錄 mkdir /kvm-vm/nspool pool-define-as nfspool netfs --source-host 192.174.1.11 --source-path /mnt/nfs --target /kvm-vm/nspool/ 設置儲存池 pool-build nfspool pool-start nfspool pool-autostart nfspool
2.拷貝鏡像文件和虛擬機配置文件 (我是基於nfs作的 因此只須要拷貝虛擬機配置文件便可)
scp /etc/libvirt/qemu/test1.xml 192.174.1.5:/etc/libvirt/qemu/
3.從新定義此虛擬機
define /etc/libvirt/qemu/test1.xml
4.啓動虛擬驗證
6、動態遷移:
1.建立共享存儲
2.兩臺機器掛載共享存儲(手工掛載;使用資源池)
3.啓動動態遷移
4.建立遷移後的虛擬機配置文件
5.從新定義虛擬機
案例實施步驟以下:‘
一、設置主機名、/etc/hosts 互相解析,保證網絡鏈接
vim /etc/hosts scp /etc/hosts 192.174.1.5:/etc/
二、兩臺主機的KVM鏈接NFS共享存儲 (若是不會能夠查看上篇文章 kvm儲存池 或者查看靜態遷移中有步驟)
三、在源主機的KVM中新建虛擬機並安裝操做系統
四、鏈接KVM,並進行遷移。’
migrate test3 qemu+ssh://192.174.1.5/system --live --unsafe --verbose
5.查看驗證
源主機 (遷移主機test關閉)
遷移主機
7、virsh migrate命令幫助
# virsh migrate --help [--domain] <string> 域名,id 或 uuid [--desturi] <string> 客戶端(常規遷移)或者源(p2p 遷移)中看到到目的地主機鏈接 URI --live 熱遷移 --offline 離線遷移 --p2p 點對點遷移 --direct 直接遷移 --tunnelled 管道遷移 --persistent 目的地中的持久 VM --undefinesource 在源中取消定義 VM --suspend 部啓用目的地主機中的域 --copy-storage-all 使用全磁盤複製的非共享存儲進行遷移 --copy-storage-inc 使用增值複製(源和目的地共享同一基礎映像)的非共享存儲進行遷移 --change-protection 遷移結束前不得對域進行任何配置更改 --unsafe 即便不安全也要強制遷移 --verbose 顯示遷移進程 --compressed 實時遷移過程當中壓縮重複的頁 --auto-converge force convergence during live migration --rdma-pin-all support memory pinning during RDMA live migration --abort-on-error 在遷移過程當中忽略軟錯誤 --migrateuri <string> 遷移 URI, 一般可省略 --graphicsuri <string> 無空隙圖形遷移中使用的圖形 URI --listen-address <string> listen address that destination should bind to for incoming migration --dname <string> 在遷移過長中從新命名爲一個新名稱(若是支持) --timeout <number> 若是 live 遷移超時(以秒計)則強制虛擬機掛起 --xml <string> 包含爲目標更新的 XML 的文件名 --migrate-disks <string> comma separated list of disks to be migrated
8、 常見錯誤:
一、遷移時遇到的錯誤描述:
# virsh migrate centos live qemu+ssh://192.168.30.132/system error: unable to connect to server at 'KVM2:49152': No route to host
緣由:你的免密登陸沒有成功
解決方法:從新作免密登陸便可
二、遷移時的存儲錯誤:
# virsh migrate centos live qemu+ssh://192.168.30.132/system error: Failed to open file '/mnt/CentOS6.8.qcow2': Input/output error
緣由:存儲沒有掛載成功
解決方法:mount -o remount /dev/sdb /mnt
三、遷移時FQDN錯誤:
# virsh migrate centos live qemu+ssh://192.168.30.132/system error: internal error hostname on destination resolved to localhost, but migration requires an FQDN
緣由:兩臺宿主機沒法解析主機名
解決方法:從新配置主機名和ip的解析
4.遷移時語法錯誤:
# virsh migrate centos live qemu+ssh://192.168.30.132:/system error: internal error Unable to parse URI qemu+ssh://192.168.30.132:/system
緣由:qemu+ssh語法寫錯了 解 決 方 法 :
正 確 的 應 該 是 : virsh migrate centos live qemu+ssh://192.168.30.132/system