默认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/
支持博主