2015-04-02 29 views
0

我已經3蒙戈服務器配置爲副本集是這樣的:如何在大多數服務器關閉的情況下訪問mongo副本集?

  • MY-PC:27017 - 主 - DOWN
  • MY-PC:26017 - 輔助 - ACTIVE
  • MY-PC: 25017 - 中學 - DOWN

如果2701725017下去,你怎麼訪問唯一的倖存者的數據,26017?我發現mongo不會自動將26017設置爲PRIMARY服務器,因此整個副本將無法訪問。

我想要一個副本配置是能夠容忍這一點,當2701725017再次運轉起來,副本集能夠同步

THX,

回答

0

這是正確的行爲。大多數副本集必須彼此聯繫起來,然後舉行選舉,以便擁有主要的副本並接受任何寫入操作。您不能配置副本集,以便當1/3成員啓動時(從某些角度來看),該集可以接受寫入。爲什麼?假設我們有一個3構件副本集,在一個不同的數據中心的每個成員,並且該孤副本集成員被允許使自己初級

DC1: rs0/serverA 
DC2: rs0/serverB 
DC3: rs0/serverC 

逆反侏儒切割所有所述數據中心之間的線的;服務器A,B和C不能再彼此通信。服務器A將這種情況視爲「我還活着,但B和C已經死了,我必須成爲主要!」服務器B和C對自己說同樣的話。三個客戶端X,Y,Z連接,一個A,一個B,一個C.他們發送涉及寫入以下操作:在數據中心之間

X: db.mission_control.drop() 
Y: db.mission_control.update({ }, { "fire_all_missiles" : true }, { "multi" : true }) 
Z: db.mission_control.update({ }, { "world_peace_mode" : "engage" }, { "multi" : true }) 

現在導線已恢復,A,B ,C可以再次相互交談。我們應該怎樣處理mission_control系列?放下它,然後試圖發射導彈,然後嘗試參與世界和平?發射導彈,然後放下它,然後嘗試參與世界和平?也許,最卑鄙的是,我們應該參與世界和平,那麼一旦所有人放鬆警惕,發射導彈,然後通過放棄收集來破壞證據。 MongoDB如何知道在這種情況下該做什麼?

因此,您不能擁有一個沒有多數的主節點(接受寫入的節點)。儘管如此,您仍然可以在沒有主服務器時從輔助服務器讀取數據。你只需要設置一個secondary read preference

+0

感謝它清楚了事情,但通過這個比喻我有2個更多的問題。 所以如果以某種方式我需要監視我的數據(只讀,我認爲),我只能訪問'rs0/serverA'。我怎樣才能做到這一點,而無需操縱副本集配置? 如果我有2個數據中心:A(有3個mongo節點)和B(有2個mongo節點)。有一天,A - B之間的連接被切斷。這是不是說這兩個數據中心都有自己的PRIMARY節點? – DennyHiu 2015-04-03 03:00:39

相關問題