高可用技术模板整理

主从同步(master-slave)

主从同步是高可用的基石,如果没有主从同步就存在单点问题

如何同步

  • 同步同步: sync
  • 异步同步: async

同步方式

  • 全量同步
  • 增量同步

同步手段

  • master推
  • slave拉

进度同步

  • ACK机制
  • 偏移量

解决的问题

  • 数据恢复(故障恢复)
  • 读写分离

实际案例

  • MySQL 基于binlog的主从同步
  • Redis 基于RDB和AOF的主从同步
  • RocketMQ 基于CommitLog的主从同步

一致性

  • 强一致性: 同时写入master和其他所有的slave节点才算成功
  • 最终一致性: 写入master节点,后续同步到slave节点即可

    故障转移(failover)

依赖于主从同步的故障转移,master节点发生意外的时候,根据选举算法自动将slave节点提升为master节点对外提供服务。保障服务的可用性

  • 哨兵节点(监控节点)
    • MySQL keepalive 监控
    • Redis Sentinel 监控节点
    • Dledger 实现自动故障转移
  • 集群选举
  • slave提升为master
  • master恢复

    集群-水平扩容

    主从同步 + 故障转移解决了单点机器高可用的问题,但还是依赖单台机器的CPU/磁盘/内存等硬件的限制,做不到水平扩容。

集群部署,水平扩容

集群部署:

  • 需要进行数据分片,典型案例有
    • Redis Cluster
    • RocketMQ
  • 分库分表,典型案例有
    • MySQL分库分表

分片思路

  • 按照对象分片(1-100000实例1)(100001-200000实例2)(…)
  • 一致性Hash
  • 预分配