主节点与从节点

复制

单个节点可以完整存放所有数据副本,节点间进行主从复制

配置新从节点

可以通过快照来加速新从节点复制:

  1. 对主节点的数据副本产生一个一致性快照,避免长时间锁定数据库。
  2. 拷贝快照到从节点
  3. 请求快照后面的更改日志
  4. 应用数据变更

节点失效

从节点失效:追赶式恢复

主节点失效:节点切换

自动切换

  1. 确认失效
  2. 选举新的主节点
  3. 使主节点生效

挑战

  • 从节点复制不完整
  • 各个数据层数据不一致,如 MySQL 和 Redis 之间
  • 多个主节点选举:脑裂
  • 如何有效检测主节点失效

复制日志实现

复制滞后问题

多主节点复制

使用场景

多数据中心

优点:

  1. 性能
  2. 容忍数据中心失效
  3. 容忍网络问题

缺点:写冲突

离线客户端操作

协作编辑

处理写冲突

同步与异步冲突检测

  • 同步:等待写请求完成对所有主节点的同步再通知用户写入成功。
  • 异步:等待单一主节点写入成功后通知用户卸乳成功,稍后多主节点数据同步的时候才能检测到冲突

避免冲突

收敛于一致的状态

自定义冲突解决逻辑

  • 写入时解决
  • 读取时解决

拓扑结构

无主节点复制