天天看點

redis的clustermeet指令

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消息,說明雙方已經完成握手。

總結

繼續閱讀