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