0

//,更具體地說,讓我們假設我在網絡電纜上跳脫,並從該羣集的ReDiS從服務器中分割ReDiS羣集的主服務器。如果主人數量增加一倍,我可以讓我的客戶只在分組之前寫信給「第一」主人嗎?//,如果我切割網絡電纜並從該羣集的ReDiS從服務器拆分ReDiS羣集的主服務器,如果主服務器的數量增加一倍,該怎麼辦?

例如,如果我有一個具有以下屬性的羣集,並且我在子網192.168之間的網絡電纜上跳閘。 。*和192.168。 。*我是否有6位大師?

ReDiS 1 on 192.168。 53.1:7000(主)
在192.168上的ReDiS 2。 53.1:7001(master)
ReDiS 3 on 192.168。 53.1:7002(master)
ReDiS 4 on 192.168。 105.2:7000(奴隸
對192.168的ReDiS 5。 105.2:7001(奴隸
在192.168上的ReDiS 6。 105.2:7002(

我猜測,Redis的4,5 Redis的,和Redis的6很快就會使自己的主人,我會結束與以下:

的Redis 1在192.168上。 53.1:7000(主)
在192.168上的ReDiS 2。 53.1:7001(master)
ReDiS 3 on 192.168。 53.1:7002(master)
======= // Snapped Cable // ========
ReDiS 4 on 192.168。 105.2:7000(master
在192.168上的ReDiS 5。 105.2:7001(master
ReDiS 6 on 192.168。 105.2:7002(

此外,當我更換抓拍電纜,我想最終再下面,是吧?

ReDiS 1 on 192.168。 53.1:7000(主)
在192.168上的ReDiS 2。 53.1:7001(master)
ReDiS 3 on 192.168。 53.1:7002(master)
ReDiS 4 on 192.168。 105.2:7000(奴隸
對192.168的ReDiS 5。 105.2:7001(奴隸
在192.168上的ReDiS 6。 105。2:7002(

它是明智的,如果我寫我的客戶知道什麼樣的主人「應該」,並讓他們只寫了大師192.168。 。*?

緩解這種情況下的問題的一個示例,我可否讓以下變量僅在firstThreeMasters成員所代表的ReDiS之一成爲奴隸時纔會更新?

firstThreeMasters = [ "192.168.53.1:7000", "192.168.53.1:7001", "192.168.53.1:7002" ] 

(雖然我的客戶端代碼的行爲是這個問題的主題,你認爲這屬於serverfault.com?請在評論意見或建議,如果這樣來移動它。)

回答

1

「我估計ReDiS 4,ReDiS 5和ReDiS 6會很快使自己成爲主人「

實際上,當至少有一半的主站斷開連接時,從站不會進行故障切換。事實上,只有當主人要求自動故障轉移時,纔會參與選舉過程。

並且不要試圖假定客戶端中的哪些節點是任意主節點,因爲客戶端不應該參與集羣事務。如果你肯定希望一組節點不斷成爲主節點,那麼最好寫一個監視它們的守護進程,併發送一個cluster failover命令給成爲從節點的節點。

+0

//,一半的主人不會斷開連接,它會斷開連接的主人。這是否應該閱讀,「......當一半的ReDiS斷開連接。」? –

+0

@NathanBasanese一個奴隸故障轉移,併成爲一個主人,因爲其他主人已經選舉它。如果**至少有一半的主人斷開了聯繫(我應該加上「至少」),選舉不會有結果,因此沒有奴隸會自動成爲主人。 – neuront

+0

//,嗯。我今天在測試系統上測試它。 –