redis高可用

文章目录

    • 高可用
    • 复制
      • 完整重同步
      • 部分重同步
      • 命令传播
    • 哨兵模式
      • 正常运行
        • 命令连接
        • 订阅连接
      • 检查下线
        • 主观下线
        • 客观下线
      • 故障转移
        • Leader选举
        • 故障恢复

高可用

  • 主从复制+哨兵模式。

复制

  • 命令:SLAVEOF ip
    redis高可用_第1张图片

完整重同步

  • 步骤
    1. 从向主发送SYNC
    2. 主执行BGSAVE,生成RDB文件,并使用缓冲记录快照之后的所有写命令。
    3. 主发送RDB文件至从,从阻塞请求加载RDB文件。
    4. 主发送缓冲区命令至从,从执行到同步。
  • 缺点:消耗资源,主持久化、网络传输RDB、从阻塞请求。

部分重同步

  • 实现方式:
    • 主从复制偏移量offset。字节数的位移。
    • 主服务器的复制积压缓冲区
      • offset滞后于缓冲区,需要完整重同步。
      • offset在缓冲区中,部分重同步。
      • offset和缓冲区一致,不重同步。
    • 服务器运行ID。判断从节点身份,和缓存区、offset一起决定是完整还是部分重同步。

命令传播

  • 重同步完成之后:发送写命令+写复制积压缓冲区。
    redis高可用_第2张图片

哨兵模式

  • Sentinel模式(特殊模式下的redis实例)监视多个主从服务器,主服务器下线时,将从服务器升级为新的主服务器。

正常运行

  • redis高可用_第3张图片
  • Sentinel实例之间只需要创建命令连接。

命令连接

  • 连接主从服务器:发送INFO命令,默认10s一次,获取服务器当前信息(主服务还包括有哪些从节点)。
  • 连接其他Sentinel实例:下线检测、故障。

订阅连接

  • 连接主从服务器:
    • 向服务器**sentinel:hello频道**发送自身Sentinel实例和监视的主服务器信息,默认2s一次。
    • 订阅服务器_sentinel_:hello频道,更新Sentinel和主从服务器拓扑,包括发现未知的Sentiel实例。

检查下线

  • redis高可用_第4张图片

主观下线

  • Sentinel默认每秒ping一次(主从服务器,其他Sentinel),超过阈值无响应。

客观下线

  • 认为主观下线时,向其他Sentinel发送命令询问节点是否下线。
  • 如果多数Sentinel回复节点下线,则认为客观下线。

故障转移

  • redis高可用_第5张图片

Leader选举

  • 在监视这个master的Sentinel中选举Leader节点操作故障转移。raft算法。
  • 步骤:
    1. 做主观下线的Sentinel节点像其他Sentinel节点发送命令,要求将自己设置为Leader。
    2. 接收到的sentinel同意最先收到的Sentinel节点命令(先到先得),选该节点为Leader,发送回复。
    3. 如果做主观下线的Sentinel节点发现自己的票数已经超过半数,则成为Leader。
    4. 如果一定时间内未选出Leader,那么将等待一段时重新进行选举。

故障恢复

  • 从服务器中升级一个至主服务器。
  • 其他从服务器复制这个新的主服务器。
  • 下线的主服务降级为从服务器,上线后,复制新的主服务器。
  • redis高可用_第6张图片

你可能感兴趣的:(数据库,复制,哨兵)