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分片集群的实现

《Redis分片集群的实现》Redis分片集群是一种将Redis数据库分散到多个节点上的方式,以提供更高的性能和可伸缩性,本文主要介绍了Redis分片集群的实现,具有一定的参考价值,感兴趣的可以了解一... 目录1. Redis Cluster的核心概念哈希槽(Hash Slots)主从复制与故障转移2.

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

redis+lua实现分布式限流的示例

《redis+lua实现分布式限流的示例》本文主要介绍了redis+lua实现分布式限流的示例,可以实现复杂的限流逻辑,如滑动窗口限流,并且避免了多步操作导致的并发问题,具有一定的参考价值,感兴趣的可... 目录为什么使用Redis+Lua实现分布式限流使用ZSET也可以实现限流,为什么选择lua的方式实现

Redis中管道操作pipeline的实现

《Redis中管道操作pipeline的实现》RedisPipeline是一种优化客户端与服务器通信的技术,通过批量发送和接收命令减少网络往返次数,提高命令执行效率,本文就来介绍一下Redis中管道操... 目录什么是pipeline场景一:我要向Redis新增大批量的数据分批处理事务( MULTI/EXE

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

Redis中的常用的五种数据类型详解

《Redis中的常用的五种数据类型详解》:本文主要介绍Redis中的常用的五种数据类型详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis常用的五种数据类型一、字符串(String)简介常用命令应用场景二、哈希(Hash)简介常用命令应用场景三、列表(L

Redis解决缓存击穿问题的两种方法

《Redis解决缓存击穿问题的两种方法》缓存击穿问题也叫热点Key问题,就是⼀个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击,本文给大家介绍了Re... 目录引言解决办法互斥锁(强一致,性能差)逻辑过期(高可用,性能优)设计逻辑过期时间引言缓存击穿:给

Redis中如何实现商品秒杀

《Redis中如何实现商品秒杀》:本文主要介绍Redis中如何实现商品秒杀问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录技术栈功能实现步骤步骤一:准备商品库存数据步骤二:实现商品秒杀步骤三:优化Redis性能技术讲解Redis的List类型Redis的Set

Redis如何实现刷票过滤

《Redis如何实现刷票过滤》:本文主要介绍Redis如何实现刷票过滤问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录引言一、概述二、技术选型三、搭建开发环境四、使用Redis存储数据四、使用SpringBoot开发应用五、 实现同一IP每天刷票不得超过次数六

Redis客户端工具之RedisInsight的下载方式

《Redis客户端工具之RedisInsight的下载方式》RedisInsight是Redis官方提供的图形化客户端工具,下载步骤包括访问Redis官网、选择RedisInsight、下载链接、注册... 目录Redis客户端工具RedisInsight的下载一、点击进入Redis官网二、点击RedisI