文章大纲
在迁移的过程中,源 VM 需要将整个状态传输到目标 VM,VM 的状态主要就是内存,如果有足够可用的资源,迁移会很好的收敛,如果资源不够需求,迁移可能会超时并最终导致失败。
影响迁移的主要因素是内存脏页率,因为内存会不断的迁移到目标节点,同时又会有相同的内存页发生了更改。可以根据情况选择合适的策略。
迁移策略
有三种支持的迁移策略:
- Pre-copy
- Post-copy
- Auto-converge
Pre-copy
Pre-copy 的迁移过程:
- 目标 VM 已创建,但是 Guest 仍在源 VM 上运行
- 源开始向目标发送 VM 状态块(内存),直至所有状态都已转移到目标 VM
- Guest 开始在目标 VM 上运行
- 删除源 VM
在大多数情况下,这种策略是最安全、最快的策略,也很容易取消。这是推荐测策略,如果无法满足可指定其它的策略。
Post-copy
Post-copy 的迁移过程:
- 目标 VM 已创建
- Guest 正在目标 VM 上运行
- 源开始向目标发送 VM 状态的块数据(内存)
- 当在目标 VM 上运行的 Guest 访问内存时:
- 如果目标 VM 存在内存,则可以访问
- 否则,目标 VM 会从源 VM 请求内存
- 在目标 VM 上更新所有内存状态后,源 VM 将被删除
这种策略最典型的特征是 Guest 立即开始在目标 VM 上运行,这种方式有优点也有缺点。
优点:
- 相同的内存块不会拷贝两次
- 高脏页率影响较小
- 消耗更少的带宽
缺点:
- VM 状态没有一个真实的类源,如果目标 VM 或Guest VM 崩溃,VM 将无法恢复。
- 慢预热,当 guest 访问目标 VM 上没有的内存时,需要等待从源 VM 上复制过来。
- 比 Pre-copy 慢
- 更难取消迁移
Auto-converge
Auto-converge 是一种帮助 Pre-copy 迁移更快收敛的技术,无需更改迁移工作原理的核心算法。
由于高脏页率通常是迁移不收敛的最重要因素,因此自动收敛只会限制 Guest 的CPU。
如果迁移收敛得足够快,Guest 的CPU就不会受到限制或受到非常低的限制。但是,如果迁移收敛得不够快,随着时间的推移,CPU将受到越来越多的限制。