The Design of a Practical System for Fault-Tolerant Virtual Machines

阅读论文 Fault-Tolerant Virtual Machines,参考 FAQnote

概述

论文使用虚拟机、机器级别的主从复制(一主一从)和共享磁盘的方式设计容错系统,目前只支持单处理器的虚拟机。

有两种复制方式,状态转移复制和状态机复制。状态转移复制是将主节点的所有状态复制到从节点;而状态机复制要求节点是一个确定性状态机,不同节点从同一个状态以相同的顺序执行操作,可以得到相同的结果。

比较有意思的是,不像我所了解的常规数据复制,论文实现的系统使用机器级别的复制,状态包含 CPU、内存和 I/O 设备的状态,操作是 x86 指令。在机器级别上,状态转移复制的缺点是会将所有状态的更改通过网络进行传输,发送状态需要很多带宽;状态机复制使用更少的网络带宽,但是需要特殊处理非确定性操作(例如:获取时间、定时中断)来保证主从一致,这在物理服务器上很难实现,特别是当处理器频率增加时。

PS:时间是非确定的很好理解,但是定时中断为什么是非确定的,我的想法是虽然主从的状态是一致的(如果没有中断),但是执行速度也不是完全一致,所以中断的时机可能不同。

论文设计的系统使用状态机复制,利用虚拟机(VM)由虚拟机管理程序完全控制的特性,当主虚拟机执行非确定性操作时,虚拟机管理程序可以捕获必要的信息发送给从虚拟机,将非确定性操作转化为确定性操作,从而保证主从一致。只支持单处理器虚拟机,因为多处理器产生的并发操作是非确定性的,存在显著的性能问题。

主从虚拟机运行在不同的服务器上,从虚拟机和主虚拟机以相同的方式运行,并且总是有较小的延迟(小于 100 毫秒),课程讲义提到至少滞后一个日志项。只有主虚拟机在网络上发布其存在,输入(例如:网络、磁盘、键盘、鼠标)只会发送给主虚拟机,主虚拟机通过网络连接(称为日志通道,logging channel)将其转发给从虚拟机。同时,只有主虚拟机会产生输出,从虚拟机的输出将被虚拟机管理程序丢弃。

确定性重放

VMware FT 使用确定性重放,使从虚拟机能够通过重放日志达到和主虚拟机相同的状态。具体来说,主虚拟机的输入和非确定性操作都会被虚拟机管理程序捕获,然后生成日志(不会写入磁盘),发送给从虚拟机。对于非确定性操作,日志会记录必要的信息,保证主从一致。例如,对于中断操作,日志会记录操作发生时所完成的指令数量。论文提到该技术的实现有使用硬件性能计数器(HPC)。

特别注意,日志仅包含输入和非确定性操作相关的信息,确定性操作在从虚拟机的本地执行。具体来说,主虚拟机和从虚拟机都是状态机,会自动执行操作(由 VM 中的 Linux 和 App 发起,这也说明了为什么主从虚拟机的初始状态必须相同),只不过输入只会发送给主虚拟机,以及存在非确定性操作,所以输入和非确定性操作需要以日志的形式包含额外信息发送给从虚拟机。

容错协议

但是仅使用确定性重放还不够,需要额外的机制保证系统的容错性。如果主虚拟机在执行输出操作之后发生故障,而日志没有发送给从虚拟机,那么从虚拟机接管之后,在其输出之前的非确定性操作(未收到日志的)可能会得到不同的输出结果,从而产生不一致(不一致主要是针对客户端的感知而言)。

解决方案是在主虚拟机发送输出之前,向从虚拟机发送输出操作的日志并等待其确认,当从虚拟机接收到该输出操作及之前的所有日志之后,从虚拟机回复一个确认,然后主虚拟机可以向外部发送输出。注意,主虚拟机只是延迟发送输出,但是没有停止执行(即在等待输出的同时会继续执行其他操作,就像在某个线程等待磁盘 I/O 时会切换到其他线程一样)。该机制在主虚拟机发生故障时,可能会产生两次相同的输出,因为从虚拟机无法得知主虚拟机是否发送输出,但是论文随后提到 TCP 可以保证网络数据包的去重(我的理解是 TCP 是根据序列号去重的,由于主从虚拟机状态相同,所以会产生相同的序列号)。

故障检测和恢复

系统通过监控节点的心跳(使用 UDP),以及日志通道上的流量来判断节点是否发生故障(使用定时中断,保证流量不会停止)。

  • 从虚拟机故障:主虚拟机继续执行,但是停止发送日志。
  • 主虚拟机故障:从虚拟机重放日志以追赶主虚拟机,然后将从虚拟机提升为主虚拟机。VMware FT 会在网络上发布新的主虚拟机的 MAC 地址,以便交换机知道其位于哪个服务器上。
  • 网络分区故障:主虚拟机可能由于网络问题和从虚拟机中断连接,如果此时将从虚拟机提升为主虚拟机,将会导致脑裂。为避免该问题,容错协议要求在检测到故障时,主从虚拟机需要在共享磁盘上执行 test-and-set 原子操作。操作成功的虚拟机作为主虚拟机存活,操作失败的虚拟机会自行中止。

不论是启动系统时,还是故障恢复时,都需要保证存在一个从虚拟机。VMware FT 使用 FT VMotion 功能,将虚拟机复制到集群中的某个服务器上(根据资源使用情况和其他约束条件选择)。该功能会建立从源虚拟机到目标虚拟机的日志通道,并且将源虚拟机设置为主虚拟机(记录日志模式),目标虚拟机设置为从虚拟机(重放日志模式)。该功能仅会中断源虚拟机小于 1 秒的时间,在复制的过程中源虚拟机仍会正常执行,日志会被存放在缓冲区中。

总结

论文介绍容错虚拟机的实现,还提到磁盘 I/O 和网络问题及其解决方案,不同设计的决策以及对各个负载的性能测试,详情参见论文。PS:课程讲义很不错,可以加深对论文内容的理解,我的理解还是太浅。

作者

Ligh0x74

发布于

2024-01-23

更新于

2024-01-28

许可协议

评论