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个其他节点的信息
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