副本集的MongoDB从节点重建

60 阅读1分钟

当MongoDB从库由于各种原因,如:

  • 初次启动
  • 停止太久无法与其他节点进行部分同步

等原因,需要全量同步数据时,参照如下方法操作:

  1. 关闭需要重建的从节点mongodb服务 使用systemctl stop mongod_xxxx,或登录mongosh之后使用db.shutdownServer()
  2. 确认数据文件路径 检查mongod.conf文件中的storage.dbPath参数,记录目录地址
  3. 将该目录清空 移除后重建该目录,或将该目录下的所有文件删除。需保证目录存在,且权限、所有者与之前保持一致
  4. 启动服务

此时,该节点会自动寻找集群中其他可用节点,进行全量同步。可通过mongosh登录,rs.status()查看能看到节点处于STARTUP2状态。完成后会恢复正常的secondary状态。

如果是新创建的节点,从其他主从节点复制conf目录,并创建其他必需的目录目录结构,之后步骤同重建。

文件拷贝重建法:

自动重建对于从节点少时会很慢。数据量大时可以通过文件同步的方式进行:

新节点:

https_proxy=http://172.31.51.23:8080 yum install -y zstd socat pv mkdir /data/mongodb/27017/data chown mongodb.mongodb /data/mongodb/27017/data socat tcp-listen:9999 system:"pv -a -r -W -L 100m | zstd - -d | tar -xf- -C /data/mongodb/27017/data"

一个存活的节点:

systemctl stop mongod_27017

cd /data/mongodb/27017 && tar -c data | zstd --fast -T4 | socat STDIN tcp:172.25.73.19:9999