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