我们正在尝试为我们的mongodb复制集实现DR设置,目前DR中的三个节点被配置为作为隐藏节点运行。我们正在尝试测试到DR的故障转移,这将需要将隐藏节点分别提升到主节点和次要节点。实现这一目标的最佳途径是什么?
发布于 2018-11-14 05:12:53
我们正在尝试为我们的mongodb复制集实现DR设置,目前DR中的三个节点被配置为作为隐藏节点运行。
根据MongoDB文档,配置隐藏副本集成员隐藏成员是复制集的一部分,但不能成为主成员,客户端应用程序是不可见的。隐藏的成员可以在选举中投票。
隐藏节点最常见的用途是支持延迟成员。如果只需要防止成员成为主成员,请配置优先级为0的成员。
若要将辅助成员配置为隐藏的,请将其members[n].priority值设置为0,并在其成员配置中将其members[n].hidden值设置为true:
{
"_id" : <num>
"host" : <hostname:port>,
"priority" : 0,
"hidden" : true
}
下面的示例隐藏当前位于成员数组中索引0的辅助成员。若要配置隐藏构件,请在连接到主节点的蒙戈外壳中使用以下操作序列,指定要通过成员数组中的数组索引配置成员:
cfg = rs.conf()
cfg.members[0].priority = 0
cfg.members[0].hidden = true
rs.reconfig(cfg)
重新配置集合后,该辅助成员的优先级为0,因此它不能成为主成员,并且是隐藏的。集合中的其他成员不会在isMaster或db.isMaster()输出中公告隐藏成员。
我们正在尝试测试到DR的故障转移,这将需要将隐藏节点分别提升到主节点和次要节点。实现这一目标的最佳途径是什么?
primary to step down
,这将导致选举。当主要步骤结束时,单神将关闭所有客户端连接。虽然这通常需要10-20秒,但尝试在计划的维护期间进行这些更改。发布于 2018-11-14 05:50:38
我能够通过使用下面的代码片段来实现它:
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
复制相似问题