KVM 动态迁移
最近開始寫博客,記錄一些學(xué)習(xí)、實驗、測試的結(jié)果,幫助自己記憶,也方便與大家分享,開始會將之前在論壇有意義的帖子轉(zhuǎn)移過來,中間會加上自己新的理解、論證和修改之前出的一些紕漏。
本文主要以解決問題的方式介紹KVM(在線)遷移虛擬機的方法,可能內(nèi)容包含的不是很全面,這些只是我在實驗的時候遇到的問題(我操作之前是裸環(huán)境,一步一步debug到成功,如果按照下述方法,基本不會出太大差錯),當然如果遇到的問題沒有被包含可以留言回復(fù)或加入QQ群:93146027。。。
之前一直以為KVM虛擬機遷移需要共享存儲,虛擬機的鏡像放到共享存儲中,遷移的過程相當于啟動一個監(jiān)聽虛擬機,將內(nèi)存數(shù)據(jù)copy到目標服務(wù)器上,然后銷毀source上的虛擬機,啟動target上的機器。
但是只從qemu-0.12.2版本以后,支持block migrate,就可以通過virsh 命令直接將虛擬機遷移而不需要共享存儲。
詳情參見:KVM 虛擬機在物理主機之間遷移的實現(xiàn) LiveBlockMigration? ?
廢話不多說,直入正題(被遷移的機器成為:vmtest,所在服務(wù)器:source,目標服務(wù)器:target,#后是shell命令)
實驗環(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?
命令行比較簡單:
#virsh migrate vmtest qemu+ssh://target/system --live?--storage-all
(如果ssh的端口不是默認22,可以寫為 qemu+ssh://target:port/system)
Question 1:
error: internal error hostname on destination resolved to localhost, but migration requires an FQDN
解決辦法很簡單,因為默認情況下hostname 是 localhost,我們需要把目標的hostname修改一下,臨時的也可以。
#hostname target
Question 2:
error: internal error Attempt to migrate guest to the same host 00020003-0004-0005-0006-000700080009
這個在mail list 中有大牛說是服務(wù)器提供商的問題,
你可以用#dmidecode -s system-uuid 查看一下這個ID,理論上是#virsh sysinfo | grep uuid 及# virsh capabilities | grep uuid
這三個ID是一樣的。(之前看論壇里發(fā)的解決方法是需要下載一個dmidecode 命令的文件去替換系統(tǒng)的,達到修改的目的,不過我只是修改了libvirt的配置文件就可以了,可能是版本的問題)
我們修改一下libvirtd的配置文件
#sed -i "/#host_uuid/ahost_uuid = \"`uuidgen`\"" /etc/libvirt/libvirtd.conf
重啟一下libvirtd 服務(wù)
# /etc/init.d/libvirtd restart
然后再查看一下
# virsh capabilities | grep uuid
Question 3:
error: unable to set user and group to '107:107' on '/image/vmtest/disk.img': No such file or directory
如果順利進入到這步的話,就很簡單了,沒有directory 直接創(chuàng)建一個就可以,沒有disk.img 直接create一個
注:創(chuàng)建的磁盤應(yīng)該和源虛擬機的磁盤是一樣的大小(更大應(yīng)該是可以)和格式(raw還是qcow2)
qemu-img create /image/vmtest/disk.img +sizeG
Question 4:
error: Unable to resolve address 'target' service '49155': Name or service not known
《《Name or service not known》》這個相信大家都知道如何解決,/etc/hosts 添加解析的ip和target的域名即可
再次執(zhí)行遷移命令的時候,就基本不會報錯了,我的實驗環(huán)境是,如果你還有其他問題,請貼圖回復(fù),謝謝
虛擬機遷移和網(wǎng)絡(luò)的帶寬、虛擬機鏡像的大小有直接關(guān)系,但是在線遷移最關(guān)心的應(yīng)該是宕機時間,我測試的方法是一直ping target 服務(wù)器,大概停頓1s。
遷移的問題大概就這么多。
剩下的是一些有關(guān)于遷移和其他的小細節(jié):
在設(shè)置vnc監(jiān)聽端口時基本上有3種,
127.0.0.1 (默認):只有本機能訪問,也就是virt-mange和virt-view
host_ip :除了本機的所有機器都可以訪問
0.0.0.0: 以上兩種的合集
在遷移時,需要把監(jiān)聽地址改為0.0.0.0,端口為-1 自動分配,因為如果不出意外的話,指定的端口會沖突!!!
我們也可以用tcp代替ssh連接到目標服務(wù)器上,很多管理工具(webvirt)也是使用的tcp作為連接的方式。
方法如下:
1 修改/etc/libvirt/libvirtd.conf中
listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
auth_tcp = "sasl"
2 去掉/etc/sysconfig/libvirtd 中LIBVIRTD_ARGS="--listen" 的注釋
3 修改/etc/libvirt/qemu.conf 中l(wèi)isten 為0.0.0.0 ,去掉password注釋
4 運行以下命令可以添加用戶
# saslpasswd2 -a libvirt admin
Password: xxxxxx
Again (for verification): xxxxxx
通過以下命令可以查看已經(jīng)創(chuàng)建的用戶
# sasldblistusers2 -f /etc/libvirt/passwd.db
fred@t60wlan.home.berrange.com: userPassword
5 重啟libvirtd 服務(wù) ok!?
原文引用:xiaoli110 的BLOG?
在的ssh的位置選擇tcp,如果端口沒有修改可以不填端口
測試連接的時候可以用 #virsh -c qemu+tcp://target/system list
還有一個問題是,遷移的時候可以拉服務(wù)器嗎?正常的遷移時大多是推過去的,就想scp 和rsync一樣,以拉虛擬機的方式遷移是可以的
遷移虛擬機對服務(wù)器的要求,之前看必須是兩個相同的Cpu才可以,今天我測試的時候是發(fā)現(xiàn)可以從source遷移到target,回來就出問題了,發(fā)現(xiàn)時sourcce 少了一些指令集,所以可以說不同的cpu也是可以做遷移的,只是目標服務(wù)器必須包含源服務(wù)器cpu的所有指令集。
轉(zhuǎn)載于:https://www.cnblogs.com/fengrenzw/p/3339918.html
總結(jié)
- 上一篇: poj1330Nearest Commo
- 下一篇: Hive 常见问题与技巧【Updatin