设计网站推荐视频,网站首页按钮图片,wordpress静态插件,网站建设 银川一、创建集群与添加节点#xff08;meet#xff09;
通过redis源码之#xff1a;redis-cli 集群命令发现#xff0c;不管是新建cluster集群还是往集群里添加新节点#xff0c;都是通过meet指令完成#xff0c;假设有ABCD四个节点#xff0c;新建集群#xff1a;redis-…一、创建集群与添加节点meet
通过redis源码之redis-cli 集群命令发现不管是新建cluster集群还是往集群里添加新节点都是通过meet指令完成假设有ABCD四个节点新建集群redis-cli --cluster create A B C --cluster-replicas 0则是以A开始BC各自向A发送meet请求当新节点D加入时redis-cli --cluster add-node D AD向A发送meet请求最终通过gossip协议达成各节点信息最终一致。 当redis-cli执行create或者add-node命令后最终都是通过cluster meet发往服务端节点接收到该命令的节点进入clusterCommand():
这里我们是借着redis-cli执行create或者add-node的线索对于clusternode的初始化还不甚了解接下来看看cluster节点的初始化。
二、cluster节点初始化clusterInit
在节点启动时进入main()-initServer()创建了一个serverCron定时任务然后再进入clusterInit()完成本地cluster初始化
这里设置clusterAcceptHandler等待别的节点来连接本节点时触发当触发accept时间后通过clusterAcceptHandler-》clusterConnAcceptHandler-》connSetReadHandler设置readhandler为clusterReadHandler 这里主要是对主动请求过来的客户端的处理这里设置的clusterReadHandler主要是处理对方发送过来的请求后面clusterCron中会主动去连接别的node然后也是设置clusterReadHandler处理不过是处理对方的响应。
三、clusterCron定时任务
在定时任务serverCron执行中在开启cluster_enabled时每次定时任务执行都会进入clusterCron() 一秒执行10次 3.1、新节点连接或重启本方实例后重连 在此处主要还是对通过cluster meet命令加到本方的cluster-nodes的节点发送meet请求到对方让对方也认识自己把自己加到对方的cluster-nodes。并通过clusterReadHandler处理对方的响应。
这里存在一个疑问在重新本地节点后重新创建link ,如果失去连接前发送过一次ping要保存上一次发送ping的时间 if (old_ping_sent) {/* If there was an active ping before the link was* disconnected, we want to restore the ping time, otherwise* replaced by the clusterSendPing() call. */node-ping_sent old_ping_sent;}3.2、每隔一秒随机ping五个实例 每十次遍历100毫秒一次遍历十次遍历就是一秒随机ping五个实例 3.3、集群故障处理 在clusterCron后续的处理中主要涉及集群故障处理打算后续再开一篇博文分析。