Redis第二十二讲 Redis高可用集群节点通信机制

本文详细介绍了Redis集群中的节点通信机制,包括每个节点的两个端口——普通端口和集群端口的作用。节点间采用Gossip协议进行通信,以分散元数据更新的压力并保证容错性。主要内容包括节点的MEET、PING、PONG、FAIL和PUBLISH消息类型及其作用。此外,还探讨了数据结构`clusterNode`和`clusterState`以及`cluster meet`和`cluster addslots`命令的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两个端口

在哨兵系统中,节点分为数据节点和哨兵节点:前者存储数据,后者实现额外的控制功能。在集群中,没有数据节点与非数据节点之分:所有的节点都存储数据,也都参与集群状态的维护。为此,集群中的每个节点,都提供了两个
TCP端口

  • 普通端口:即我们在前面指定的端口(7000等)。普通端口主要用于为客户端提供服务(与单机节点类似);但在节点间数据迁移时也会使用。
  • 集群端口:端口号是普通端口+10000(10000是固定值,无法改变),如7000节点的集群端口为17000。集群端口只用于节点之间的通信,如搭建集群、增减节点、故障转移等操作时节点间的通信;不要使用客户端连接集群接口。为了保证集群可以正常工作,在配置防火墙时,要同时开启普通端口和集群端口。

节点通信机制

维护集群的元数据(集群节点信息,主从角色,节点数量,各节点共享的数据等)有两种方式:集中式和gossip ;
Redis cluster节点间采取gossip协议进行通信 。

  • 集中式(广播)
    向集群内所有节点发送消息; 优点在于元数据的更新和读取,时效性非常好,一旦元数据出现变更立即就会更新到集中式的存储中,其他节点读取的时候立即就可以立即感知到;
    不足在于所有的元数据的更新压力全部集中在一个地方,每条消息都要发送给所有节点,CPU、带宽等消耗较大;可能导致元数据的存储压力。 很多中间件都会借助zookeeper集中式存储元数据。

  • gossip
    节点间通信,按照通信协议可以分为几种类型:单对单、广播、Gossip协议等。重点是广播和Gossip的对比。

在这里插入图片描述
gossip协议的优缺点

  • gossip协议的优点在于元数据的更新比较分散(负载),不是集中在一个地方(去中心化),更新请求会陆陆续续,打到所有节点上去更新(容错性高),有一定的延时,降低了压力;
  • 缺点在于元数据更新有延时可能导致集群的一些操作会有一些滞后(收敛速度慢)。

gossip节点间发送的消息主要分为5种:meet消息、ping消息、pong消息、fail消息、publish消息。
不同的消息类型,通信协议、发送的频率和时机、接收节点的选择等是不同的。

  • MEET:在节点握手阶段,当节点收到客户端的CLUSTER MEET命令时,会向新加入的节点发送MEET消息,请求新节点加入到当前集群;新节点收到MEET消息后会回复一个PONG消息。
  • PING:集群里每个节点每秒钟会选择部分节点发送PING消息,接收者收到消息后会回复一个PONG消息。PING消息的内容是自身节点和部分其他节点的状态信息;作用是彼此交换信息,以及检测节点是否在线。PING消息使用Gossip协议发送,接收节点的选择兼顾了收敛速度和带宽成本,具体规则如下:(1)随
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员路同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值