傻逼 mongodb 的 replica 真是一堆狗屎,乱七八糟。
replica 配置持久化( 包括每个节点的 hostname !)保存在 mongodb 的 local 数据库里。
出错时重建 replica
- 停止所有实例,使用非复制模式启动:重新启动,去掉--replSet参数
- 清除复制集信息缓存数据库local。连接 mongo shell: use local; db.dropDatabase();
- 停止所有实例,使用复制模式启动:重新启动,使用--replSet参数指定新的复制集名字
- 初始化复制集
a. 使用mongo shell连接到其中一个实例,这个实例将作为新的PRIMARY
b. 执行rs.initiate()。不要指定参数,不然会报错。其他配置参数可以在随后使用rs.reconfig()方法来设置
c. 对每一个secondary,使用rs.add("localhost:51002")添加到复制集
d. 等待secondary同步
修改 mongo replica 的 hostname
https://docs.mongodb.com/manual/tutorial/change-hostnames-in-a-replica-set/
mongo shell:
cfg = rs.conf()
cfg.members[1].host = "mongodb1.example.net:27017"
rs.reconfig(cfg)