Redis Cluster Gossip Protocol: Message

2023-10-04 07:46

本文主要是介绍Redis Cluster Gossip Protocol: Message,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

返回目录

消息结构

  1. 消息头部
  2. 消息数据(可选)
  3. extension(可选)

消息头部

字段定义
  • Signature: “RCmb” 这4个字符(Redis Cluster message bus 的简称)
  • totalLen: 消息的总字节数
  • version:当前为1
  • port: TCP 端口
  • type: 消息类型
    • 0:PING
    • 1:PONG
    • 2:MEET
    • 3:FAIL
    • 4:PUB/SUB 传递
    • 5:FAILOVER_AUTH_REQUEST
    • 6:FAILOVER_AUTH_ACK
    • 7:UPDATE
    • 8:MFSTART
    • 9:MODULE
    • 10:PUB/SUB Publish Shard 传递
  • count:gossip条目数量(对PING/PONG等有效)
  • currentEpoch
  • configEpoch
  • offset:如果是master,表示复制偏移;如果是slave,表示已处理的复制偏移
  • sender:发送放的节点ID
  • myslots:发送方的slots信息
  • slaveof:发送方的master
  • myip:发送方的IP,如果为全0,则需要从socket获取
  • extensions:消息附带的extension个数
  • pport:如果port是TLS端口,则此为TCP的plaintext端口
  • cport:发送方的cluster总线端口
  • flags:发送方的标记
    • 1: NODE_MASTER(节点是mater)
    • 2: NODE_SLAVE (节点是slave)
    • 4: PFAIL(待确认的failure,一般是timeout)
    • 8: FAIL(已确认的failure)
    • 16: MYSELF (标识这实体是本节点)
    • 32: HANDSHAKE (处于handshake阶段)
    • 64: NOADDR(地址未知)
    • 128: MEET(收到了MEET指令)
    • 256: MIGRATE_TO(master可以参与副本迁移)
    • 512: NOFAILOVER(slave不会尝试failover)
  • state:在发送方看来,cluster当前的状态
    • 0:OK
    • 1:FAIL (cluster不能工作,通常是某个partition已无法访问)
  • mflags:消息标记。用于指定消息的内容或者提供关于节点状态的信息
    • 1:PAUSED(master停止了manual failover)
    • 2:FORCEACK(即使master还运作,也返回ACK给AUTH_REQUEST)
    • 4:EXT_DATA(消息包含extension数据)
  • 数据:根据消息类型而定
    • 对于PING, PONG, MEET,是0到多个的gossip
    • 对于FAIL,是处于FAIL状态的node的ID
    • 对于UPDATE,是需要update的node的ID,configEpoch和slots
  • extension:(当前只有一种extension)
    • 对于PING,是pingExtension,存放node的cluster-announce-hostname
字段填充
  1. Signature:RCmb
  2. type:PING/PONG/MEET
  3. sender: 填入myself的ID
  4. myip:如果配置了 cluster-announce-ip 则使用,否则设为全0,指示对方需要从socket获取此节点的IP
  5. myslots:如果myself是master,则使用myself的slots,否则使用所属master的slots
  6. slaveof:如果myself是master,则设为全0,否则填入所属master的ID
  7. 计算basePort: 用于推导port/pport/cport,不填入消息头。
if tls-cluster == yes:basePort = tls-port
else:basePort = 配置文件中的port
  1. port:
if tls-cluster == yes && cluster-announce-tls-port:port = cluster-announce-tls-port
else if cluster-announce-port:port = cluster-announce-port
else:port = basePort			
  1. pport:
if tls-cluster == yes && cluster-announce-tls-port:pport = cluster-announce-port
else:pport = tls-cluster ? 配置文件中的port : 0

10.cport:

if cluster-announce-bus-port:cport = cluster-announce-bus-port
else if cluster-port:cport = cluster-port
else:cport = basePort + 10000
  1. flags: 自身的标记
  2. state:myself看来cluster的状态,OK与否
  3. currentEpoch:自身的currentEpoch
  4. configEpoch:如果myself是master,则使用myself的configEpoch,否则使用所属master的configEpoch
  5. offset:如果myself是master,则使用当前的复制偏移;如果myself是slave,则使用已处理的复制偏移
  6. mflags:
    如果myself是master,而且正处于manual failover,则设置PAUSED;
    如果这是一个manual failover的请求,则设置FORCEACK
  7. totalLen:估算总长度。对于PING,PONG,MEET和其他可变长的消息,总长度会在其他地方得到修正。

这篇关于Redis Cluster Gossip Protocol: Message的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1606

相关文章

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过

Redis实现分布式锁全过程

《Redis实现分布式锁全过程》文章介绍Redis实现分布式锁的方法,包括使用SETNX和EXPIRE命令确保互斥性与防死锁,Redisson客户端提供的便捷接口,以及Redlock算法通过多节点共识... 目录Redis实现分布式锁1. 分布式锁的基本原理2. 使用 Redis 实现分布式锁2.1 获取锁

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

Java整合Protocol Buffers实现高效数据序列化实践

《Java整合ProtocolBuffers实现高效数据序列化实践》ProtocolBuffers是Google开发的一种语言中立、平台中立、可扩展的结构化数据序列化机制,类似于XML但更小、更快... 目录一、Protocol Buffers简介1.1 什么是Protocol Buffers1.2 Pro

redis数据结构之String详解

《redis数据结构之String详解》Redis以String为基础类型,因C字符串效率低、非二进制安全等问题,采用SDS动态字符串实现高效存储,通过RedisObject封装,支持多种编码方式(如... 目录一、为什么Redis选String作为基础类型?二、SDS底层数据结构三、RedisObject