感謝朋友支援本部落格,歡迎共同探讨交流,由于能力和時間有限,錯誤之處在所難免,歡迎指正!
如果轉載,請保留作者資訊。
部落格位址:http://blog.csdn.net/qq_21398167
原博文位址:http://blog.csdn.net/qq_21398167/article/details/46414087
在CentOS7+KVM上實作伺服器的遷移
目錄
注:本文使用的virt-manager版本為0.8.4.1
1.使用virt-manager管理多台虛拟機...1
2.使用virt-manager進行虛拟機動态遷移...2
3.使用virt-manager進行虛拟機靜态遷移...11
4.動态遷移遇到的問題以及解決方案...15
注:本文使用的virt-manager版本為0.8.4
1.使用virt-manager管理多台虛拟機
在一台機器上的virt-manager可以通過add connection管理其它機器上的虛拟機,一般通過"remote tunnel over ssh"就可以了,前提是建立SSH連接配接,為了簡單起見,最好配置密鑰證書認證模式,采用無密碼登入。簡單配置如下:
$ ssh-keygen -trsa 産生SSH公鑰及私鑰
$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] #拷貝公鑰到需要管理的機器上。
配置好以後指令行輸入virt-manager打開管理界面。選擇fileà Add Connecttion..
依次填入文本框中内容如下:
Hypervisor: QEMU/KVM
Method:SSH
Username:root
Hostname:192.168.0.123 (需要被操作的伺服器位址)
然後點選connect連接配接即可,此時就會出現另一台伺服器上的虛拟機供操作。
2.使用virt-manager進行虛拟機動态遷移
共享存儲的動态遷移實驗配置圖

1.確定網絡連接配接正确,源主機、目的主機和 NFS伺服器之間可以互相通路。
2. 確定源主機和目的主機上的 VMM運作正常。
3. 設定 NFS伺服器的共享目錄。
NFS伺服器安裝
# yum install nfs*
# yum install rpcbind-*
NFS服務的配置檔案為/etc/exports,這個檔案是NFS的主要配置檔案,不過系統并沒有預設值,是以這個檔案不一定會存在,可能要使用vim手動建立,然後在檔案裡面寫入配置内容。
/etc/exports檔案内容格式:
<輸出目錄>
[用戶端1選項(通路權限,使用者映射,其他)]
[用戶端2選項(通路權限,使用者映射,其他)]
輸出目錄:
輸出目錄是指NFS系統中需要共享給客戶機使用的目錄。
用戶端:
用戶端是指網絡中可以通路這個NFS輸出目錄的計算機
用戶端常用的指定方式
指定ip位址的主機:192.168.0.200
指定子網中的所有主機:192.168.0.0/24 192.168.0.0/255.255.255.0
指定域名的主機:david.bsmart.cn
指定域中的所有主機:*.bsmart.cn
所有主機:*
選項:
選項用來設定輸出目錄的通路權限、使用者映射等。
NFS主要有3類選項:
通路權限選項
設定輸出目錄隻讀:ro
設定輸出目錄讀寫:rw
使用者映射選項
all_squash:将遠端通路的所有普通使用者及所屬組都映射為匿名使用者或使用者組(nfsnobody);
no_all_squash:與all_squash取反(預設設定);
root_squash:将root使用者及所屬組都映射為匿名使用者或使用者組(預設設定);
no_root_squash:與rootsquash取反;
anonuid=xxx:将遠端通路的所有使用者都映射為匿名使用者,并指定該使用者為本地使用者(UID=xxx);
anongid=xxx:将遠端通路的所有使用者組都映射為匿名使用者組賬戶,并指定該匿名使用者組賬戶為本地使用者組賬戶(GID=xxx);
其它選項
secure:限制用戶端隻能從小于1024的tcp/ip端口連接配接nfs伺服器(預設設定);
insecure:允許用戶端從大于1024的tcp/ip端口連接配接伺服器;
sync:将資料同步寫入記憶體緩沖區與磁盤中,效率低,但可以保證資料的一緻性;
async:将資料先儲存在記憶體緩沖區中,必要時才寫入磁盤;
wdelay:檢查是否有相關的寫操作,如果有則将這些寫操作一起執行,這樣可以提高效率(預設設定);
no_wdelay:若有寫操作則立即執行,應與sync配合使用;
subtree:若輸出目錄是一個子目錄,則nfs伺服器将檢查其父目錄的權限(預設設定);
no_subtree:即使輸出目錄是一個子目錄,nfs伺服器也不檢查其父目錄的權限,這樣可以提高效率;
/home/image*(rw,sync,no_root_squash) (這裡有多少台伺服器就需要給每台伺服器配置)
重新啟動 nfsserver服務
# service nfsserver restart
首先在源主機和目的主機上添加共享存儲。這裡以源主機為例,目的主機做相同的配置。
添加 NFS存儲池到源主機和目的主機的 vit-manager中:點選 Edit menu->HostDetails->Storage tab。
存儲池配置圖

