openstack 计算节点 宕机 虚拟机如何恢复

  集群运行过程中不可避免的会出现各种问题,比如硬件故障或者断电造成整台计算节点无法工作,该节点上运行的 instance 如何恢复呢?
  用 Shelve 或者 Migrate 可不可以? 很不幸,这两个操作都要求 instance 所在计算节点的 nova-compute 服务正常运行。 幸运的是,还有 Evacuate 操作.
  Evacuate 可在 nova-compute 无法工作的情况下将节点上的 instance 迁移到其他计算节点上。但有个前提: Instance 的镜像文件必须放在共享存储上.

流程图

  1. 向 nova-api 发送请求

  2. nova-api 发送消息

  3. nova-scheduler 执行调度

  4. nova-scheduler 发送消息

  5. nova-compute 执行操作

    操作

    1
    2
    3
    4
    登陆到控制节点:
    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:

1
2
3
4
5
6
7
#!/bin/bash
hostname=bj-op-com08
ids=`nova hypervisor-servers $hostname |awk '{print $2}'|awk 'NF' |grep -v ID`
for i in $ids
do
nova evacuate $i new_compute_node_name --on-shared-storage
done

引用:计算节点损坏 恢复虚拟机