MIT6.824 Lecture 04 - 主从复制(Primary/Backup Replication)| 虚拟机、容错、复制状态机

MIT6.824 Lecture 04 - 主从复制(Primary/Backup Replication)| 虚拟机、容错、复制状态机
最新回答
野稚

2023-07-26 03:06:20

MIT6.824 Lecture 04 - 主从复制(Primary/Backup Replication) 笔记

一、背景

  1. 复制

    提高可用性需要进行容错,而容错最主要的方法就是复制。

    复制可以处理一些fail-stop故障(如宕机、断网),但大多数情况下无法处理软件中的bug和硬件缺陷。

    复制方案的经济性需综合考虑,包括是否值得进行复制以及需要多少副本。

  2. 状态转移和复制状态机

    状态转移:将primary的所有状态变化(包括CPU、内存和I/O设备的变化)几乎连续地传送到backup服务器上。当primary故障时,backup可以从它所保存的最新状态开始运行。

    复制状态机:将服务器建模为确定性的状态机,主备机从相同的初始状态开始,确保以相同的顺序接收相同的输入请求来保持同步。同时需要额外的信息协调不确定操作的同步(如获取时钟、随机数)。使用虚拟机可以做到监控所有的操作。

二、VMware FT 工作原理

  1. 虚拟机

    在物理机硬件上运行一个虚拟机监控器(VMM或Hypervisor),之上可以模拟出多个虚拟的计算机,安装需要的操作系统。

  2. 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直接丢弃。

三、非确定性事件同步

  1. 非确定性事件的类型

    客户端输入:不可预期的请求,需关心网络数据包的内容和中断的时间。

    非确定指令:如生成随机数、获取时间、获取硬件ID。

    多核CPU并发:指令顺序不可预期,不适合使用复制状态机方法(VMware FT论文只涉及虚拟机使用单核CPU)。

  2. Log Channel内容

    日志条目中可能包含:事件发生时的指令序号、Log类型(网络输入或非确定指令)、数据(网络数据包的内容或非确定指令在Primary上执行的结果)。

    Backup缓冲区为空时不允许执行指令。Backup会忽略自身物理机上的时钟中断,而是完全由Log来伪造中断。

  3. Bounce Buffer

    防止由于操作系统导致失去时序控制。数据包到达后会先拷贝到Bounce Buffer,此时Primary无法访问,VMM暂停Primary虚拟机的指令执行,记录指令序号,然后在指令序号的位置往Primary内存中插入伪造的模拟计时器中断。Backup同样在这个序号暂停虚拟机再拷贝进内存发送中断。

四、输出控制(Output Rule)

  • Primary和Backup都会生成回复报文,但只有Primary会真正将回复送出,Backup虚拟机会将回复报文丢弃。
  • 为防止在尴尬时刻宕机导致数据不一致,论文提出控制输出的方法:直到Backup虚机确认收到了相应的Log条目前,Primary虚机不允许生成任何输出。即在回复给客户端前先发给Backup,得到ACK后才能回复客户端。
  • 但这种方法会导致Primary必须停下来等待Backup,对性能有影响。
  • 另一种思路是:如果Primary在回复客户端之前崩溃,只是客户端没得到响应,无影响。如果Primary在回复之后崩溃,Backup变为Primary还会再回复一次客户端(由于TCP协议,客户端只需将重复回复当作重传报文丢弃)。

五、Test-and-Set 解决 Split Brain

  • 当primary和backup之间的网络连接出现故障但都在正常运行时,如果backup成为primary,就会产生两个primary,即脑裂问题。
  • FT的解决方法是在远程共享磁盘上设置一个flag,当primary或backup想继续成为primary时,就需要对flag执行原子化的atomic test-and-set操作。成功则可以成为新的primary,失败则vm停止执行。
  • 每次涉及到主从切换,都需要向Test-and-Set服务进行查询。因此,当Backup想要上线的时候,Test-and-Set服务必须在线。这会造成单点故障问题,但猜测这个服务也是有容错备份的。

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