添加一個新的存儲池。點選左下角的“+”号,彈出一個新的視窗。輸入以下參數:
Name:存儲池的名字。
Type:選擇 netfs:Network Exported Directory。因為本文使用了 NFS 作為共享存儲協定。
添加共享存儲池

點選“Forward”後,輸入以下參數:
Target Path:共享存儲在本地的映射目錄。本文中這個目錄在源主機和目的主機上必須一緻。
Format:選擇存儲類型。這裡必須是 nfs。
Host Name:輸入共享存儲伺服器,也就是 NFS伺服器的 IP位址或 hostname。
Source Path:NFS伺服器上輸出的共享目錄。
存儲池設定

點選“Finish”後,共享存儲添加成功。此時在實體機上檢視 Linux系統的檔案系統清單,可以看到共享存儲映射的目錄。
源主機上建立基于共享存儲的 KVM虛拟機。
選擇共享存儲池,點選”New Volume”建立新的存儲卷。
輸入存儲卷參數。本例為虛拟機建立了大小為10G,格式為 qcow2的存儲卷。
添加存儲卷

在這個共享存儲卷上建立虛拟機。本文建立了一個基于 Window 2008 R2系統的虛拟機。
連接配接遠端實體主機上的 VMM。這裡以源主機為例,目的主機做相同的配置。
在源主機上打開 virt-manager應用程式,連接配接localhost本機虛拟機清單。點選 File->Add Connection,彈出添加連接配接視窗,輸入以下各項:
Hypervisor:選擇 QEMU。
Connection:選擇連接配接方式 。本文選擇 SSH連接配接。
Hostname:輸入将要連接配接的主機名或 IP位址,這裡填寫目的主機名 victory4。
添加遠端 VMM 連接配接

點選 Connect,輸入 SSH連接配接的密碼後,将顯示源主機和目的主機上的虛拟機清單。
管理遠端 VMM

從源主機動态遷移 KVM虛拟機到目的主機。
在源主機上啟動虛拟機 Windwos2008 R2。
在虛拟機中,開啟實時網絡服務(用來驗證遷移過程中服務的可用性)。
準備動态遷移,確定所有的虛拟儲存設備此時是共享的,包括 ISO和 CDROM。
在源主機的 virt-manager視窗中,右鍵點選等待遷移的虛拟機,選擇“Migrate ”。
New host:選擇目的主機的 hostname。
Address:填入目的主機的 IP位址。
Port and Bandwith:指定連接配接目的主機的端口和傳輸帶寬,本文中沒有設定,使用預設設定。
虛拟機遷移設定

點選“Migrate”和“Yes”開始動态遷移虛拟機。
圖 11. 虛拟機遷移進度

