Mongodb

如何將隱藏的mongo節點提升為主節點?

  • April 1, 2022

我們正在嘗試為我們的 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,因此無法成為主要成員並被隱藏。集合中的其他成員不會在isMasterdb.isMaster()輸出中通告隱藏成員。

我們正在嘗試測試故障轉移到 DR,這需要將隱藏節點分別提升到主節點和輔助節點。實現這一目標的最佳方法是什麼?

注意警告:

  • rs.reconfig () shell 方法可以強制執行 current primary to step down,這會導致選舉。當主要步驟關閉時,mongod 關閉所有客戶端連接。雖然這通常需要 10-20 秒,但請嘗試在計劃的維護期間進行這些更改。
  • 避免重新配置包含不同 MongoDB 版本成員的副本集,因為驗證規則可能因 MongoDB 版本而異。

我能夠通過使用下面的程式碼片段來實現它:

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

引用自:https://dba.stackexchange.com/questions/222485