1. 程式人生 > >線上遷移-常見問題解決(轉)

線上遷移-常見問題解決(轉)

一直想和大家分享虛擬機器的線上遷移,考慮到穩定性,我們在線上運行了幾個月比較穩定後,再總結出來和大家分享。

大致描述一下場景:系統採用了計算儲存鬆耦合結構,虛機的映像檔案在遠端共享儲存上,所以遷移起來速度很快。在我們系統中,最快一個用了6秒,即完成了線上遷移,這是真正的live migration,我們一邊遷移,一邊故意在虛機裡寫資料,也正常完成。

配置方案

1.修改Nova.conf檔案
新增:
image_cache_manager_interval=0
live_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_UNSAFE
修改:
vncserver_listen=0.0.0.0

2.參與的計算節點機器名字都能ping通。

3.修改計算節點上 /etc/libvirt/libvirtd.conf:

 before : #listen_tls = 0
after : listen_tls = 0
before : #listen_tcp = 1
after : listen_tcp = 1
add: auth_tcp = "none"

4.修改 /etc/sysconfig/libvirtd:

before :# LIBVIRTD_ARGS="--listen"
after :LIBVIRTD_ARGS="–listen"

5.在源計算節點上修改要遷移虛機的/var/run/libvirt/qemu/instance–xxx.xml檔案,刪除migrate-qemu-fd這一行,將vnc引數修改成0.0.0.0

6.重啟計算節點上nova

7備註:

1.由於雲機之前沒有配置線上遷移,在遷移虛機之前,需要重啟虛機。
2..因為計算節點上libvirtd的配置中增加了auth_tcp="none",算是一個安全漏洞,需要尋找更安全的辦法,或者在遷移完成之後,註釋掉這行,重啟libvirt
3 已經編寫了一個輔助程式自動做遷移

遇到的問題和解決辦法

1.虛機的disk 的cache mode為writethrough,遷移的時候報錯

OpenStack認為在centos上磁碟cache mod為writethrough時,遷移是不安全的。
解決的辦法  :在nova.conf live_migration_flag引數後面增加VIR_MIGRATE_UNSAFE,官方線上遷移配置檔案裡沒有這個引數。

2.qemu1.4的一個bug導致遷移失敗

遷移失敗,在目的節點上/var/log/libvrit/qemu/instances--xxxx.log裡:
char device redirected to /dev/pts/1 (label charserial1)
qemu: warning: error while loading state section id 2
load of migration failed
解決辦法:
1.在源計算節點上修改要遷移虛機的/var/run/libvirt/qemu/instance–xxx.xml文中刪除migrate-qemu-fd這一行
2.重啟源計算節點上的libvirtd
3.然後再執行nova live-migration命令
這個操作已經編寫了一個程式自動執行。

3.vncserver的問題,需要重啟虛擬機器才可以遷移。

由於之前Nova.conf中vncserver_listen=計算機節點的ip,所以在虛擬機器Kvm程序中引數中vnc=計算節點的ip,遷移的時候報錯,在目的節點繫結不了源節點的IP,所以需要修改Libvirt.xml配置檔案,重啟虛機,然後才能進行遷移。
解決辦法:
1.在源計算節點上/var/run/libvirt/qemu/instance–xxx.xml文中將vnc的引數修改成0.0.0.0
2.重啟源計算節點libvirtd
3.然後再執行nova live-migration命令
這個操作已經編寫了程式來自動完成

4.遷移完成後console.log,disk屬主變成了root/root

遷移完成後,發現虛機的console.log和disk檔案屬主由qemu.qumu變成了root.root,這個估計是OpenStack遷移程式的問題,這個問題目前沒有影響虛機。
解決辦法:
修改檔案屬主,這個操作已經編寫了程式來自動完成

5.源節點和目的節點cpu不相容問題

遷移失敗,在/var/log/nova/compute的日誌:
 "InvalidCPUInfo: Unacceptable CPU info: CPU doesn't have compatibility.\n\n0\n\nRefer tohttp://libvirt.org/html/libvirt-libvirt.html#virCPUCompareResult\n"]
解決辦法:
目前還沒有解決辦法

6.目的節點記憶體為負,

遷移失敗,從控制節點的api.log上輸出的錯誤是目的節點記憶體為-3400,不能滿足遷移的需要。
解決辦法:
用nova命令指定在該計算節點上建立虛機,能夠成功。估計是遷移時候的排程演算法和建立虛機時的排程演算法不一致。

7.錯誤日誌,在2.4上api.log

遷移時候一般看的日誌有:
1.目的節點上的/var/log/libvirt/qemu/instances–xxx.log
2.目的節點上的/var/log/nova/compute.log
3.源節點上的/var/log/nova/compute.log
有時候遷移失敗,命令列執行後報錯:
ERROR: Live migration of instance bd785968-72f6-4f70-a066-b22b63821c3b to host compute-13 failed (HTTP 400) (Request-ID: req-180d27b5-9dc7-484f-9d9a-f34cccd6daa2)
但在上述的三個日誌檔案中都看不到任何的錯誤資訊。
解決辦法:
在控制節點或者是在操作遷移命令的節點上/var/log/nova/api.log有錯誤資訊

走的彎路

1.嘗試不用修改nova.conf裡的vncserver_listen引數為0.0.0.0,

將/var/run/log/libvirt/qemu/instances--xxx.log裡的vnc改成目的節點的ip,重啟libvritd,然後進行遷移,可以成功,但如果遷移失敗,當需要重新虛機的時候,虛機啟動失敗,在/var/log/libvrit/qemu/instances-xx.log的錯誤是
Failed to start VNC server on `172.18.2.15:0': Failed to bind socket: Cannot assign requested address
而/mnt/instances/instance--xxx/libvirt.xml裡沒有修改成目的節點的Ip。不知道這個引數被儲存到了哪裡

2.vnc 埠問題

在一次遷移失敗後,在目的節點/var/log/libvirt/qemu/instance--xxx.log裡的錯誤是:
2013-11-05 05:42:39.401+0000: shutting down
qemu: terminating on signal 15 from pid 10271,
猜想是由於虛機在源節點上的vnc監聽埠在目的節點上被佔用,所以導致啟動不了。後來在其他機器上做了測試發現,在遷移到目的節點後vnc的埠自己會調整。