2023-07-26 03:06:20
MIT6.824 Lecture 04 - 主从复制(Primary/Backup Replication) 笔记
一、背景
复制
提高可用性需要进行容错,而容错最主要的方法就是复制。
复制可以处理一些fail-stop故障(如宕机、断网),但大多数情况下无法处理软件中的bug和硬件缺陷。
复制方案的经济性需综合考虑,包括是否值得进行复制以及需要多少副本。
状态转移和复制状态机
状态转移:将primary的所有状态变化(包括CPU、内存和I/O设备的变化)几乎连续地传送到backup服务器上。当primary故障时,backup可以从它所保存的最新状态开始运行。
复制状态机:将服务器建模为确定性的状态机,主备机从相同的初始状态开始,确保以相同的顺序接收相同的输入请求来保持同步。同时需要额外的信息协调不确定操作的同步(如获取时钟、随机数)。使用虚拟机可以做到监控所有的操作。
二、VMware FT 工作原理
虚拟机
在物理机硬件上运行一个虚拟机监控器(VMM或Hypervisor),之上可以模拟出多个虚拟的计算机,安装需要的操作系统。
VMware FT 工作流程
需要两个物理服务器(Primary和Backup),其中运行着虚拟机,Backup与Primary有着一样的操作系统,二者靠局域网络(LAN)连接,并且这两个服务器使用的同一块Disk Server(远程盘)。
客户端向Primary发送请求,该请求以网络数据包的形式发出,中断送到VMM。VMM进行两个操作:
在虚拟机上的guest系统上模拟中断,并将相应的数据发给Primary的guest操作系统。
拷贝这个请求,并通过网络(专用的logging channel)发送给Backup的VMM。
Backup的VMM同样模拟中断,并将相应的数据发给Backup的操作系统。Primary和Backup现在有了相同的输入,并将会以相同的方式处理这个输入,保持同步。
Primary通过VMM在虚机内模拟的虚拟网卡发出回复报文,VMM将这个报文发送给客户端。Backup运行相同顺序的指令,但回复报文会被VMM直接丢弃。
三、非确定性事件同步
非确定性事件的类型
客户端输入:不可预期的请求,需关心网络数据包的内容和中断的时间。
非确定指令:如生成随机数、获取时间、获取硬件ID。
多核CPU并发:指令顺序不可预期,不适合使用复制状态机方法(VMware FT论文只涉及虚拟机使用单核CPU)。
Log Channel内容
日志条目中可能包含:事件发生时的指令序号、Log类型(网络输入或非确定指令)、数据(网络数据包的内容或非确定指令在Primary上执行的结果)。
Backup缓冲区为空时不允许执行指令。Backup会忽略自身物理机上的时钟中断,而是完全由Log来伪造中断。
Bounce Buffer
防止由于操作系统导致失去时序控制。数据包到达后会先拷贝到Bounce Buffer,此时Primary无法访问,VMM暂停Primary虚拟机的指令执行,记录指令序号,然后在指令序号的位置往Primary内存中插入伪造的模拟计时器中断。Backup同样在这个序号暂停虚拟机再拷贝进内存发送中断。
四、输出控制(Output Rule)
五、Test-and-Set 解决 Split Brain

以上是对MIT6.824 Lecture 04 - 主从复制(Primary/Backup Replication)的详细笔记,包括背景、VMware FT工作原理、非确定性事件同步、输出控制以及Test-and-Set解决Split Brain问题的相关内容。