本文主要以解決問(wèn)題的方式給大家一個(gè)(在線(xiàn))遷移虛擬機(jī)的方法,可能內(nèi)容包含的不是很全面,這些只是我在實(shí)驗(yàn)的時(shí)候遇到的問(wèn)題,如果遇到的問(wèn)題沒(méi)有被包含可以留言回復(fù)。。。
廢話(huà)不多說(shuō),直入正題(被遷移的機(jī)器成為:sourceVM,所在服務(wù)器:source,目標(biāo)服務(wù)器:target,#后是shell命令)
實(shí)驗(yàn)環(huán)境:
RedHat 6.2
# virsh version
Compiled against library: libvir 0.9.4
Using library: libvir 0.9.4
Using API: QEMU 0.9.4
Running hypervisor: QEMU 0.12.1
主要用兩種方式,命令行virsh migrate 和圖形界面 virt-mamge
命令行比較簡(jiǎn)單:
#virsh migrate sourceVM qemu+ssh://target/system --live
(如果ssh的端口不是默認(rèn)22,可以寫(xiě)為 qemu+ssh://target:port/system)
No.1 Question::
error: internal error hostname on destination resolved to localhost, but migration requires an FQDN
解決辦法很簡(jiǎn)單,因?yàn)槟J(rèn)情況下hostname 是 localhost,我們需要把目標(biāo)的hostname修改一下,臨時(shí)的也可以。
#hostname target
No.2 Question:
error: internal error Attempt to migrate guest to the same host 00020003-0004-0005-0006-000700080009
這個(gè)mail list 里有大牛說(shuō)是服務(wù)器提供商的問(wèn)題
你可以用#dmidecode -s system-uuid 查看一下這個(gè)ID,理論上是#virsh sysinfo | grep uuid 及# virsh capabilities | grep uuid
這三個(gè)ID是一樣的。(之前看論壇里發(fā)的解決方法是需要下載一個(gè)dmidecode 命令的文件去替換系統(tǒng)的,達(dá)到修改的目的,不過(guò)今天我只是修改了libvirt的配置文件就可以了,可能是版本的問(wèn)題)
我們修改一下libvirtd的配置文件
#sed -i "/#host_uuid/ahost_uuid = \"`uuidgen`\"" /etc/libvirt/libvirtd.conf
重啟一下libvirtd 服務(wù)
# /etc/init.d/libvirtd restart
然后再查看一下
# virsh capabilities | grep uuid
No.3 Question:
error: unable to set user and group to '107:107' on '/image/sourceVM/disk.img': No such file or directory
如果順利進(jìn)入到這步的話(huà),就很簡(jiǎn)單了,沒(méi)有directory 直接創(chuàng)建一個(gè)就可以
注:創(chuàng)建的磁盤(pán)應(yīng)該和源虛擬機(jī)的磁盤(pán)是一樣的大?。ǜ髴?yīng)該是可以)和格式(raw還是qcow2)
No.4 Question::
error: Unable to resolve address 'target' service '49155': Name or service not known
《《Name or service not known》》這個(gè)相信大家都知道如何解決,/etc/hosts ...略過(guò)
再次執(zhí)行遷移命令的時(shí)候,就基本不會(huì)報(bào)錯(cuò)了,我的實(shí)驗(yàn)環(huán)境是,如果你還有其他問(wèn)題,請(qǐng)貼圖回復(fù),謝謝
虛擬機(jī)遷移和網(wǎng)絡(luò)的帶寬、虛擬機(jī)鏡像的大小有直接關(guān)系,但是在線(xiàn)遷移最關(guān)心的應(yīng)該是宕機(jī)時(shí)間,我測(cè)試的方法是一直ping target 服務(wù)器,大概停頓1s。
圖形就比較簡(jiǎn)單了,處理上邊所說(shuō)的相同的FQDN,相同的UUID以外,就是建立連接時(shí)的ssh認(rèn)證問(wèn)題。
我這邊的環(huán)境是必須要在使用virt-manage遠(yuǎn)程連接的時(shí)候添加ssh的認(rèn)證,而且還要在終端登陸一次,使服務(wù)器的信息記錄到目標(biāo)機(jī)器的~/.ssh/knows 下(其實(shí)就是有一個(gè)yes/no的界面 輸入yes即可)
建立連接以后,選中機(jī)器右鍵有一個(gè)Migrate的選項(xiàng)
彈出遷移的目標(biāo)服務(wù)器,選擇目標(biāo)服務(wù)器,點(diǎn)擊Migrate即可
遷移的問(wèn)題大概就這么多。
剩下的是一些有關(guān)于遷移和其他的小細(xì)節(jié):
在設(shè)置vnc監(jiān)聽(tīng)端口時(shí)基本上有3種,
127.0.0.1 (默認(rèn)):只有本機(jī)能訪(fǎng)問(wèn),也就是virt-mange和virt-view
host_ip :除了本機(jī)的所有機(jī)器都可以訪(fǎng)問(wèn)
0.0.0.0: 以上兩種的合集
在遷移時(shí),需要把監(jiān)聽(tīng)地址改為0.0.0.0,端口為-1 自動(dòng)分配,因?yàn)槿绻怀鲆馔獾脑?huà),指定的端口會(huì)沖突?。。?/p>
如果沒(méi)有.ssh/這個(gè)目錄,可能做不了免認(rèn)證(沒(méi)有真實(shí)環(huán)境,不知道原因),沒(méi)關(guān)系,我們可以用tcp代替ssh連接到目標(biāo)服務(wù)器上。
方法如下:
1 修改/etc/libvirt/libvirtd.conf中
[/code] listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
auth_tcp = "sasl"[/code]
2 去掉/etc/sysconfig/libvirtd 中LIBVIRTD_ARGS="--listen" 的注釋
3 修改/etc/libvirt/qemu.conf 中l(wèi)isten 為0.0.0.0 ,去掉password注釋
4 運(yùn)行以下命令可以添加用戶(hù)
# saslpasswd2 -a libvirt admin
Password: xxxxxx
Again (for verification): xxxxxx
通過(guò)以下命令可以查看已經(jīng)創(chuàng)建的用戶(hù)
# sasldblistusers2 -f /etc/libvirt/passwd.db
fred@t60wlan.home.berrange.com: userPassword
5 重啟libvirtd 服務(wù) ok!
原文引用:xiaoli110 的BLOG
在的ssh的位置選擇tcp,如果端口沒(méi)有修改可以不填端口
測(cè)試連接的時(shí)候可以用 #virsh -c qemu+tcp://target/system list
還有一個(gè)問(wèn)題是,遷移的時(shí)候可以拉服務(wù)器嗎?正常的遷移時(shí)大多是推過(guò)去的,就想scp 和rsync一樣,以拉虛擬機(jī)的方式遷移是可以的
遷移虛擬機(jī)對(duì)服務(wù)器的要求,之前看必須是兩個(gè)相同的Cpu才可以,今天我測(cè)試的時(shí)候是發(fā)現(xiàn)可以從source遷移到target,回來(lái)就出問(wèn)題了,發(fā)現(xiàn)時(shí) sourcce 少了一些指令集,所以可以說(shuō)不通的cpu也是可以做遷移的,只是目標(biāo)服務(wù)器必須包含源服務(wù)器cpu的所有指令集。