Redis

关注公众号 jb51net

关闭
首页 > 数据库 > Redis > Redis 高可用集群

Redis 高可用与集群原理深度解析

作者:波波烤鸭

Redis高可用机制涵盖主从复制、哨兵自动故障转移及Cluster集群分片与高可用,依赖Gossip协议实现节点通信与状态同步,源码解析了故障转移流程,为后续持久化内容奠定基础,本文给大家介绍Redis高可用与集群原理,感兴趣的朋友跟随小编一起看看吧

Redis 高可用与集群原理

1. 前言

Redis 单机虽然高性能,但一旦节点宕机,数据丢失或服务不可用问题会非常严重。为了解决这一问题,Redis 提供了主从复制、哨兵(Sentinel)、Cluster 集群 等高可用机制。

这一篇文章我们重点拆解:

2. Redis 高可用架构演进

👉 可以理解为:
复制 = 数据冗余
Sentinel = 自动运维
Cluster = 扩展能力 + 内置高可用

3. Sentinel 哨兵机制

3.1 Sentinel 的作用

3.2 故障检测机制

3.3 Leader 选举

在多个 Sentinel 中,需要选出一个 Leader 来执行故障转移,算法基于 Raft 的选举思想

3.4 源码剖析(sentinel.c)

哨兵检测主观下线:

// sentinel.c
if (mst->flags & SRI_MASTER) {
    if ((mst->flags & SRI_S_DOWN) == 0 && mst->link->disconnected) {
        mst->flags |= SRI_S_DOWN; // 标记主观下线
        sentinelEvent(LL_WARNING, "+sdown", mst, "%@");
    }
}

这段代码表明,当哨兵发现主节点无法连接时,会标记为 S_DOWN

4. Redis Cluster 集群架构

4.1 核心特性

4.2 集群拓扑

         ┌───────────┐
         │   Client  │
         └─────┬─────┘
               │
 ┌─────────────▼─────────────┐
 │        Cluster            │
 │ ┌────────┐   ┌────────┐   │
 │ │ Master │   │ Master │   │ ...
 │ │ Slot 0 │   │ Slot 5461  │
 │ └───▲────┘   └────▲───┘   │
 │     │            │         │
 │   ┌─┴─┐        ┌─┴─┐       │
 │   │Slave│      │Slave│     │
 │   └─────┘      └─────┘     │
 └────────────────────────────┘

4.3 请求路由

5. Gossip 协议

Redis Cluster 中节点通信依赖 Gossip 协议,类似于 流言传播

消息类型:

👉 Gossip 的特点是 去中心化、最终一致性

6. 故障转移源码剖析

当 Master 宕机时,Cluster 的转移逻辑如下:

  1. 检测故障
// cluster.c
if (node->flags & (CLUSTER_NODE_FAIL | CLUSTER_NODE_PFAIL)) {
    // 标记为下线
}
  1. Slave 竞选新 Master
  1. 重新分配槽位
// cluster.c
clusterFailoverReplaceYourMaster();

执行槽位迁移,客户端可继续访问。

  1. 客户端感知

7. 总结

本文深入分析了 Redis 高可用与集群原理:

  1. Sentinel:实现了自动故障转移,基于 SDOWN/ODOWN 和选举机制。
  2. Cluster:通过哈希槽实现数据分片和自动转移。
  3. Gossip 协议:支撑集群中节点间的通信和状态同步。
  4. 源码剖析:揭示了 Redis 在 sentinel.ccluster.c 中的故障转移实现。

📌 下一步可以写 Redis 持久化(RDB/AOF)与复制原理,这样整个高可用 + 数据可靠性体系就完整了。

到此这篇关于Redis 高可用与集群原理深度解析的文章就介绍到这了,更多相关Redis 高可用集群内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文