在redis-3.0.0里,集群添加节点是通过客户端运行cluster meet命令来实现的,命令格式是cluster meet <ip> <port>,如果客户端向A节点发送这条命令,ip和port分别是B节点的ip和port,就会把ip:port的机器添加进入执行命令的节点所在的集群里。
具体的流程如下:
1.首先客户端向A节点发送cluster meet <ip> <port>命令。
2.A节点在本地为B节点创建对应的数据结构,然后向B节点发送meet命令。
3.B节点在本地为A节点创建相应的数据结构,并向A节点发送PONG消息,表示收到A节点的消息。
4.A节点收到PONG以后,向B节点返回PING消息。
5.A节点通过Gossip协议向集群中的其他节点传播,一段时间以后,集群中所有的节点都会知道B。
如图:
理解了原理了以后,我们就来看一看redis-3.0.0里对于cluster meet命令以及后续的过程的代码实现,以便于更加深入的理解redis。
redis的meet命令的定义是clusterCommand函数,我们看看clusterCommand函数对于meet的实现。
void clusterCommand(redisClient *c) {
// 不能在非集群模式下使用该命令
if (server.cluster_enabled == 0) {
addReplyError(c,"This instance has cluster support disabled");
return;
}
//匹配命令ÿ