背景:
mongo 是分片+集群部署 (mongodb 集群搭建:分片+副本集_我家小宝_朱朱的博客-CSDN博客)
云主机要过去了, 需要切换到新的主机上.
主机工程师把5台机器所有的复制到新的机器
建议:
data里面全部删除, 然后重新配置启动后, 再把原来的数据导入进来
吐血过程
config 配置的ip 修改成新的. 如果你的mongo有鉴权, 需要把以下配置注释掉
我这边3台config, 都以此修改掉
- #security:
- # keyFile: /data/mongodb/testKeyFile.file
重启3台机器的config, 启动成功 ---- share的启动就无法启动,而且部分可以,部分不可以
进入初始化副本集 rs.initiate(config) 一直报错:
处理方式2个
1> config 不存储数据,所以就把config 下的3台的data的全部删除
2> config 不存储数据,所以就把config 下的2台的data的全部删除, 保留一台的data. 然后在这台执行就可以 rs.initiate(config)
我还增加操作:
use local db.system.replset.find() db.system.replset.remove({}) 然后在 rs.initiate(config)
两个方式都可以,此方式使用服务能启动, 如果无法启动,就直接用1> 就可以
3台机器的share1 启动也正常,开始做副本配置, 采用上面2> 正常
3台机器的share2 启动就不正常了, 一直报链接旧的config地址, 很是奇怪
网上一些 \Mongodb - 复制集RS简单操作_LSYHhhhh的博客-CSDN博客_mongo rs
都是前提是在master上才能操作. 但是我们是全部换ip, 不存在master 了,所以无法调整副本级配置
最后只能删除share2的data了
网上提到:
如果都已经不存在primary主机的话,则任意进入该副本集的任意一台主机进行登录
我这边由于启动不起来, 没啥用
- > rs.config();##观察members中哪一部分需要更改,会影响下面members[n]中n的值
- > rsc = rs.config();
- > rsc.members[0].host = "192.168.1.3:2777";
- > rs.reconfig(rsc);##如果不是primary主机,则会发生replSetReconfig should only be run on PRIMARY, but my state is REMOVED; use the \"force\" argument to override这个错误,那么则运行
- > rs.reconfig(rsc,{"force":true});
- > rs.config();##观察members中地址是否已经变更
先: > db.shards.remove({});
然后> 重新执行一次
sh.addShard("shard1/192.168.0.31:27001,192.168.0.32:27001,192.168.0.33:27001")
sh.addShard("shard2/192.168.0.32:27002,192.168.0.33:27002,192.168.0.34:27002")
sh.addShard("shard3/192.168.0.33:27003,192.168.0.34:27003,192.168.0.35:27003")
sh.addShard("shard4/192.168.0.34:27004,192.168.0.35:27004,192.168.0.31:27004")
sh.addShard("shard5/192.168.0.35:27005,192.168.0.31:27005,192.168.0.32:27005")
也可以如一下, 进行update的方式
- > use admin;
- > db.auth('root','root');
- > sh.status(); ##分片副本集信息及状态
- > use config;
- > db.shards.remove({});
- > db.shards.find();
- [
- {"_id" : "shard1","host" : "shard1/192.168.1.1:27117,192.168.1.2:27117","state" : 1},
- {"_id" : "shard2","host" : "shard2/192.168.2.1:27117,192.168.2.2:27117","state" : 1}
- ]
- > db.shards.update({_id:"shard1"},{$set:{"host":"shard1/192.168.1.3:27117,192.168.1.2:27117"}});
- > db.shards.find();
- [
- {"_id" : "shard1","host" : "shard1/192.168.1.3:27117,192.168.1.2:27117","state" : 1},
- {"_id" : "shard2","host" : "shard2/192.168.2.1:27117,192.168.2.2:27117","state" : 1}
- ]
- > use admin;
- > sh.status(); ##则可以看到最新的分片副本集信息
mongodb副本集加分片集群安全认证使用账号密码登录_我家小宝_朱朱的博客-CSDN博客_mongodb 集群登录
必须先删除所有帐号后,在重新创建,否则有问题
> 删除所有用户
- 查询和删除用户命令
- > use admin
- > show users; -- 查看当前库下用户
- > db.dropUser("zcy"); -- 删除帐号zcy
- > db.system.users.find(); -- 查询一下,如果还是有,执行下面的, 一次到位
- > db.system.users.remove({});
-
- 切换到其他库分别执行一下. mongo的用户和库有关系
- >use xxx;
- >show users;
> 创建用户
https://blog.csdn.net/zhuchunyan_aijia/article/details/113848406
>修改配置
security:
keyFile: /data/mongodb/testKeyFile.file
> 重启服务