Mongodb
如何將隱藏的mongo節點提升為主節點?
我們正在嘗試為我們的 mongodb 副本集實現 DR 設置,目前 DR 中的三個節點被配置為作為隱藏節點執行。我們正在嘗試測試故障轉移到 DR,這需要將隱藏節點分別提升到主節點和輔助節點。實現這一目標的最佳方法是什麼?
我們正在嘗試為我們的 mongodb 副本集實現 DR 設置,目前 DR 中的三個節點被配置為作為隱藏節點執行。
根據 MongoDB 文件配置隱藏副本集成員隱藏成員是副本集的一部分,但不能成為主要成員,並且對客戶端應用程序不可見。隱藏成員可以在選舉中投票。
隱藏節點最常見的用途是支持延遲成員。如果您只需要阻止某個成員成為主成員,請配置優先級為 0 的成員。
會員配置文件
要將次要成員配置為隱藏,請將其成員設置為$$ n $$.priority值為 0 並設置其成員$$ n $$.hidden在其成員配置中將值設置為 true:
{ "_id" : <num> "host" : <hostname:port>, "priority" : 0, "hidden" : true }
配置步驟
以下範例隱藏成員數組中目前位於索引 0 處的輔助成員。要配置隱藏成員,請在連接到主節點的mongo shell中使用以下操作序列,通過成員數組中的數組索引指定要配置的成員:
cfg = rs.conf() cfg.members[0].priority = 0 cfg.members[0].hidden = true rs.reconfig(cfg)
重新配置集合後,此次要成員的優先級為 0,因此無法成為主要成員並被隱藏。集合中的其他成員不會在isMaster或db.isMaster()輸出中通告隱藏成員。
我們正在嘗試測試故障轉移到 DR,這需要將隱藏節點分別提升到主節點和輔助節點。實現這一目標的最佳方法是什麼?
注意警告:
我能夠通過使用下面的程式碼片段來實現它:
import pymongo client = pymongo.MongoClient() cfgDict = client.local.system.replset.find_one() for mem in cfgDict['members']: if(mem.get('host') == "hidden-node-1:27017"): mem['hidden'] = False mem['priority'] = 20 #assign highest priority elif(mem.get('host') == "hidden-node-2:27017"): mem['hidden'] = False mem['priority'] = 5 else: print("NO MATCH FOUND... NOTHING TO RECONFIGURE!") try: client.admin.command({'replSetReconfig': cfgDict}, force=True) except pymongo.errors.ConnectionFailure: pass