集群运行过程中不可避免的会出现各种问题,比如硬件故障或者断电造成整台计算节点无法工作,该节点上运行的 instance 如何恢复呢?
用 Shelve 或者 Migrate 可不可以? 很不幸,这两个操作都要求 instance 所在计算节点的 nova-compute 服务正常运行。 幸运的是,还有 Evacuate 操作.
Evacuate 可在 nova-compute 无法工作的情况下将节点上的 instance 迁移到其他计算节点上。但有个前提: Instance 的镜像文件必须放在共享存储上.
流程图
向 nova-api 发送请求
nova-api 发送消息
nova-scheduler 执行调度
nova-scheduler 发送消息
nova-compute 执行操作
操作
1234登陆到控制节点:nova hypervisor-servers compute_node_name1 ##查看该计算节点上的虚拟主机nova evacuate server_id compute_node_name2 ##如果没有指定计算节点名称,将会随机调度到各计算节点上nova evacuate server_id compute_node_name3 --on-shared-storage ##使用共享存储
批量迁移宕机宿主机上的虚拟机:
这里假设bj-op-com08节点宕机, cat evacuate.sh:1234567#!/bin/bashhostname=bj-op-com08ids=`nova hypervisor-servers $hostname |awk '{print $2}'|awk 'NF' |grep -v ID`for i in $idsdo nova evacuate $i new_compute_node_name --on-shared-storagedone
引用:计算节点损坏 恢复虚拟机