3.使用virt-manager進行虛拟機靜态遷移
關閉server02上的虛拟機vm02-win2003,然後将虛拟磁盤鏡像vm02-win2003se.img檔案上傳到server01。
[[email protected] home]# sftp 10.8.0.124
Connecting to 10.8.0.124...
[email protected]'s password:
sftp> put vm02-win2003se.img
Uploading wm02-win2003 to/root/vm01-wi2003se.img
vm02-win2003se.img 100% 10G11.1MB/s 15:21
sftp> exit
方法一、圖形界面導入磁盤鏡像
在server01上導入vm02-win2003se.img檔案,
整個過程跟建立新VM差不多,與建立不一同的是,這裡選擇導入從server02上傳過來的img鏡像。


其他設定的資訊同server02上img虛拟機的資訊一緻


單擊“Finish”,VMM便自動運作該虛拟機了。
遷移過程中,server02 vm02-win2003se的靜态網絡配置在server01vm11-win2003se中變成了動态擷取。
方法二、使用指令導入磁盤鏡像
在/etc/libvirt/qemu目錄下,有與虛拟機相對應的xml配置檔案。
如果使用指令導入磁盤鏡像的話,從源主機拷貝鏡像檔案和 XML 配置檔案到目的主機中。也就是說,除了vm02-win2003se.img鏡像檔案外,還需要将server02 /etc/libvirt/qemu目錄下的vm02-win2003se.xml檔案也傳到server01上,并且放到/etc/libvirt/qemu目錄下。然後對 xml 進行适當的修改并激活。
由于vm02-win2003se.img鏡像檔案放在/root目錄下,故需将vm02-win2003se.xml中source file的值改為/root/vm02-win2003se.img
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source file='/root/ vm02-win2003se.img '/>
<target dev='hda' bus='ide'/>
<address type='drive' controller='0' bus='0' unit='0'/>
</disk>
激活虛拟機配置檔案
# virsh define /etc/libvirt/vm02-win2003se.xml
至此,便完成的虛拟機的遷移,server01上有一個名為vm02-win2003se的虛拟機。如何要将此虛拟機改名為vm11-win2003se的話,需在xml檔案中的第二行對name時行修改,xml檔案和鏡像檔案也修改也一緻比較好。
啟動該虛拟機
#virsh start vm02-win2003se
4.動态遷移遇到的問題以及解決方案
動态遷移的一些必要條件:
1.關閉防火牆 Iptable –F
2.配置檔案/etc/hosts 添加對應的IP和主機名(192.168.0.121 hostname)
3關閉 selinux服務
問題1:
error: internal error hostname on destination resolved to localhost, butmigration requires an FQDN
因為預設情況下hostname是 localhost,我們需要把目标的hostname修改一下,臨時的也可以。
#hostname target
問題2:
error: internal error Attempt to migrate guest to the same host00020003-0004-0005-0006-000700080009
這個在mail list中有大牛說是伺服器提供商的問題,你可以用#dmidecode -s system-uuid檢視一下這個ID,理論上是#virsh sysinfo | grep uuid及# virsh capabilities | grep uuid,這三個ID是一樣的。
修改一下libvirtd的配置檔案
#sed -i "/#host_uuid/ahost_uuid = \"`uuidgen`\""/etc/libvirt/libvirtd.conf
重新開機一下libvirtd服務
# /etc/init.d/libvirtd restart
然後再檢視一下
# virsh capabilities | grep uuid
問題3:
error: unable to set user and group to '107:107' on '/image/vmtest/disk.img':No such file or directory
如果順利進入到這步的話,就很簡單了,沒有directory直接建立一個就可以,沒有disk.img直接create一個
注:建立的磁盤應該和源虛拟機的磁盤是一樣的大小(更大應該是可以)和格式(raw還是qcow2)
qemu-img create /image/vmtest/disk.img+sizeG
問題4:
error: Unable to resolve address 'target' service '49155': Name or service notknown
在/etc/hosts添加解析的ip和target的域名即可