本文将介绍2010年由VMware公司提出的商业级的容错虚拟机系统,该系统基于VMware vSphere 4.0设计。该系统通过在另一台服务器上复制主虚拟机的执行来提供容错支持,同时可以在故障发生后自动恢复冗余。
论文参考:《The Design of a Practical System for Fault-Tolerant Virtual Machines》
原文博客:pEacill
虚拟机容错技术
在现代服务器架构中,容错技术对于保证服务的持续性和可靠性至关重要。其中,主备模式作为一种经典的容错解决方案,一直受到广泛关注。这种模式的核心在于维持一个随时可以接管的备用服务器,确保在主服务器发生故障时能够无缝切换。
传统的容错实现方式主要依赖于状态复制,即直接复制主服务器上的所有状态变化,包括CPU状态、内存内容和I/O设备状态等。这种方法虽然直观,但需要消耗大量网络带宽,在实际应用中往往面临效率瓶颈。
相比之下,状态机方法提供了一种更为高效的解决方案。这种方法将服务器视为确定性的状态机,通过确保主备服务器从相同的初始状态启动,并按相同顺序接收输入请求来维持同步。这种方法大大减少了需要传输的数据量,提高了系统效率。
VMware vSphere 4.0平台在这一领域取得了重要突破。通过虚拟机技术,它成功实现了高效的容错系统。该系统基于确定性重放技术,不仅完整支持x86架构,还能在故障发生后自动在集群中启动新的备份虚拟机。
虚拟机平台为实现状态机方法提供了理想环境,因为虚拟机本身就是一个定义明确的状态机,而Hypervisor可以完全控制虚拟机的执行过程。这种实现方式不仅可以在普通商用硬件上直接部署,而且由于带宽需求较低,主备服务器可以部署在物理距离较远的位置,进一步提高了系统的可靠性。
这种创新的容错技术为企业级应用提供了强有力的保障,不仅确保了服务的连续性,还实现了故障后的自动恢复,代表了服务器容错技术的重要发展方向。
FT(Fault-Tolerant)设计
VMware FT的基本配置如下图:
在VMware的容错系统中,主备虚拟机采用了一种优雅的同步机制。主虚拟机在一台物理服务器上运行,而备份虚拟机则在另一台物理服务器上运行,两者保持虚拟锁同步,只是备份虚拟机会有轻微的时间延迟。系统的存储架构采用共享存储方案,主备虚拟机都可以访问存储在光纤通道或iSCSI磁盘阵列上的虚拟磁盘。在网络通信方面,只有主虚拟机会在网络上公开自己的存在,因此所有的网络输入、键盘输入和鼠标操作都只会直接发送给主虚拟机。
为了保持同步,系统设计了一个称为日志通道的网络连接(channel)。主虚拟机接收到的所有输入都会通过这个通道转发给备份虚拟机。系统还会传输必要的额外信息,确保备份虚拟机能以完全相同的方式执行非确定性操作。虽然备份虚拟机会执行相同的操作,但其输出会被hypervisor拦截,只有主虚拟机的输出才会返回给客户端。
为了确保系统的可靠性,主备虚拟机之间遵循特定的协议,包括备份虚拟机的显式确认机制,这样可以保证在主虚拟机发生故障时不会丢失数据。系统通过心跳检测和日志通道流量监控来及时发现虚拟机故障,并且即使在发生脑裂情况时,也能确保只有一个虚拟机接管执行。
确定性重放的实现
在VMware的容错系统中,虚拟机的执行可以被视为确定性状态机的复制。为了确保备份虚拟机的执行与主虚拟机完全一致,必须在相同的初始状态下启动两台虚拟机&