OpenStack热迁移一直处于迁移中怎么办
热迁移虚拟机一直处于迁移中,产生这个原因一般是大规格虚拟机或者业务脏数据量比较大才会发生,我们可以通过检查源计算节点nova-compute.log
日志发现一直在迁移内存数据,出现memory 0% remaining
就可以说明虚拟机产生的脏数据比较多,一直切换不到目的计算节点。
[instance: 26d5b002-50a3-4ac5-ae80-00695750300a] Migration running for 480 secs, memory 0% remaining; (bytes processed=767259180360, remaining=103018496, total=34494414848)
虚拟机热迁移过程中,在源节点和目标节点会有同步虚拟机内存的操作,查看nova-compute.log日志发现问题memory 基本0% remaining,问题应该在最后一刻同步内存
于是尝试使用nova live-migration-force-complete 命令,在热迁移操作中,同步查看nova-compute日志,在日志显示虚拟机在源节点 memory 接近0% remaining时执行,强制在源节点暂停下虚拟机,发现热迁移顺利完成。
[root@XC-tstack-con01 ~]# nova server-migration-list 26d5b002-50a3-4ac5-ae80-00695750300a
[root@XC-tstack-con01 ~]# nova live-migration-force-complete 26d5b002-50a3-4ac5-ae80-00695750300a 952
如上执行nova live-migration-force-complete
命令,日志显示虚拟机在源计算节点立刻被paused(暂停),源计算节点和目标计算节点进入_post_live_migration状态,pause时间大概在10s以内。
注意: 为了避免对业务的影响,应尽量避免执行nova live-migration-force-complete
命令,此命令会强制暂停虚拟机。应让热迁移操作的2个计算节点,利用libvirt的自身算法来控制最后虚拟机的暂停操作。即使对于能容忍此种pause时间的虚拟机,也要实时查看日志,只能在最后一刻虚机内存remaining接近0%才可以这样操作。
但是也需要和业务部沟通好,以确保业务不出现中断为目标进行迁移。或者寻找业务不忙时间进行pause迁移。