ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

6.824分布式系统[3]-主从复制

2020-01-31 21:55:18  阅读:304  来源: 互联网

标签:主从复制 6.824 FT 中断 primary 容错 副本 指令 分布式系统


准备工作

阅读:Fault-Tolerant Virtual Machines

为什么要阅读这篇文章

  • 了解分布式系统的容错机制

  • 本文是对于容错机制的比较特殊的实现,其并不是要设计一个应用程序级别的容错系统,而是一个系统级别的。需要处理CPU中断,能够为了实现一个容错的虚拟机系统(VM-FT),难度更大。

容错(Fault tolerance)

  • 容错是即使发生故障也会继续提供服务的能力
    一些理想的属性:

  • 可用性:尽管[某些故障]仍然可用

  • 一致性:正确性的保证,对于客户端来说就像是面对一台服务器

  • 对用户和软件透明(内部运行机制透明)

  • 高效

论文尝试解决哪些失败?

  • 断电等突然停止的错误

  • 网络丢包

  • 网络分区

核心思想

  • 容错的核心思想是建立副本,需要两个以上的服务器。

  • 每一个副本都维持相同的状态,如果一个服务器失败,其他服务器可以继续进行。

  • 需要思考的重要问题:

    • 什么状态需要去复制?

    • primary(主服务器)需要等待副本服务器复制完成吗?

    • 什么时候需要切换到副本服务器?

    • 切换到副本时是否可能发生异常?

    • 切换到副本时能否加速?


两种主要的方式

  • 状态转移

    • primary执行操作

    • primary将状态转移到副本

    • 状态转移虽然简单,但是状态可能很大,转移可能很慢

    • 论文中的虚拟机使用了复制状态机。


  • 复制状态机

    • 所有副本执行所有操作

    • 相同的开始状态

    • 相同的操作

    • 相同的顺序

    • 确定性的操作

    • 则具有相同的最终状态

    • 更有效率,但是更复杂


本论文的目标

  • 构建复制状态机

  • Primary和副本具有相同的初始状态(内存,磁盘文件)

  • primary通过日志通道(logging channel)传递给副本服务器

  • 使主从具有相同的指令、相同的输入、相同的执行

什么时候在主数据库上执行与备份上可能不同?

  • 来自外部的输入(网络)

  • 从存储服务器读取的数据

  • 定时器中断(Timing of interrupts)。 参考:wikibook

  • 一些特殊的指令:如cpu周期计数

  • 冲突

不一致的原因

  • 锁定服务器将lock授予客户端C1,拒绝来自C2的后续请求

  • 锁定服务器在一分钟后撤消lock

  • 假设C1持有lock并且,1分钟马上就要到时,c2请求锁。这时,Primary可能会在定时器1分钟发送中断之前立即看到C2的请求,拒绝其请求。副本可能会在定时器1分钟发送中断之后看到C2的请求,同意请求。

  • 因此:副本必须在指令流中的同一点以相同的顺序看到相同的事件。

解决定时器中断的解决方案

  • primary

    • FT 收到定时器中断信号

    • FT从CPU读取指令

    • FT在日志通道(logging channel)上发送 "在指令x处触发计时器中断”

    • FT给primary发送中断信号,然后恢复。


  • Backup

    • 忽略自己的定时器硬件

    • 在副本执行指令X之前,观察是否日志中有需要在这之前执行的日志。

    • FT告诉CPU在指令X处中断

    • FT模拟计时器中断,然后恢复。


解决磁盘、网络数据输入可能不一致的问题

FT拦截,只能够让primary能够访问硬件。

  • Primary:

  • FT通知硬件通过方式将数据存入FT的私有缓存中

  • 在某一时刻,硬件执行DMA,然后中断

  • FT收到中断信号

  • FT暂停primary

  • FT复制缓冲区数据到primary内存中。

  • FT为primary模拟中断,稍后恢复。

  • FT将数据和指令发送到备份 Backup:

    • FT从日志流中获取数据和指令

    • FT告诉CPU在指令X处中断

    • FT在中断期间复制数据


