云環境下虛擬機異構環境遷移
現在是老環境的虛擬機需要往新環境遷移。
面臨的問題:
- 新老環境存儲不同
- 部分代碼不同
- 網絡環境不同
- win2003的虛擬機老環境沒有裝virtio驅動,新環境用的virtio
解決方案:
現在遷移的總體方案
1、在新環境各個用戶的賬號下創建相同規格(或者不同規格)虛擬機,這樣可以保證數據庫數據是沒有問題的,也不會多出垃圾數據;創建相同的卷;需要記錄虛擬機uuid和卷uuid,以下稱為:{new_instance_uuid}和{new_volume_uuid}
如果規格完全相同,則遷移后界面顯示的規格和實際規格就沒有問題
如果規格不同,則遷移后存在底層實際是老環境的規格,而界面顯示是新的規格
2、將老環境虛擬機的實際資源拷貝到新環境下:
具體操作:
a、獲取需要遷移的虛擬機的uuid,以下稱為:{old_instance_uuid},通過cinder list | grep {instance_uuid}查詢到存儲卷的id,以下稱為{old_volume_uuid}。
b、拷貝文 件/var/lib/nova/instances/{old_instance_uuid}/disk 到/var/lib/nova/instances/{new_instance_uuid}/disk ,拷貝之前記得備份,如果虛機是2003的系統,記得先安裝virtio驅動,安裝方法在后面。
c、拷貝文件/var/lib/nova/instances/volume-{old_volume_uuid}到新環境的計算節點下(新建目錄之下,待傳到rbd上后可刪除)
d、拷貝文件/var/lib/nova/instances/_base/{base_uuid}到新環境對應的目錄
獲取{base_uuid}的方法:
qemu-img info disk 查看backup file路徑對應的文件
3、待資源都拷貝到新環境之后,作如下替換操作:
a、由于存 儲不同(新環境使用ceph rbd,老環境是glusterfs),首先修改拷貝過來得文件名稱為volume-{new_volume_uuid};然后刪除rbd中已存在的 volume-{new_volume_uuid},***重新往rbd中上傳改過名稱的用戶存儲文件volume-{new_volume_uuid}。
具體操作如下:
aa:修改名稱:
- mv volume-{old_volume_uuid} volume-{new_volume_uuid}
bb:刪除rbd存儲數據:
- rbd rm volumes/volume-{new_volume_uuid}
(此處需在計算節點操作,因為計算節點安裝了ceph客戶端)
cc:上傳老環境的改過名的存儲文件到rbd中:
- qemu-img convert -f raw -O raw volume-{new_volume_uuid} rbd:volumes/volume-{new_volume_uuid}
(同樣計算節點操作)
4、目前新環境使用的virtio的網卡(支持千兆),老環境沒有使用,因此win2003需要安裝virtio驅動才能正常使用網絡,經過測試必須在disk文件中安裝才能生效,因此對于需要遷移的win2003,需要一個一個去安裝驅動。
安裝步驟:
a、將老環境的虛擬機的disk拷貝到備份目錄,并同時將virtio驅動拷貝,2003的virtio驅動virtio-win-1.5.2-2003.vfd
命令如下:
- /usr/libexec/qemu-kvm -m 1024 -drive file=disk,index=0,boot=on -fda virtio-win-1.5.2.vfd -boot d -net nic,model=virtio -net user -nographic -vnc :90
使用vnc登陸機器,安裝virtio驅動(設備管理器里更新驅動,選擇軟盤)
裝好后拷貝到新環境對應的目錄下
原文出自:http://blog.csdn.net/ivy_feifei/article/details/41543461