1。冻结其中的一个从节点,使其不参与到与primary 的内部选举工作
进入客户端,执行(单位:秒)
rs.freeze(30);
2.对原主节点进行降级
进入客户端,执行下面代码 (单位:秒)
rs.stepDown(15);
3.经过冻结和降级之后查看复制集状态
rs.status();
复制集顺利切换
目前使用到mongodb的项目
2.上述办法是临时,一旦原来的主起来,主节点会被拿回去,最主要还是修改权重,方法如下:
a.现在我们的mongo的仲裁基本都是主做在一起,所以切换主从时迁移仲裁节点,不然一旦仲裁节点所在的服务器有问题,这个复制集会出问题
比如:rs.remove(“192.168.178.18:27018”)
rs.addArb(“192.168.178.4:27018”)
b.登入mongo 设置个节点的权重
cfg = rs.conf()
cfg.members[0].priority = 50
cfg.members[2].priority = 10
cfg.members[3].priority = 10
cfg.members[4].priority = 100
cfg.members[5].priority = 100
rs.reconfig(cfg)
0 2 3 是按照rs.conf() 排下来的顺序
仲裁会直接选权重最高的节点作为主
可以用 rs.status(); 查看
今天遇到一个问题,仲裁节点起不来,先前是主节点挂了,仲裁也在此节点上。所以重启两个mongo的进程,但重启后发现仲裁一直处于启动中状态,这时发现集群成为无主集群了,无法执行写操作。看了仲裁的日志,发现是连不上从库。删除从库的 mongod.lock 后,启动从库,集群恢复。
所以以后关闭mongo ,尽量用 /usr/local/webserver/mongo/bin/mongod -f /etc/mongodb.cnf –shutdown
不要用kill