主从同步(master-slave)
主从同步是高可用的基石,如果没有主从同步就存在单点问题
如何同步
- 同步同步: sync
- 异步同步: async
同步方式
- 全量同步
- 增量同步
同步手段
- master推
- slave拉
进度同步
- ACK机制
- 偏移量
解决的问题
- 数据恢复(故障恢复)
- 读写分离
实际案例
- MySQL 基于binlog的主从同步
- Redis 基于RDB和AOF的主从同步
- RocketMQ 基于CommitLog的主从同步
一致性
依赖于主从同步的故障转移,master节点发生意外的时候,根据选举算法自动将slave节点提升为master节点对外提供服务。保障服务的可用性
- 哨兵节点(监控节点)
- MySQL keepalive 监控
- Redis Sentinel 监控节点
- Dledger 实现自动故障转移
- 集群选举
- slave提升为master
- master恢复
集群-水平扩容
主从同步 + 故障转移解决了单点机器高可用的问题,但还是依赖单台机器的CPU/磁盘/内存等硬件的限制,做不到水平扩容。
集群部署,水平扩容
集群部署:
- 需要进行数据分片,典型案例有
- Redis Cluster
- RocketMQ
- 分库分表,典型案例有
- MySQL分库分表
分片思路
- 按照对象分片(1-100000实例1)(100001-200000实例2)(…)
- 一致性Hash
- 预分配