redis集群节点间的内部通信机制

一、节点间的内部通信机制

1、基础通信原理

(1)redis cluster节点间采取gossip协议进行通信

跟集中式不同,不是将集群元数据(节点信息,故障,等等)集中存储在莫个节点上,而是互相之间不断通信,保持整个集群所有节点的数据是完整的

集中式:好处在于,元数据的更新和读取,时效性非常号,一旦元数据出现了变更,立即就更新到集中式的存储中,其他节点读取的时候立即就可以感知道;不好在于,所有的元数据跟新压力全部集中在一个地方,可能会导致元数据的存储压力

gossip:好处在于,元数据的更新比较分散,不是集中在一个地方,更新会陆陆续续,打到所有节点上去更新,有一定的延时,降低了压力;缺点:元数据更新有延时,可能导致集群的一些操作会有一些滞后

(2)10000端口

每个节点都有一个专门用于节点通信的端口,就是自己提供服务的端口号+10000,比如7001,那么用于通信的端口号就是17001端口。

每个节点每隔一段时间都会往其他节点发送ping消息,同时其他节点接收到ping后返回pong

(3)交换的信息

故障信息,节点的增加和移除,hash slot信息,等等。

2、gossip协议

gossip协议包含多种消息,包含ping,pong,meet,fail,等等

meet:某个节点发送meet给新加入的节点,让新节点加入集群中,然后新节点就会开始与其他节点进行通信

ping:每个节点会频繁的给其他节点发送ping,其中包含自己的状态还有自己维护的集群元数据,互相通过ping交换元数据。

pong:返回ping和meet,包含自己的状态和其他信息,也可以用于信息广播和更新。

fail:某个节点判断另一个节点fail之后,就发送给其他节点,通知其他节点,指定的节点宕机了。

3.ping消息深入

ping很频繁,而且要携带一些元数据,所以会加重网络负担

每个节点每秒钟会执行10次ping,每次会选择5个最久没有通信过的其他节点

当然如果发现某个节点通信延时达到了cluster_node_timeout / 2,那么会立即发送ping,避免数据交互延时过长

所以cluster_node_timeout可以调节,如果调节比较大,那么会降低发送的频率

每次ping,一个是带上自己节点的信息,还有就是带上1/10其他节点的信息,发送出去,进行数据交换

至少包含3个其他节点的信息,最多包含总节点-2个其他节点的信息

posted @   java架构师1  阅读(517)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
点击右上角即可分享
微信分享提示