2016-05-16 9 views
1

所以在我們的配置中,我們有6個Mongod服務器。其中3個我們已經運行了一段時間(版本3.0.6),並且我們最近從我們的新數據中心(v3.2.6)添加了3個新的數據中心,因爲我們認爲這將是一種很好的方式,新的。這些較新的盒子已經輪換了幾個星期,並且會是最新的。沒有一個框的從屬延遲大於0.爲什麼我的Mongo複製套件不能執行故障轉移?

其中一個原始服務器的優先級爲2,而其他5個優先級爲1.否則,每個服務器的配置都是相同的。我們沒有用於投票的額外服務器等。

我們的應用程序使用全部6個地址,因此它們將自行進行故障轉移。

因此,今天,我們想到了一切,我們停止了3臺原始服務器上的mongod進程。

而新箱子都不會成爲主要的。他們都保持中學。所以我們回到原來的小學,並立即再次接受小學。所以,考慮這個問題可能是優先考慮的事情,我們將舊的初級初始化爲1,並將其中一個新的盒子設置爲2.保存配置,並且新盒子成爲主要盒子。

想到我們舔了它,我們再次關閉了舊的小學。

而新盒子立即退回到二級,不留小學。

因此,我們開始備份舊的小學,新的盒子立即再次成爲小學。

所以,我們現在將舊盒子的優先級設置爲0,並讓它保持運行。

但我們不能保持這種方式運行。爲什麼沒有一臺新機器自動升級爲初級機器?爲什麼如果我們刪除舊的盒子,它會下降?

回答

1

易於回答:6 - 3 = 3,小於4,您需要建立法定人數。只有3臺服務器啓動後,剩餘的運行成員無法構建仲裁(按照副本集配置定義的統計服務器數量)。他們恢復到二級狀態,因爲一個小學不能可靠地確定 - 它可能只是一個網絡分區正在進行。允許選舉以低於法定人數的方式取得成功將會使可怕的裂腦情況成爲可能。

這與優先順序無關,順便說一句。除非你知道你在做什麼正確你不應該擺弄它。

解決您的問題應該很容易,但:

重要:確保所有的「新」成員無論是在二級或初級狀態出發

  1. 連接到前首要的。
  2. 使用rs.remove()從副本集配置中刪除停止的老成員
  3. 如果必要的話(這是不是很清楚,我從你的描述),使用rs.stepDown(),使主你的新服務器中的一個,並連接到它
  4. 使用rs.remove()再次從副本中刪除最後一個「老」成員設置

隨着留在你an odd number of voting members r副本集合,他們能夠建立法定人數並且elect a new primary

+0

謝謝!我剛剛加入了這個團隊,還沒有參加Mongo的管理課程(到目前爲止只是開發者的課程)。你的回答很有道理。從集合中刪除舊機器會降低總數,需要更少的機器來達到法定人數。謝謝! –