mongodb replica sets recreate

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dazuiba008/article/details/82185564

最近一套mongodb replica sets损坏,原来的主节点损坏,从节点切换位主节点接替服务,但是业务程序没有重启,造成切过去以后,没有写入数据,不过业务不是很重要,所以影响不大,重启程序后,一个节点服务。接下来进行重建工作。

     主节点起来后,加入到集群,显示加入成功,状态也正常,可是主备切换的时候始终切不回来,再看从节点,数据根本没同步,强制切换一样无效,于是把local文件全部拷贝过来,重启加入集群,效果还是一样。以下方法均失败:

1. copy local数据文件,加入集群,状态正常,日志有错误,一样数据无法同步,主从无法切换

2. copy local+相关数据库文件,加入集群,日志报错,数据文件较大,由于业务一直写入,所以copy的文件不一致,导致从节点起后,主节点变成从节点,原来的从节点自己趴下了。

     实在无奈,想停业务进行copy,看看200G的数据文件,好纠结,进数据库看看了所有表大小加起来不超过15G(注意:数据文件会膨胀,但是不会自己压缩),果断通过mongodump导出相关数据库,将从库的local,损坏的数据库文件删除,iptables限制原来的业务连接,以单节点方式启动,导入数据,成功后,(注意:这里如果相关的数据库文件没有损坏,是一致的话,可以直接copy到dbpath路径下即可,数据库启动会自动探查加载),成功启动后,查看日志无异常。那么,这里关闭数据库,重新以集群的方式启动,主节点将改节点加入,数据库会慢慢同步,看了一下,同步的都是变动的数据,而且会扩展数据文件,但是不会和主节点扩展成一样的,以下可以看出数据库文件相差还是很大。

主节点:mongolog        145.8212890625GB

从节点:mongolog        33.8759765625GB

    

注意:copy数据文件要保证主从文件一致,所以要加只读锁,并把内存数据写入磁盘

加锁:db.runCommand({fsync:1,lock:1})

解锁:db.fsyncUnlock()

改变节点的优先级别:

主节点操作:

cfg = rs.conf()

cfg.members[0].priority = 0.5

cfg.members[1].priority = 2

cfg.members[2].priority = 2

rs.reconfig(cfg)

priority值从0~100,如果是0,则不会选举为primary节点,值越大优先级越高

猜你喜欢

转载自blog.csdn.net/dazuiba008/article/details/82185564