mongodb 副本集重新配置脚本

本贴最后更新于 268 天前,其中的信息可能已经时移俗易

# mongodb副本集重新配置脚本
背景:已经有一个多节点的副本集,但是超过半数的节点失效了,需要重新把正常的节点配置副本集

## 功能
- 正常的节点会重新配置为新的副本集
- 会打印失效的节点,可以后续通过rs.add()添加回来

## 使用
1. mongo_reconfig.js文件的内容如下:
```js
conn = new Mongo("mongodb://127.0.0.1:27007");
db = conn.getDB("admin");
db.auth("root","ee06167b10a177f60766d35baa81955d");

// set secondary to write
rs.slaveOk()

// get the config of the old replication
cfg = rs.conf();

// get all the members status
smembers = rs.status().members;

// for (i = 0; i < smembers.length; i++) { 
//   if(smembers[i]["health"]){
//     newcfgmembers.push(cfg.members[i])
//   }
// }

// cfg.members=newcfgmembers;
newcfgmembers = [];
for(let index in smembers) {
  if(smembers[index]["health"]){
    newcfgmembers.push(cfg.members[index]) 
  }
};

//  reconfig
printjson("newcfgmembers is :"); 
printjson(newcfgmembers);  
cfg.members=newcfgmembers;
// printjson(cfg.members);
rs.reconfig(cfg, {force : true})
printjson('the following mongo nodes need to be add if become normal: rs.add("192.168.11.141:27001")');
for(let index in smembers) {
  if(!smembers[index]["health"]){
    printjson(smembers[index]["name"]); 
  }
};
  1. 重新配置副本集
    进入放置 mongo_reconfig.js 的目录,执行 js 文件:docker exec -i mongo mongo mongodb://127.0.0.1:27007 < pwd /mongo_reconfig.js
    根据实际情况调整命令。其他执行 js 的命令参考:
mongo localhost:27017/test myjsfile.js

如果是手动登录了 mongo shell 窗口,可以这样执行:

load("scripts/myjstest.js") //相对存储目录的路径
load("/data/db/scripts/myjstest.js") //绝对路径

MongoDB 的数据存储目录是/data/db,那么 myjstest.js 在/data/db/scripts 目录下。

  1. 恢复失效节点
    在第 2 步中,脚本跑完后会把失效节点打印出来。当失效节点恢复正常后,可以通过 rs.add()命令把节点加回来:
rs.add( "192.168.11.141:27001" )
rs.add( "192.168.11.141:27002" )
rs.add( "192.168.11.141:27003" )
rs.add( "192.168.11.141:27004" )

参考资料


  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    83 引用 • 58 回帖 • 3 关注

广告 我要投放

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...