NOTE

4.3 分布式系统复制架构之主从复制

1. 什么是Leader-Follower - 副本中有且仅有一个Leader,其他的都是Follower 2. Leader-Follower使用场景 - 单个数据中心 3. Leader选举 所有副本中选出一个作为Leader,其他的副本作为Follower 3.1. 选举方法 1. 手动 -

分布式系统创建于 更新于 historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 什么是Leader-Follower

  • 副本中有且仅有一个Leader,其他的都是Follower

2. Leader-Follower使用场景

  • 单个数据中心

3. Leader选举

所有副本中选出一个作为Leader,其他的副本作为Follower

3.1. 选举方法

  1. 手动
    • 手动指定一个节点为leader
  2. 依赖中心化组件
    • 比如Zookeeper
  3. 选举算法

3.2. 脑裂问题

如果发生网络分区,那么每个分区都有一个Leader,这就是脑裂问题 解决:引入过半机制

4. Leader-Follower原理

4.1. 启动时Leader选举

  1. 手动
  2. 中心化
  3. 选举算法
    • 刚启动的集群没有数据,所以按照ID大小决定Leader。
    • A启动,通过ping得到节点列表(A),选举ID最小的节点(只有自己)为master,但是不满足最少2个节点,循环等待
    • B启动,通过ping得到节点列表(A、B),选举ID最小的节点A为master,满足最少2个节点,组成集群
    • C启动,通过ping得到节点列表(A、B、C),由于已经有了master,直接加入这个集群即可

4.2. 数据同步

4.2.1. 同步过程

  • follower第一次连接leader,需要同步leader的所有数据,这个过程叫做全量同步。过程如下:
    1. leader把当前时刻数据做一个快照
    2. leader将快照发送给新的follower
    3. leader继续服务客户端写入数据
    4. follower重放快照
    5. follower拉取leader快照之后的所有数据变更

4.2.2. 同步方式

4.2.3. 同步日志

4.3. 请求处理

由谁处理,如何路由

4.3.1. 读请求

可由leader或者follower处理

4.3.2. 写请求

必须由leader处理 如果请求路由到leader,那么leader处理完同步给follower 如果请求路由到follower,那么需要由follower转发给leader或者follower告知client重定向到leader处理,leader处理完再同步给follower

4.4. 故障处理

4.4.1. 故障检测

分布式系统故障.md

4.4.2. 故障恢复

4.4.2.1. Follower宕机
  • Follower宕机之后重启,可以从本地日志知道自己当前复制到哪个位置,重新连接Leader之后从这个位置往后复制即可,这叫做增量同步。过程如下:
    1. follower重启连接leader
    2. follower读取本地日志的位置,从leader拉取这个位置之后的数据变更
    3. follower重放这些数据变更
4.4.2.2. Leader宕机
  • Leader宕机之后需要:
    • 选取一个follower提升为leader
    • 告知客户端和其他follower leader已修改

5. 参考