Rebuild 能够恢复损坏的 instance。web
那若是是宿主机坏了怎么办呢? 好比硬件故障或者断电形成整台计算节点没法工做,该节点上运行的 instance 如何恢复呢? api
用 Shelve 或者 Migrate 可不能够? 很不幸,这两个操做都要求 instance 所在计算节点的 nova-compute 服务正常运行。 幸运的是,还有 Evacuate 操做。 学习
Evacuate 可在 nova-compute 没法工做的状况下将节点上的 instance 迁移到其余计算节点上。但有个前提: Instance 的镜像文件必须放在共享存储上。 ui
下面是 Evacuate instance 的流程图 spa
向 nova-api 发送请求 日志
nova-api 发送消息 orm
nova-scheduler 执行调度 blog
nova-scheduler 发送消息 资源
nova-compute 执行操做 it
下面咱们详细讨论每个步骤。
咱们的实验场景以下: Instance c2 运行在 devstack-compute1 上。
经过断电模拟计算节点故障,而后执行 Evacuate 操做恢复 instance c2。 目前 Evacuate 只能经过 CLI 执行。
这里须要指定 --on-shared-storage 这个参数
查看日志 /opt/stack/logs/n-api.log
nova-api 向 Messaging(RabbitMQ)发送了一条消息:“Evacuate 这个 Instance” 查看源代码 /opt/stack/nova/nova/compute/api.py,方法是 evacuate。
你们注意到没有,evacuate 其实是经过 rebuild 操做实现的。 这是能够理解的,由于 evacuate 是用共享存储上 instance 的镜像文件从新建立虚机
nova-scheduler 收到消息后,会为 instance 选择合适的计算节点。 查看日志 /opt/stack/logs/n-sch.log。
nova-scheduler 最后选择在 devstack-controller 计算节点上重建 instance。
nova-scheduler 发送消息,通知计算节点能够建立 instance 了。 源代码在 /opt/stack/nova/nova/scheduler/filter_scheduler.py 第 95 行,方法为 select_destinations。
计算节点上的工做是用共享存储上的镜像文件重建 instance。 日志在 devstack-controller:/opt/stack/logs/n-cpu.log。
为instance分配资源
使用共享存储上的镜像文件
启动 instance
Evacuate 操做完成后,instance 在 devstack-controller 上运行。
以上是 Evacuate 操做的详细分析。
至此,咱们已经学习完 Nova 全部的操做,下一节将用一张图总结这些操做的用途和使用场景。