1、消息类型划分
节点间发送的消息主要分为 5 种:meet 消息、ping 消息、pong 消息、fail 消息、publish 消息。不同的消息类型,通信协议、发送的频率和时机、接收节点的选择等是不同的:
2、特点介绍
- MEET 消息: 在节点握手阶段,当节点收到客户端的
CLUSTER MEET命令时,会向新加入的节点发送MEET消息,请求新节点加入到当前集群;新节点收到 MEET 消息后会回复一个PONG消息。 - PING 消息: 集群里每个节点每秒钟会选择部分节点发送
PING消息,接收者收到消息后会回复一个PONG消息。PING 消息的内容是自身节点和部分其他节点的状态信息,作用是彼此交换信息,以及检测节点是否在线。PING消息使用 Gossip 协议发送,接收节点的选择兼顾了收敛速度和带宽成本,具体规则如下:(1)随机找 5 个节点,在其中选择最久没有通信的 1 个节点;(2)扫描节点列表,选择最近一次收到PONG消息时间大于cluster_node_timeout / 2的所有节点,防止这些节点长时间未更新。 - PONG消息:
PONG消息封装了自身状态数据。可以分为两种:第一种 是在接到MEET/PING消息后回复的PONG消息;第二种 是指节点向集群广播PONG消息,这样其他节点可以获知该节点的最新信息,例如故障恢复后新的主节点会广播PONG消息。 - FAIL 消息: 当一个主节点判断另一个主节点进入
FAIL状态时,会向集群广播这一FAIL消息;接收节点会将这一FAIL消息保存起来,便于后续的判断。 - PUBLISH 消息: 节点收到
PUBLISH命令后,会先执行该命令,然后向集群广播这一消息,接收节点也会执行该PUBLISH命令
3、Redis节点之间如何通信
- 集群中的节点采用固定频率(默认每秒十次)的定时任务进行通信工作,这样使得集群的状态/某个节点发生变化的时候,能够很快的通知给集群中的所有节点。
- 相比较广播通信的每个节点都向集群中所有节点发送消息的方式,集群使用Gossip协议,每个节点算法随机的和部分节点通信,最终会通知给所有的节点,速度较慢,但是节省带宽、容错率高。
2017



被折叠的 条评论
为什么被折叠?



