正常工作中,假如云主机当中部署了很多自己的业务或者其它有用的东西,此时虚拟机所在的宿主机需要下线,节点需要迁走不再在这个环境中提供使用,往往都会事先将自己的云主机打一个快照,然后重新恢复创建新的虚拟机,此时对应的信息UUID,IMAGE等都是新的,包括登陆新的IP地址,其实,云主机提供了一个迁移接口,这里主要说的是冷迁移Migrate,它可以记录迁移前虚拟机的一切信息,改变的仅仅是其宿主机
冷迁移RESTful接口
curl -i -X POST http://$host:$port/v2/$tenant/servers/$uuid/action -H "Content-Type: application/json" -d '{"migrate": null}' -H "X-Auth-Token: $token
如果是用封装好的novacilent
nova migrate $uuid
第一个阶段是响应阶段
当发起请求之后,nova-api响应,传入instance,由于不会修改flavor,因此根据flavor来得到虚拟机占用的一些资源,VCPU,内存等
第二个阶段是调度阶段
上面已经获取到了迁移前虚拟机的一些详细信息,此时就要来决定调度到哪个节点上,首先如果节点disable的,就会被过滤掉,其次只会挑选同一个二级AZ的节点,再次需要满足虚拟机运行所占用的资源,最后满足以上条件的节点中挑选一个最合适的最为即将迁移的节点,最合适的条件是啥?节点机剩余内存越多越好
第三个阶段是迁移阶段
选好需要调度的节点后,保存好迁移前后虚拟机的状态信息,包括网络存储,然后关闭虚拟机,copy磁盘文件到目标节点,在目标节点上创建同样的虚拟机和网络
这里需要注意的几点:
1:冷迁移Migrate和Resize最大的区别在于是否更改虚拟机的flavor,也就是第一个阶段里传参是否传入新的flavor,后面的调度和迁移阶段基本一致,但resize操作优先考虑本节点,而冷迁移却会迁移到不同的节点(除非不满足要求)
2:对应冷迁移其实还有一个热迁移,热迁移为在线迁移,不需要关机,甚至感觉不出来在迁移,但是操作对硬件物理资源要求比较高,比如低配CPU的节点上的云主机,可以热迁移到相同配置或者更高配置的节点机上,但是却无法热迁移到更低配CPU所在的物理节点上
3:冷迁移和Resize都会关闭虚拟机的,因此假如你某些业务没有开机启动,迁移了之后发现进程没起来也不要感觉到奇怪,因为它不是热迁移;当然如果你迁移前已经stop了,迁移后肯定依旧是stop状态
4:我觉得迁移操作最关键的是节点机的调度工作,而调度过程中很大程度中和容量资源相关性很大,我们常看到的VCPU,内核等都和节点上对应物理资源不是一比一的关系,下面一篇可以看到