1、計划中的維護
舉例:需要升級某一個計算節點的硬件配置,需要將計算節點上的虛擬機遷移后在對其進行操作,分為兩種情況。
1.1 雲系統使用了共享存儲
a. 獲取虛擬機列表:nova list --host compute01-node-Name --all-tenant
b. 將每個虛擬機遷移至另一台計算節點:nova live-migration <uuid> compute02-node-Name
c. 停止nova-compute服務:stop nova-compute
d. 維護工作完成以后,啟動服務:start nova-compute
e. 確認服務正常啟動和AMQP正常連接:status nova-comput grep AMQP /var/log/nova-compute
f. 將虛擬機遷移回來
1.2 雲系統沒有使用共享存儲
將上述遷移命令改為:nova live-migration --block-migrate <uuid> compute02-node-Name
2、虛擬機實例啟動故障
2.1 意外關閉可能會出現磁盤分區錯誤,需要對root分區進行fsck,此時使用VNC連接虛擬機即可完成修復。
2.2 libvirt的XML錯誤:nova reboot --hard <uuid>
3、從故障實例中恢復數據
故障:虛擬機正常運行,SSH無法鏈接,VNC控制台顯示kernel panic錯誤
恢復數據:
a. 使用virsh list查看故障實例的ID,假設ID為30 實例名為instance-30
b. 掛起實例:virsh suspend 30
c. 將qemu-nbd設備鏈接到磁盤上:
cd /var/lib/nova/instance/instance-30
qemu-nbd -c /dev/nbd0 `pwd`/disk
d. 掛載qemu-nbd設備
qemu-nbd會將虛擬機的不同分區導出為/dev/nbd0 nbd0p1 nbd0p2等
掛載:mount /dev/nbd0p1 /mnt 進去mnt目錄即可查看實例數據
e. 查看完成后釋放qemu-nbd設備
umount /mnt
qemu-nbd -d /dev/nbd0
f. 恢復實例:virsh resume 30
4、卷
如果故障的虛擬機的掛載的有卷,需要將卷手工分離並掛載
mysql> select nova.instances.uuid as instance_uuid, cinder.volumes.id as volume_uuid, cinder.volumes.status, cinder.volumes.attach_status, cinder.volumes.mountpoint, cinder.volumes.display_name from cinder.volumes inner join nova.instance on cinder.volumes.instance_uuid=nova.instances.uuid where nova.instances.host = 'compute01-node-Name';
手工分離:nova volume-detach <instance_uuid> <volume_uuid>
重新掛載:nova volume-attach <instance_uuid> <volume_uuid> /dev/vdX
5、計算節點徹底故障
故障:計算節點無法啟動,恢復虛擬機實例,如果/var/lib/instances使用了共享目錄
a. 生產故障節點運行的所有實例uuid列表
mysql> select uuid from instances where host = '故障節點主機名' and deleted = 0;
b. 更新數據庫,將虛擬機實例宿主機改為其他計算節點
mysql> update instances set host = 'NewComputeName' where host = '故障節點主機名' and deleted = 0;
c. 啟動虛擬機並生產XML
nova reboot --hard <uuid>
d. 根據4恢復相對於的卷即可。
如果沒有使用共享目錄,這個目錄在計算節點的硬盤上