我们常常遇到需要迁移虚拟机的问题,比如需要维护某台设备,会将设备上的一切应用迁移到另一台设备。但是如何将虚拟机进行迁移呢?好比说,虚拟机中正在运行一个程序,这个程序有源源不断的数据访问,怎么使得在不影响这些访问的情况下把虚拟机迁移到领一台服务器上呢?
尤其是当远程迁移的时候,怎么在虚拟机不崩溃的情况下迁移走所有的状态?
快照技术
snapshot(快照)就是将虚拟机的各种状态全部记录下来,存进硬盘里,等待下一次开启虚拟机的时候读取,这些状态包括:
- vCPU 状态(寄存器等)
- I/O设备状态
- 虚拟磁盘状态(利用写时拷贝技术)
- 所有的内存状态(实现最困难)
内存迁移
内存是最难处理的,因为它一直在变化。内存实时读写,导致我们没有办法截取某一时刻对内存进行拷贝。这就形成了两种处理方法:
pre-copy
- 将当前时刻所有的内存状态复制并发送到远程服务器,先不管实时更新的内存状态;
- 将新时刻的已改变的内存复制并发送到远程服务器:
(1).VMM会对所有的页进行写保护,当有数据改变时,标记该页为“赃页”;
(2).VMM将所有“赃页”拷贝进缓冲区,将缓冲区通过网络发送到远程服务器;
(3). 由于相关联的内存的局部性,赃页的数目很小,先设为 D t ( M ) D_{t(M)} Dt(<

本文介绍了虚拟机迁移的原理,包括快照技术和内存迁移。快照技术用于记录虚拟机的全面状态,而内存迁移则面临实时变化的挑战,采用pre-copy和post-copy策略来处理。pre-copy在迁移过程中不断复制和发送脏页,直至达到阈值,再停止虚拟机完成迁移;post-copy则是先迁移vCPU状态,然后在发生页错误时拷贝到远程主机,允许虚拟机在迁移期间保持运行。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



