Replication
如何設置 mongodb 節點作為複制集的主節點返回?
這裡有這個問題:
但這不是我想要的答案。
還有下面的問題,可能是相關的,但不一樣。
這個問題幾乎是重複的,但處理的是 2.6.11 版,而我的是 3.0 版和 3.2 版。另外,除非需要,否則我不想使用force : 1 。
我一直在努力將答案中描述的大多數內容付諸實踐,也許有一個例子或澄清,因此這個問題。
我的複制工作正常,3 個節點,node1 是主節點。
當我執行以下命令時
//----------------------------- //check the status of the replication //----------------------------- rs.status()
我得到這個結果:
{ "set" : "Krishna", "date" : ISODate("2016-04-26T14:59:40.263Z"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "jpb01275:37001", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 1022, "optime" : Timestamp(1461678841, 1), "optimeDate" : ISODate("2016-04-26T13:54:01Z"), "electionTime" : Timestamp(1461682464, 1), "electionDate" : ISODate("2016-04-26T14:54:24Z"), "configVersion" : 239068, "self" : true }, { "_id" : 1, "name" : "jpb01275:37002", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 1022, "optime" : Timestamp(1461678841, 1), "optimeDate" : ISODate("2016-04-26T13:54:01Z"), "lastHeartbeat" : ISODate("2016-04-26T14:59:40.206Z"), "lastHeartbeatRecv" : ISODate("2016-04-26T14:59:40.179Z"), "pingMs" : 0, "configVersion" : 239068 }, { "_id" : 2, "name" : "jpb01275:37003", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 1022, "optime" : Timestamp(1461678841, 1), "optimeDate" : ISODate("2016-04-26T13:54:01Z"), "lastHeartbeat" : ISODate("2016-04-26T14:59:40.238Z"), "lastHeartbeatRecv" : ISODate("2016-04-26T14:59:39.593Z"), "pingMs" : 0, "configVersion" : 239068 } ], "ok" : 1 }
發生的事情是我不得不停止 node1 (jpb01275:37001) 並且 node2 成為主節點。當我再次啟動 node1 時,我希望它再次成為主節點。
我所做的是
登錄到node2和node3然後依次執行以下命令:
rs.stepDown()
並且 node1 作為主節點返回。
我還在 node1 上嘗試了以下操作,但它對我不起作用。
//----------------------------- // reconfigure the replica set // because I stopped this server and now it is secondary // I want it back to primary //----------------------------- cfg = rs.conf() printjson(cfg) cfg.members = [cfg.members[0] , cfg.members[1] , cfg.members[2]] rs.reconfig(cfg, {force : true})
什麼是帶回 node1 並將其設置為主複製的正確、最安全的方法?
通常,您不會。從主要或次要方面考慮您的節點是錯誤的處理方式。由於標準數據承載節點應該具有相同的維度,因此最好將它們視為副本集成員,其中一個被選為主節點。由於驅動程序可以辨識副本集並且知道目前的主伺服器是哪個,並且您應該在連接字元串中提供多個伺服器,例如
mongodb://jpb01275:37001,jpb01275:37002/?replicaSet=Krishna
設置固定的副本集主副本沒有優勢。
如果你真的必須這樣做,你需要做一個
rs.stepDown(90,30)
在目前主節點上並重複此操作,直到您選擇的節點在 90 秒內成為主節點(第一個數值集)。有關詳細資訊,請參閱的文件**
rs.stepDown()
**。