如果找到副本集要求有點混亂,我可能會丟失一些明顯的東西(比如在哪種情況下有選舉)。爲什麼一個mongodb副本集需要奇數個投票成員?
我明白,在正常的操作中,您需要法定人數,並進行投票,並獲得您需要的多數和奇數個機器。
但是,由於我們使用副本集進行故障轉移,如果主服務器死亡,則我們剩下偶數個投票成員,根據我有限的經驗延長選擇主服務器的時間。
另外根據文檔,增加一個投票成員不會開始選舉,似乎啓動(啓動)您的副本集與偶數個節點會更有意義?
因此,如果我們開始在副本集中使用4臺機器進行說明,並且一臺機器死機,那麼將有3臺機器重新選舉,即快速仲裁。我們增加一臺機器回到我們的正常操作狀態,不重選,我們回到正常的操作狀態。
有人可以闡明這一點嗎?
我不確定我是否理解你的例子有3臺和4臺機器。如果我們從4臺機器開始,如果兩個死亡(所以我們剩下2個),你說它是壞的。如果我們從3臺機器開始死亡(所以我們還剩下2臺),你說這很好。投票是否考慮了每個節點,即使那些不能參與投票的人也是如此? – machunter
使用3臺機器時,如果一臺機器停機,系統仍然保持運行狀態,但不是2.有4臺機器,這是相同的,因爲2/4不是多數,所以它不能選擇一臺主機,所以沒有優勢額外的機器,但有額外的成本。然而,更有趣的問題是網絡分區,但同樣適用:如果網絡將計算機分成兩臺雙機設備,則會更糟糕,因爲即使所有機器運行,都無法接受寫入。 – mnemosyn
啊,你編輯了你的評論。是的,2/3是多數,2/4不是多數。更重要的是:想象一下網絡分區:所有節點都可以「參與投票」,但另一半不能看到。由於您無法區分節點故障與分區,因此您必須始終選擇所有投票成員的大多數,而不僅僅是那些可用的(貓咬尾) – mnemosyn