redis的clustermeet命令

Posted 周杰伦本人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis的clustermeet命令相关的知识,希望对你有一定的参考价值。

@[TOC]

redis的clustermeet命令

今天给大家介绍一下reids的集群形成用到的命令clustermeet命令。

Redis 集群的形成是通过CLUSTERMEET 命令完成的。

CLUSTER MEET ip port 允许节点与ip和port指定的节点握手。如果握手成功,则两个节点组成一个集群。

要了解CLUSTER MEET命令的原理,需要知道集群模式下使用的数据结构,cluster.h中的clusterNode clusterLink clusterState。

clusterState

clusterState记录了当前节点所考虑的集群的当前状态,clusterState有一个属性节点字典,记录了集群节点,字典的key为节点名,value为对应的集群节点。单词。

clusterNode

clusterNode 结构存储节点的当前状态。每个节点都使用clusterNode来记录自己的信息,clusterNode的链接属性是clusterLink结构

clusterLink

clusterLink结构中存放的是连接节点的信息。

typedef struct clusterLink 
    // 连接创建的时间
    mstime_t ctime;             /* Link creation time */
    // TCP连接的文件描述符
    int fd;                     /* TCP socket file descriptor */
    // 输出(发送)缓冲区
    sds sndbuf;                 /* Packet send buffer */
    // 输入(接收)缓冲区
    sds rcvbuf;                 /* Packet reception buffer */
    // 关联该连接的节点
    struct clusterNode *node;   /* Node related to this link if any, or NULL */
 clusterLink;

CLUSTER MEET的流程

知道了这一点,当客户端发送IP CLUSTER MEET 端口命令时,接收命令的节点与指定节点进行通信。具体来说

当前节点为指定节点创建一个clusterNode,并将创建的clusterNode添加到节点字典中。

当前节点根据自己的IP和端口向指定节点发送MEET消息。

指定节点收到命令后,创建集群节点,加入节点字典,返回PONG消息。

当前节点收到PONG消息后,就知道指定节点收到了消息,发送PING消息。

指定节点收到PING消息后,指定节点知道当前节点也收到了PONG消息,说明双方已经完成握手。

当前节点完成与指定节点的握手后,集群中的其他节点可以通过gossip协议与指定节点建立握手。

这就是CLUSTERMEET命令的大体内容了,redis的集群大概就是使用这个命令来完成的。

总结

今天从它涉及的数据结构出发讲解了一下CLUSTER MEET的命令实现,希望对你有帮助

以上是关于redis的clustermeet命令的主要内容,如果未能解决你的问题,请参考以下文章

重新刷新你对Redis集群的理解

Redis分布式方案:集群

Redis设计与实现-13.集群

Redis设计与实现-13.集群

关于redis集群(几条概念)

Redis 3.2.1集群 —— CLUSTER MEET ip port