当MongoDB从库由于各种原因,如:
- 初次启动
- 停止太久无法与其他节点进行部分同步
等原因,需要全量同步数据时,参照如下方法操作:
- 关闭需要重建的从节点mongodb服务 使用systemctl stop mongod_xxxx,或登录mongosh之后使用db.shutdownServer()
- 确认数据文件路径 检查mongod.conf文件中的storage.dbPath参数,记录目录地址
- 将该目录清空 移除后重建该目录,或将该目录下的所有文件删除。需保证目录存在,且权限、所有者与之前保持一致
- 启动服务
此时,该节点会自动寻找集群中其他可用节点,进行全量同步。可通过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