?
This document uses PHP Chinese website manual Release
CLUSTER MEET ip port
自3.0.0起可用。
時間復雜度: O(1)
CLUSTER MEET 用于將啟用了群集支持的不同 Redis 節(jié)點連接到工作群集。
其基本思想是,默認情況下節(jié)點不相互信任,并且被認為是未知的,因此,由于系統(tǒng)管理錯誤或網(wǎng)絡地址修改,不同的集群節(jié)點不太可能混合成一個集群節(jié)點。
因此,為了給定節(jié)點接受另一個節(jié)點進入組成 Redis 集群的節(jié)點列表,只有兩種方法:
1. 系統(tǒng)管理員發(fā)送 CLUSTER MEET 命令強制節(jié)點與另一個節(jié)點相遇。
2. 一個已知的節(jié)點在八卦部分發(fā)送一個我們不知道的節(jié)點列表。如果接收節(jié)點將發(fā)送節(jié)點信任為已知節(jié)點,則它將處理八卦部分,并向尚未知的節(jié)點發(fā)送握手。
請注意,Redis 群集需要形成完整的網(wǎng)格(每個節(jié)點與其他節(jié)點相連),但為了創(chuàng)建群集,不需要發(fā)送形成完整網(wǎng)格所需的所有 CLUSTER MEET 命令。重要的是發(fā)送足夠的 CLUSTER MEET 消息,以便每個節(jié)點都可以通過一系列已知節(jié)點到達每個其他節(jié)點。由于在心跳包中交換八卦信息,缺失的鏈接將被創(chuàng)建。
因此,如果我們通過 CLUSTER MEET 將節(jié)點 A 與節(jié)點 B 連接起來,并將 B 與 C 連接起來,則 A 和 C 將找到握手方式并創(chuàng)建鏈接。
另一個例子:如果我們想象一個由以下四個節(jié)點組成的集群,稱為 A,B,C 和 D,我們可以發(fā)送以下一組命令給 A:
1. CLUSTER MEET B-ip B-port
2. CLUSTER MEET C-ip C-port
3. CLUSTER MEET D-ip D-port
作為A
知道并被所有其他節(jié)點知曉的副作用,它將在心跳包中發(fā)送八卦部分,這將允許每個其他節(jié)點與另一個節(jié)點創(chuàng)建鏈接,在幾秒鐘內(nèi)形成完整的網(wǎng)格,甚至如果集群很大。
此外,CLUSTER MEET 不需要互惠。如果我將命令發(fā)送給 A 以加入 B,我不需要也將它發(fā)送給 B 以加入 A.
當給定節(jié)點收到 CLUSTER MEET 消息時,命令中指定的節(jié)點仍然不知道我們發(fā)送命令的節(jié)點。因此,為了使節(jié)點強制接收方接受它作為可信節(jié)點,它會發(fā)送一個MEET
數(shù)據(jù)包而不是 PING 數(shù)據(jù)包。這兩個數(shù)據(jù)包的格式完全相同,但前者強制接收方將節(jié)點確認為可信。
簡單的字符串回復:OK
如果命令成功。如果指定的地址或端口無效,則返回錯誤。