页面加载中
博客快捷键
按住 Shift 键查看可用快捷键
ShiftK
开启/关闭快捷键功能
ShiftA
打开/关闭中控台
ShiftD
深色/浅色显示模式
ShiftS
站内搜索
ShiftR
随机访问
ShiftH
返回首页
ShiftL
友链页面
ShiftP
关于本站
ShiftI
原版/本站右键菜单
松开 Shift 键或点击外部区域关闭
互动
最近评论
暂无评论
标签
寻找感兴趣的领域
暂无标签
    0
    文章
    0
    标签
    8
    分类
    10
    评论
    128
    功能
    深色模式
    标签
    JavaScript12TypeScript8React15Next.js6Vue10Node.js7CSS5前端20
    互动
    最近评论
    暂无评论
    标签
    寻找感兴趣的领域
    暂无标签
      0
      文章
      0
      标签
      8
      分类
      10
      评论
      128
      功能
      深色模式
      标签
      JavaScript12TypeScript8React15Next.js6Vue10Node.js7CSS5前端20
      未知歌曲
      未播放
      ♪ 暂无歌词 ♪
      随便逛逛
      博客分类
      文章标签
      复制地址
      深色模式
      AnHeYuAnHeYu
      Search⌘K
      博客
        暂无其他文档

        Redis 集群节点间通信机制:Gossip 协议与故障检测

        Redis集群节点间采用Gossip协议和TCP Socket通信,通过PING/PONG实现心跳检测,MEET消息引入新节点,FAIL消息广播故障,并支持主从全量/增量同步及哈希槽重分片,具备高扩展性与容错性。

        January 14, 20256 分钟 阅读4 次阅读

        image

        Redis 集群中节点之间的通信方式

        Redis 集群中节点之间的通信方式

          Redis 集群是一种分布式的键值存储解决方案,它通过多个节点协作来提供高可用性和高性能的服务。在 Redis 集群中,节点之间需要进行通信以实现数据分片、复制和故障检测等功能。下面我们详细解析 Redis 集群中节点之间的通信方式。


        1. 通信协议:Gossip 协议

          Redis 集群中节点之间使用了一种轻量级的通信协议 Gossip 协议。这种协议的特点是:

        • 每个节点都定期向其他随机选择的节点发送自己的状态信息。
        • 节点之间通过多次传播,最终所有节点都能获知整个集群的状态。

            这种机制的好处是:

        • 可扩展性强:即使集群规模增长,通信开销也不会显著增加。

        • 容错性高:即使部分节点通信失败,也不会影响整个集群的运行。

        2. 通信方式:TCP Socket

          Redis 集群中的节点之间通过 TCP Socket 进行通信。每个节点都监听一个特定的端口(默认是主服务端口 + 10000,比如服务端口是 6379,则通信端口是 16379),用于集群内部通信。


        3. 消息类型

          Redis 集群中的节点之间通过 二进制消息 进行通信。主要的消息类型包括以下几种:

        1. PING 和 PONG 消息

          • PING 消息:用于检测节点是否存活。一个节点会定期向其他节点发送 PING 消息。
          • PONG 消息:用于响应 PING 消息,表示节点正常。

          作用:

          • 实现节点的心跳检测。
          • 传递集群状态信息。
        2. MEET 消息

          • 当一个新节点加入集群时,现有节点会发送 MEET 消息,通知其他节点接纳新节点。

          作用:

          • 新节点的引入和发现。
        3. FAIL 消息

          • 当某个节点被判断为不可用时,集群中的其他节点会广播 FAIL 消息,通知整个集群。

          作用:

          • 实现故障节点的快速剔除。
        4. PUBLISH 消息

          • 用于集群中广播某些事件,比如槽(slot)重新分配或主从切换等。

        4. 数据同步

          Redis 集群中支持主从复制机制。主节点和从节点之间的通信主要通过以下方式:

        1. 全量同步

          • 当从节点首次连接到主节点时,会请求全量同步。主节点会将所有键值数据发送给从节点。
        2. 增量同步

          • 当从节点已经完成全量同步后,主节点会通过增量方式将变更的数据发送给从节点。

        5. 故障检测

          Redis 集群的故障检测是通过 Gossip 协议 和 一致性算法 共同实现的:

        1. 主观下线(PFAIL)

          • 当节点 A 未能收到节点 B 的 PONG 响应时,A 会将 B 标记为主观下线(PFAIL)。
        2. 客观下线(FAIL)

          • 如果超过半数的主节点都认为 B 已经主观下线,则 B 会被标记为客观下线(FAIL)。

          节点会通过广播 FAIL 消息 将这个状态通知给整个集群。


        6. 槽分配和重分片

          Redis 集群使用 哈希槽(Hash Slot) 机制管理数据分布,集群中的 16384 个槽被分配到不同的主节点上。

        • 槽分配的通信:

          • 当节点状态发生变化(如新增节点或节点故障)时,集群会通过通信协调槽的重新分配。
          • 槽迁移期间,节点之间会交换数据,确保迁移过程中的数据一致性。

        7. 总结

          Redis 集群中节点之间的通信方式基于 Gossip 协议 和 TCP Socket,通过多种消息类型实现以下功能:

        • 心跳检测:通过 PING/PONG 消息。
        • 节点发现:通过 MEET 消息。
        • 故障检测:通过 PFAIL 和 FAIL 消息。
        • 数据同步:主从之间全量同步和增量同步。
        • 槽分配:通过节点间协作完成。

            Redis 集群的这种通信方式既保证了高效性,又具备很好的容错能力,非常适合分布式场景。

        最后更新于 January 14, 2025
        On this page
        暂无目录