mongodb移除离线节点并重新添加

环境

mongodb 二进制部署3节点分片集群,有一个节点系统盘损坏了无法修复,需要移除离线节点并重新添加新节点。

步骤

检查当前集群状态

连接到mongos

mongo --host 1.2.3.4 --port 30001

// 检查分片状态
sh.status()

// 检查配置服务器状态
use config
db.shards.find()
db.databases.find()

// 检查状态
db.adminCommand({listShards: 1})

file

file

file

file

移除mongod故障节点

连接到mongod的PRIMARY节点。

mongo --host 1.2.3.4 --port 30002

// 确认状态
rs.status()

// 强制移除故障节点
rs.remove("1.2.3.1:30002")

// 如果上述命令失败,使用reconfig强制移除
cfg = rs.conf()
cfg.members = cfg.members.filter(function(member) {
    return member.host != "1.2.3.1:30002"
})
rs.reconfig(cfg, {force: true})

file

file

file

file

file

准备新节点

在新节点上创建目录,根据实际部署情况拷贝配置文件:

mkdir -p /home/mongodb/data/config/{data,log,pid}
mkdir -p /home/mongodb/data/mongos/{data,log,pid}
mkdir -p /home/mongodb/data/share_rs/{share1,share2,share3}/{data,log,pid}

cd /home/mongodb/data/config
scp mongod.yaml 1.2.3.5:/home/mongodb/data/config
cd /home/mongodb/data/mongos
scp mongos.yaml 1.2.3.5:/home/mongodb/data/mongos
cd /home/mongodb/data/share_rs/share1
scp shard.yaml 1.2.3.5:/home/mongodb/data/share_rs/share1
cd /home/mongodb/data/share_rs/share2
scp shard.yaml 1.2.3.5:/home/mongodb/data/share_rs/share1
cd /home/mongodb/data/share_rs/share3
scp shard.yaml 1.2.3.5:/home/mongodb/data/share_rs/share1
cd /home/mongodb
scp testKeyFile.file 1.2.3.5:/home/mongodb

修改mongod.yaml中的ip地址为1.2.3.5

file

修改mongos.yaml中的ip地址为1.2.3.5

file

修改3个shard.yaml中的ip地址为1.2.3.5

file

启动新mongodb

添加环境变量:

export PATH=/home/mongodb/mongodb-4.4.15/bin:$PATH

echo "PATH=/home/mongodb/mongodb-4.4.15/bin:$PATH" >> /etc/profile
source /etc/profile

file

启动shard:

mongod -f /home/mongodb/data/share_rs/share1/shard.yaml
mongod -f /home/mongodb/data/share_rs/share2/shard.yaml
mongod -f /home/mongodb/data/share_rs/share3/shard.yaml

file

启动mongos:

mongos -f /home/mongodb/data/mongos/mongos.yaml

file

启动mongod:

mongod -f /home/mongodb/data/config/mongod.yaml

file

file

添加mongod新节点

mongo --host 1.2.3.4 --port 30002
// 添加新节点到配置服务器副本集
rs.add("1.2.3.5:30002")

// 等待数据同步完成
rs.status()

// 确认新节点状态
db.isMaster()

file

file

file

移除shard离线节点

连接分片PRIMARY节点:

mongo --host 1.2.3.4 --port 30011

// 检查分片状态
rs.status()

// 移除故障的节点(根据实际分片端口)
rs.remove("1.2.3.1:30011")
rs.remove("1.2.3.1:40011")
rs.remove("1.2.3.1:50011")

// 添加新节点到分片集群
rs.add("1.2.3.5:30011")
rs.add("1.2.3.5:40011")
rs.add("1.2.3.5:50011")

// 等待数据同步
rs.status()

file

file

file

等待状态变为SECONDARY

file

file

另外两个shard也需要做同样的操作。如果执行remove卡住,需要执行下面的命令删除节点。

cfg = rs.conf()
cfg.members = cfg.members.filter(m => !m.host.includes("1.2.3.1"))
rs.reconfig(cfg, {force: true})

重启其他节点mongos

修改mongos配置中集群ip为新节点ip,重启服务。

vim /home/mongodb/data/mongos/mongos.yaml
pkill -f mongos
ps aux |grep mongo
mongos -f /home/mongodb/data/mongos/mongos.yaml

file

检查集群状态

mongo --host 1.2.3.4 --port 30001
sh.status()

file

集群恢复正常,数据正常读取写入。

0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
最旧
最新 最多投票
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
0
希望看到您的想法,请您发表评论x