主节点与从节点
复制
单个节点可以完整存放所有数据副本,节点间进行主从复制。
配置新从节点
可以通过快照来加速新从节点复制:
- 对主节点的数据副本产生一个一致性快照,避免长时间锁定数据库。
 - 拷贝快照到从节点
 - 请求快照后面的更改日志
 - 应用数据变更
 
节点失效
从节点失效:追赶式恢复
主节点失效:节点切换
自动切换
- 确认失效
 - 选举新的主节点
 - 使主节点生效
 
挑战
- 从节点复制不完整
 - 各个数据层数据不一致,如 MySQL 和 Redis 之间
 - 多个主节点选举:脑裂
 - 如何有效检测主节点失效
 
复制日志实现
复制滞后问题
多主节点复制
使用场景
多数据中心
优点:
- 性能
 - 容忍数据中心失效
 - 容忍网络问题
 
缺点:写冲突
离线客户端操作
协作编辑
处理写冲突
同步与异步冲突检测
- 同步:等待写请求完成对所有主节点的同步再通知用户写入成功。
 - 异步:等待单一主节点写入成功后通知用户卸乳成功,稍后多主节点数据同步的时候才能检测到冲突
 
避免冲突
收敛于一致的状态
自定义冲突解决逻辑
- 写入时解决
 - 读取时解决