2013-05-02 89 views
7

我使用mongodb與副本集,其中有3個節點,讓他們的IP是192.168.1.100,192.168.1.101,192.168.1.102。如何將輔助節點轉換爲主節點,如果最大節點在副本集中關閉?

在我當前的設置192.168.1.100是主要的和其他人是次要的。我已經設置優先級爲192.168.1.100和192.168.1.101是1和192.168.1.102是0,現在一段時間後我的192.168.1.100和192.168 .1.101這兩個節點都關閉了。

我想迫使192.168.1.102成爲主要,這樣我的應用程序將生活。 他們是以任何方式強制轉換192.168.1.102節點成爲主節點。

回答

4

解決方案從這種情況來克服困難是,如果只有一個節點保持在副本集和節點二次(有優先級0),那麼第一個關閉的節點提取物節點從副本集(通過評論repliSet行從mongod.conf或啓動mongo去mongo命令行使用本地修改記錄從system.replset和刪除記錄),然後啓動節點作爲一個獨立的mongodb :)

7

當大多數成員無法訪問時,您可以按照步驟here重新配置副本集。

由於副本集中只剩下一個節點,因此不會複製您的數據。一旦他們活着,你最好把這兩個節點加回去。

1

在這種情況下不需要手動干預。你也會遇到另一個問題。該集合的大部分將離線,這意味着即使沒有0的優先級,您的剩餘副本成員也不會成爲主要成員。

相反,你必須做的是或者獲得大部分備份,或者你必須運行一個rs.reconfig()刪除你的設置的兩個死者。

要查看您的實例等在這裏:http://docs.mongodb.org/manual/tutorial/reconfigure-replica-set-with-unavailable-members/

+0

大家好, 感謝您的回覆,我沒有在給定的URL.Below提到的所有步驟是當我運行查詢錯誤: cfg.members = [cfg.member [0] 週四16年5月2日:52:46.168的JavaScript執行失敗:類型錯誤:無法讀取屬性 '0' 未定義 rs.reconfig(CFG {力:真正})的 { 「ERRMSG」:「異常:啓動和重新配置的副本集必須發送到可成爲主節點的節點「, 」code「:13420, 」ok「:0 } – Rajnish 2013-05-02 11:26:42

+0

@ user2334519什麼是ddi配置ob ject看起來像當你發送它?我想可能是'cfg.members = [cfg.member [0]]'應該是'cfg.members = [cfg.members [0]]' – Sammaye 2013-05-02 12:52:12

+0

看到下面的錯誤,mongoreplset1:SECONDARY> cfg = rs.conf () mongoreplset1:SECONDARY> printjson(cfg) mongoreplset1:SECONDARY> cfg.members = [cfg.members [0]] [{「_id」:0,「host」:「192.168.1.197:27017」,「優先級「:0}] mongoreplset1:SECONDARY> rs.reconfig(cfg,{force:true}) 」errmsg「:」例外:必須將副本集的啓動和重新配置發送到可以成爲主要「, 」code「:13420, 」ok「:0 } – Rajnish 2013-05-03 06:26:00

12

您可以實現它沒有通過以下步驟重新啓動mongod服務 -

c ONNECT以積極成員想這是在本地主機上運行的27017端口:

mongo --port 27017 

從這裏 -

> use admin 
> rs.status() 

讓你的會員ID假設你的積極成員ID爲1,然後重新配置複製按以下步驟-

> cfg = rs.conf() 
> cfg.members = [cfg.members[1]] 
> rs.reconfig(cfg, {force : true}) 

它會使您的remiaining活動成員主要和可用於應用程序和寫入。

連接到倖存下來的成員,並保存當前配置:

+0

要點,謝謝:) – Sohail 2016-04-18 13:06:40

+0

是否有任何方法來自動執行此操作?如果這種情況發生在午夜,那麼在午夜需要有人來運行這個命令 – Nayan 2017-02-12 05:46:29

0

我通過如下以下sloved我的問題。考慮下面的例子用於保存配置命令:

cfg = rs.conf() 
printjson(cfg) 

在同一構件,通過使陣列等於單獨存活的成員刪除成員陣列設置的副本的向下和無法訪問的成員。

我們只有單件仍然

cfg.members = [cfg.members[0]] 

成員[0]是一組用force選項設置爲true,一個是在弗里斯特在數組中rs.conf得到什麼() 重新配置:

rs.reconfig(cfg, {force : true}) 

現在你可以看到,倖存的成員現在是主要的。 來源:https://docs.mongodb.com/v3.4/tutorial/reconfigure-replica-set-with-unavailable-members/

相關問題