默认MongoDB副本集初始化的时候是使用服务器的主机名,在生产中由于某种需要可能需要修改。MongoDB副本集的信息写在local数据库的system.replset中的。要修改这个数据,需要先将MongoDB以单节点启动,再修改local数据库中的副本集相关信息,最后重新启动并reconfig副本集。
第一步:停止所有MongoDB副本集节点
service mongod stop
第二步:单节点方式启动MongoDB
修改/etc/mongod.conf配置,注释“replication”。修改port端口,例如37017,防止维护时其他应用连接。

如果有认证登录,还需要去除MongoDB的认证。
第三步:连接
mongo --port 37017
use local
cfg = db.system.replset.findOne( { "_id": "rs" } )
cfg.members[0].host = "mgdb1.blog.nbqykj.cn:27017"
cfg.members[1].host = "mgdb2.blog.nbqykj.cn:27017"
cfg.members[2].host = "mgdb3.blog.nbqykj.cn:27017"
db.system.replset.update( { "_id": "rs" } , cfg )
修改好后关闭MongoDB。
第四步:恢复配置
恢复第一步中修改的mongod.conf配置(端口和replication),添加认证。
第五步:查看配置
登录MongoDB副本集,输入命令: rs.status() 查看副本集状态。
附:副本集配置修改
# 获取副本集配置
replication:OTHER> cfg=rs.conf()
replication:OTHER> printjson(cfg)
# 查看配置节点
replication:OTHER> printjson(cfg.members[0])
# 修改节点端口
replication:OTHER> cfg.members[0].host="mgdb1.blog.nbqykj.cn:27001"
replication:OTHER> cfg.members[1].host="mgdb2.blog.nbqykj.cn:27002"
replication:OTHER> cfg.members[2].host="mgdb3.blog.nbqykj.cn:27003"
# 重新配置
replication:OTHER> rs.reconfig(cfg) # 可能会报错"errmsg" : "replSetReconfig should only be run on PRIMARY, but my state is REMOVED; use the "force" argument to override",
# 报错的话,根据报错信息加强制指令执行
replication:OTHER> rs.reconfig(cfg, {force : true})
参考连接:https://docs.mongodb.com/manual/tutorial/change-hostnames-in-a-replica-set/
正文完
微信搜一搜“奇悦电脑科技”或扫描二维码关注我们



支持博主