?
本文檔使用 php中文網(wǎng)手冊(cè) 發(fā)布
CLUSTER FAILOVER [FORCE|TAKEOVER]
自3.0.0起可用。
時(shí)間復(fù)雜度: O(1)
該命令只能發(fā)送到 Redis 集群從節(jié)點(diǎn),強(qiáng)制從節(jié)點(diǎn)啟動(dòng)其主節(jié)點(diǎn)的手動(dòng)故障轉(zhuǎn)移。
手動(dòng)故障轉(zhuǎn)移是一種特殊的故障轉(zhuǎn)移,通常在沒(méi)有實(shí)際故障時(shí)執(zhí)行,但我們希望以安全的方式將當(dāng)前主控與其中一個(gè)從屬(這是我們發(fā)送命令的節(jié)點(diǎn))交換,沒(méi)有任何數(shù)據(jù)丟失的窗口。它的工作原理如下:
1. 奴隸告訴主人停止處理來(lái)自客戶的查詢。
2. 主站使用當(dāng)前復(fù)制偏移量答復(fù)從站。
3. 從服務(wù)器等待復(fù)制偏移量與其匹配,以確保它在繼續(xù)處理之前處理來(lái)自主服務(wù)器的所有數(shù)據(jù)。
4. 從站啟動(dòng)故障轉(zhuǎn)移,從大多數(shù)主站獲得新的配置時(shí)期,并廣播新配置。
5. 舊的主服務(wù)器接收配置更新:取消阻止其客戶端并開(kāi)始使用重定向消息進(jìn)行回復(fù),以便他們繼續(xù)與新主服務(wù)器聊天。
這樣,客戶端就會(huì)以原子方式從舊主控制器移動(dòng)到新主控制器,并且只有當(dāng)變成新主控制器的從控制器才處理來(lái)自舊主控制器的所有復(fù)制流時(shí)。
命令行為可以通過(guò)兩個(gè)選項(xiàng)進(jìn)行修改:FORCE 和 TAKEOVER。
如果給出 FORCE 選項(xiàng),則從站不會(huì)與主站進(jìn)行任何握手,但可能無(wú)法到達(dá),而是從第4點(diǎn)開(kāi)始盡快啟動(dòng)故障切換。這對(duì)于我們希望在主站點(diǎn)啟動(dòng)手動(dòng)故障切換時(shí)非常有用不再可達(dá)。
但是,使用 FORCE,我們?nèi)匀恍枰蠖鄶?shù)主設(shè)備可用,以授權(quán)故障切換并為將成為主設(shè)備的從設(shè)備生成新的配置時(shí)期。
有些情況下,這是不夠的,我們希望奴隸故障轉(zhuǎn)移與群集的其他部分沒(méi)有任何協(xié)議。一個(gè)真實(shí)世界的用例就是在不同的數(shù)據(jù)中心大量推銷奴隸,以便掌握數(shù)據(jù)中心交換機(jī),而所有主數(shù)據(jù)中心都被關(guān)閉或分區(qū)。
TAKEOVER 選項(xiàng)意味著一切 FORCE 意味著,但也不會(huì)為了使用故障轉(zhuǎn)移群集的任何授權(quán)。取而代之的CLUSTER FAILOVER TAKEOVER
是奴隸收到:
1. 生成一個(gè)新的configEpoch
單方面,只是采取當(dāng)前最大的紀(jì)元可用,并增加它,如果它的本地配置時(shí)代還不是最大的。
2. 為其主節(jié)點(diǎn)的所有散列槽分配自己,并將新配置傳播到每個(gè)可以盡快到達(dá)的節(jié)點(diǎn),并最終傳播到每個(gè)其他節(jié)點(diǎn)。
請(qǐng)注意,TAKEOVER 違反了 Redis 集群的最后一次故障切換贏得原則,因?yàn)閺膶僭O(shè)備生成的配置時(shí)期違反了以下幾種方式正常生成配置時(shí)期:
1. 不能保證它實(shí)際上是更高的配置時(shí)期,因?yàn)槔缥覀兛梢栽谏贁?shù)中使用 TAKEOVER 選項(xiàng),也不會(huì)執(zhí)行任何消息交換來(lái)生成新的配置時(shí)期。
2. 如果我們生成一個(gè)碰巧與另一個(gè)實(shí)例發(fā)生沖突的配置時(shí)期,那么最終我們的配置時(shí)期或另一個(gè)具有相同時(shí)期的實(shí)例將會(huì)使用配置時(shí)期沖突解決算法移走。
因此,應(yīng)小心使用 TAKEOVER 選項(xiàng)。
CLUSTER FAILOVER,除非指定了 TAKEOVER 選項(xiàng),否則不會(huì)同步執(zhí)行故障轉(zhuǎn)移,它僅調(diào)度手動(dòng)故障轉(zhuǎn)移,繞過(guò)故障檢測(cè)階段,因此為了檢查是否真的發(fā)生了故障轉(zhuǎn)移,應(yīng)該使用 CLUSTER NODES 或其他方法驗(yàn)證在發(fā)送命令一段時(shí)間后群集的狀態(tài)是否發(fā)生更改。
簡(jiǎn)單字符串回復(fù):OK
如果該命令被接受并且將嘗試手動(dòng)故障轉(zhuǎn)移。如果操作無(wú)法執(zhí)行,例如,如果我們正在與已經(jīng)是主節(jié)點(diǎn)的節(jié)點(diǎn)交談,則會(huì)出錯(cuò)。