缓冲区(bounce buffer)的目的就是为了在内存的同一个时间点执行相同的操作,读取相同的数据。

解决特殊的指令

  • Primary:

    • 如果primary执行了特殊的指令,FT会通知CPU中断

    • FT执行指令并记录结果

    • 将结果和指令发送到备份


  • Backup:

    • 副本在执行此指令时也会中断

    • 副本应用从primary中得到的值


Output Ruler

  • primary必须在副本收到此输出指令的日志后,才能够输出。

  • 此规则是必要的,因为我们的服务是为了在奔溃时让用户是无感知的。

  • 有了此规则,即便pimary奔溃了,副本也能够和primary一样,对于之前的请求返回相同的数据。

  • 假设primary收到请求I1 I2 I3 并输出, 这时primary奔溃,副本只能看到I1,I2。这时 一个之前收到I1,I2,I3的客户端由于切换到副本后,相同的请求就只能看到I1,I2。

  • 增加了延迟,限制了性能。

问 & 答

如果primary收到副本对于I3 ack确认后奔溃,会发生什么?

这时会切换到副本运行,而副本会执行I3命令,并返回给客户端。

如果primary在发出输出之后崩溃了怎么办?

  • 副本会立即接管。

  • 对于TCP传输:接收者将忽略重复的序列号。

  • 对于磁盘:副本将相同的数据写入相同的块。

如果网络分区,primary和副本都认为彼此失活?

  • 共享磁盘只允许唯一的一个primary。

为什么确定性的操作,在物理硬件上比虚拟机上更难?

虚拟机管理程序(hypervisor)模拟和控制硬件的许多操作,这些操作可能会导致primary和副本执行不同。例如定时中断(timing interrupts)

什么是虚拟机管理程序 (hypervisor) ?

  • 管理程序是虚拟机系统的一部分,和虚拟机监视器(VMM)一样。

  • 系统管理程序模拟计算机以及在其中运行的操作系统和程序。

  • 在本文中,primary和副本是运行在虚拟机中的guest操作系统。而FT是实现每个虚拟机管理程序的一部分。

GFS和VMware FT均提供容错功能,谁更好?

  • FT更底层强大,对内存,网络包和磁盘提供了一种容错能力。可以使用它为所有运行在其上的服务透明地提供容错功能。

  • GFS仅提供存储容错功能。 由于GFS专用于特定的简单服务(存储),因此其复制比FT更有效。 例如,GFS不需要使中断在所有副本上的完全相同的指令处发生。

  • GFS是应用程序级别的具有容错能力的大型应用程序之一。

缓冲区如何帮助避免冲突

网络数据包或请求的磁盘块到达primary并且要复制到primary的内存时,

  • 没有FT,相关硬件将数据复制到内存中,同时 软件正在执行。操作系统指令可以在DMA期间读取该内存。

  • 由于冲突,在某一时刻,可能无法看到DMA的数据。因此可能出现由于primary与副本的时间不同,一个能看到,一个不能看到这个数据。

表现

  • logging带宽

  • 直接反应磁盘读取率 + 网络输入率

  • 大约18 Mbit/s for my-sql

  • 比较慢,应用程序可以至少400 Mbps的速度读取磁盘

  • 用途

  • 关键但强度较低的服务,例如 名称服务器。

  • 适用于软件行为不常发生改变的服务。

高吞吐量服务的主从复制

  • 将应用程序主从状态机用于数据库等高吞吐量服。

  • 状态只是DB,而不是全部的内存和磁盘。

  • 事件是数据库命令(put或get),而不是数据包和中断。

  • 更少的细粒度同步,更少的开销。

  • GFS使用应用程序级复制,与lab2相似。

参考资料

*讲义
*FAQ


标签:主从复制,6.824,FT,中断,primary,容错,副本,指令,分布式系统
来源: https://blog.51cto.com/13784902/2468702

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有