对于分布式系统,需要具有高可容错性,因此需要通过主从备份的方式实现主从服务器在任何时刻保持一致。备份的方式有两种,一种叫state transfer(状态转移),即将主服务器的全部信息传输给备份服务器,这样操作的数据量较大;另一种叫replicated state machine(备份状态),即主从服务器以相同状态启动,之后导入相同的输入,这样实现方案复杂,但传输数据量相对较小。状态机在物理机上难以实现,因为定时器中断等输入信息很可能不同,但是在虚拟机建立在hypervisor基础上,因此可以得到确定的输入。

Deterministic Replay

确定性重放,是一种实现可重放日志的方案。方案的需求有(1)正确捕捉所有输入、不确定性(2)备份虚拟机重放输入、不确定性(3)保证性能不降级,因此实现方式为(1)主服务器记录日志(2)传输至备份机重放(3)对于定时器、IO中断等不确定输入,记录下其在何指令后发生。

VMware vSphere Fault Tolerance

在Deterministic Replay生成的可重复日志的基础上,通过VMware FT实现主从机同步备份。
Primary-backup Replication论文阅读笔记
核心在于主机失效,备份机接管后,如何保证备份机与原输出一致的方式运行。实现方案为延迟主机输出,即每次在备份机完全接收到日志后再输出。
Primary-backup Replication论文阅读笔记
备份机接收到log信息后,发送ack至主机,主机接收到后再进行输出。

主从切换

为保证快速处理失效情况,需要进行监控:(1)两台物理机之间通过UDP发送心跳信息(2)时刻监控是否有主机向备份机发送的log信息和备份机向主机发送的ack信息。
在某机器失效后,需要及时进行处理:(1)备份机失效后,主机go live,退出发送日志,继续运行(2)主机失效后,备份机消费完log后,升级为主机,开始go live,向外界输出
有一种叫做Split-Brain Syndrome(裂脑综合征)的现象,即主从网络不通导致出现两个master,解决方案为主从机在go live之前,会在shared disk上的一个字段进行原子的test-and-set,若成功则可以go live。

相关文章: