龙蜥8部署mongodb5分片集群
原因:mongodb7 官方已停止更新,漏洞修复等~所以决定转移到mongodb5
安装基本参考:龙蜥8部署mongodb7分片集群 就行 注意mongosh 是mongodb6之后引入的,在mongodb6之前使用的连接是 mongo 命令用法基本一致
以下操作是在原mongodb7分片集群上 进行:
备份:
1.数据目录、元数据目录
2.mongodump导出备份
nohup /bin/mongodump --host 主机ip --port 27017 -u 用户名 -p "密码" --authenticationDatabase 库名 -o /data/mongo_bak_2025_0424/ &
卸载mongodb7,安装mongodb5
sudo yum remove -y mongodb-org
sudo yum localinstall -y mongodb-5.0.15-1.an8.x86_64.rpm
创建mongodb5分片集群 各组件等目录:
mkdir -pv /apprun/mongodb/{pidfile,data/config_svr,logs/config_svr}
mkdir -pv /apprun/mongodb/yaml
mkdir -pv /apprun/mongodb/pki
mkdir -pv /data/mongodb/data/config_svr
拷贝mongodb7分片集群配置 到 mongodb5分片集群配置目录,并修改调整路径
cp /apprun/mongo7.0/yaml/* /apprun/mongodb/yaml/
cp /apprun/mongo7.0/pki/* /apprun/mongodb/pki/
sed -i "s/7.0/db/g" /apprun/mongodb/yaml/config_svr.yml
注释认证,拷贝脚本并修改
cp /apprun/mongo7.0/add_annotate.sh /apprun/mongodb/
cp /apprun/mongo7.0/clear_annotate.sh /apprun/mongodb/
sed -i "s/7.0/db/g" /apprun/mongodb/add_annotate.sh
sed -i "s/7.0/db/g" /apprun/mongodb/clear_annotate.sh
修改Config Server服务 启动脚本:
sudo sed -i "s/7.0/db/g" /usr/lib/systemd/system/mongodb-config.service
sudo systemctl daemon-reload
sudo systemctl start mongodb-config.service
sudo netstat -ntlp
防止干扰(这里采用的是定制的rpm包):
sudo systemctl stop mongod.service
sudo systemctl disable mongod.service
在mongodb01上初始化配置Config Server副本集
/apprun/mongodb/bin/mongo --host 主机1_ip --port 27018
use admin
config = {_id: "configsvr_rs", members: [ {_id: 0, host: "主机1_ip:27018"},
{_id: 1, host: "主机2_ip:27018"},
{_id: 2, host: "主机3_ip:27018"},
{_id: 3, host: "主机4_ip:27018"},
{_id: 4, host: "主机5_ip:27018"} ] }
初始化副本集:
admin> rs.initiate(config)
{ ok: 1 }
查看此时状态:
rs.status()
创建Shard Server组件集群
mkdir -pv /apprun/mongodb/{data/shard-1,logs/shard-1}
mkdir -pv /apprun/mongodb/{data/shard-2,logs/shard-2}
mkdir -pv /apprun/mongodb/{data/shard-3,logs/shard-3}
mkdir -pv /data/mongodb/data/{shard-1,shard-2,shard-3}
sed -i "s/7.0/db/g" /apprun/mongodb/yaml/shard-1.yml
sed -i "s/7.0/db/g" /apprun/mongodb/yaml/shard-2.yml
sed -i "s/7.0/db/g" /apprun/mongodb/yaml/shard-3.yml
注释认证
修改启动脚本:
sudo sed -i "s/7.0/db/g" /usr/lib/systemd/system/mongodb-shard-1.service
sudo sed -i "s/7.0/db/g" /usr/lib/systemd/system/mongodb-shard-2.service
sudo sed -i "s/7.0/db/g" /usr/lib/systemd/system/mongodb-shard-3.service
在mongodb各节点启动三个Shard Server服务
sudo systemctl daemon-reload
sudo systemctl start mongodb-shard-1
sudo systemctl start mongodb-shard-2
sudo systemctl start mongodb-shard-3
sudo netstat -ntlp
在mongodb01上初始化配置Shard Server 01副本集
/apprun/mongodb/bin/mongo --host 主机1_ip --port 27019
使用admin数据库,定义副本集配置:
use admin
定义config变量,"arbiterOnly":true 代表其为仲裁节点:
config = {_id: "shardsvr_rs1", members: [
{_id: 0, host: "主机1_ip:27019"},
{_id: 1, host: "主机2_ip:27019"},
{_id: 2, host: "主机3_ip:27019"},
{_id: 3, host: "主机4_ip:27019"},
{_id: 4, host: "主机5_ip:27019",arbiterOnly:true},
]
}
注:_id: "shardsvr_rs1"应与shard-1.yml配置文件中的replSetName名称一致,
"members" 中的 "host" 为三个节点的IP/主机名和Shard Server 1 Port
初始化副本集:
> rs.initiate(config)
{ "ok" : 1 }
shardsvr_rs1:SECONDARY>
查看此时状态:
shardsvr_rs1:SECONDARY> rs.status()
在mongodb02上初始化配置Shard Server 02副本集
/apprun/mongodb/bin/mongo --host 主机2_ip --port 27020
使用admin数据库,定义副本集配置:
use admin
定义config变量,"arbiterOnly":true 代表其为仲裁节点:
config = {_id: "shardsvr_rs2", members: [
{_id: 0, host: "主机1_ip:27020",arbiterOnly:true},
{_id: 1, host: "主机2_ip:27020"},
{_id: 2, host: "主机3_ip:27020"},
{_id: 3, host: "主机4_ip:27020"},
{_id: 4, host: "主机5_ip:27020"},
]
}
初始化副本集:
> rs.initiate(config)
{ "ok" : 1 }
shardsvr_rs2:SECONDARY>
查看此时状态:
shardsvr_rs2:SECONDARY> rs.status()
在mongodb03上初始化配置Shard Server 03副本集
/apprun/mongodb/bin/mongo --host 主机3_ip --port 27021
使用admin数据库,定义副本集配置:
use admin
定义config变量,"arbiterOnly":true 代表其为仲裁节点:
config = {_id: "shardsvr_rs3", members: [
{_id: 0, host: "主机1_ip:27021"},
{_id: 1, host: "主机2_ip:27021",arbiterOnly:true},
{_id: 2, host: "主机3_ip:27021"},
{_id: 3, host: "主机4_ip:27021"},
{_id: 4, host: "主机5_ip:27021"},
]
}
初始化副本集:
> rs.initiate(config)
{ "ok" : 1 }
shardsvr_rs3:SECONDARY>
查看此时状态:
shardsvr_rs3:SECONDARY> rs.status()
创建Mongos Server路由服务器集群
在Mongos Server 01 [mongodb01] 上创建mongos配置文件
sed -i "s/7.0/db/g" /apprun/mongodb/yaml/mongos.yml
sudo sed -i "s/7.0/db/g" /usr/lib/systemd/system/mongodb-mongos-server.service
在Mongos Server各节点启动Mongos服务
mkdir -pv /apprun/mongodb/logs/mongos
sudo systemctl daemon-reload
sudo systemctl start mongodb-mongos-server
sudo netstat -ntlp
在任一台Mongos Server上启用分片机制
/apprun/mongodb/bin/mongo --host 主机1_ip --port 27017
使用admin数据库,定义副本集配置:
use admin
添加各个分片集群
sh.addShard("shardsvr_rs1/主机1_ip:27019,主机2_ip:27019,主机3_ip:27019,主机4_ip:27019,主机5_ip:27019")
sh.addShard("shardsvr_rs2/主机1_ip:27020,主机2_ip:27020,主机3_ip:27020,主机4_ip:27020,主机5_ip:27020")
sh.addShard("shardsvr_rs3/主机1_ip:27021,主机2_ip:27021,主机3_ip:27021,主机4_ip:27021,主机5_ip:27021")
导入备份数据:
后台运行并记录输出到文件
nohup /apprun/mongodb/bin/mongorestore --host 主机5_ip:27017 \
--db Furion \
--dir /data/mongo_bak_2025_0424/Furion \
--numInsertionWorkersPerCollection 24 > /data/mongorestore_log.log 2>&1 &
关停 删除数据、元数据、日志目录 rm -rf /apprun/mongodb/data rm -rf /apprun/mongodb/logs rm -rf /data/mongodb/data 重建数据、元数据、日志目录 mkdir -pv /data/mongodb/data/config_svr mkdir -pv /apprun/mongodb/{data/config_svr,logs/config_svr} mkdir -pv /apprun/mongodb/{data/shard-1,logs/shard-1} mkdir -pv /apprun/mongodb/{data/shard-2,logs/shard-2} mkdir -pv /apprun/mongodb/{data/shard-3,logs/shard-3} mkdir -pv /data/mongodb/data/{shard-1,shard-2,shard-3} mkdir -pv /apprun/mongodb/logs/mongos 在Config Server各节点启动Config Server服务 sudo systemctl start mongodb-config.service ===>> bash /apprun/wangbocheng/start_dir/1-start.sh 在mongodb01上初始化配置Config Server副本集 /apprun/mongodb/bin/mongo --host 主机ip1 --port 27018 use admin config = {_id: "configsvr_rs", members: [ {_id: 0, host: "主机ip1:27018"}, {_id: 1, host: "主机ip2:27018"}, {_id: 2, host: "主机ip3:27018"}, {_id: 3, host: "主机ip4:27018"}, {_id: 4, host: "主机ip5:27018"} ] } 初始化副本集: admin> rs.initiate(config) { ok: 1 } 查看此时状态: rs.status() 在mongodb各节点启动三个Shard Server服务 sudo systemctl start mongodb-shard-1 ===>> bash /apprun/wangbocheng/start_dir/2-start.sh sudo systemctl start mongodb-shard-2 ===>> bash /apprun/wangbocheng/start_dir/3-start.sh sudo systemctl start mongodb-shard-3 ===>> bash /apprun/wangbocheng/start_dir/4-start.sh 在mongodb01上初始化配置Shard Server 01副本集 /apprun/mongodb/bin/mongo --host 主机ip1 --port 27019 使用admin数据库,定义副本集配置: use admin 定义config变量,"arbiterOnly":true 代表其为仲裁节点: config = {_id: "shardsvr_rs1", members: [ {_id: 0, host: "主机ip1:27019"}, {_id: 1, host: "主机ip2:27019"}, {_id: 2, host: "主机ip3:27019"}, {_id: 3, host: "主机ip4:27019"}, {_id: 4, host: "主机ip5:27019",arbiterOnly:true}, ] } 初始化副本集: > rs.initiate(config) { "ok" : 1 } shardsvr_rs1:SECONDARY> 查看此时状态: shardsvr_rs1:SECONDARY> rs.status() 在mongodb02上初始化配置Shard Server 02副本集 /apprun/mongodb/bin/mongo --host 主机ip2 --port 27020 使用admin数据库,定义副本集配置: use admin 定义config变量,"arbiterOnly":true 代表其为仲裁节点: config = {_id: "shardsvr_rs2", members: [ {_id: 0, host: "主机ip1:27020",arbiterOnly:true}, {_id: 1, host: "主机ip2:27020"}, {_id: 2, host: "主机ip3:27020"}, {_id: 3, host: "主机ip4:27020"}, {_id: 4, host: "主机ip5:27020"}, ] } 初始化副本集: > rs.initiate(config) { "ok" : 1 } shardsvr_rs2:SECONDARY> 查看此时状态: shardsvr_rs2:SECONDARY> rs.status() 在mongodb03上初始化配置Shard Server 03副本集 /apprun/mongodb/bin/mongo --host 主机ip3 --port 27021 使用admin数据库,定义副本集配置: use admin 定义config变量,"arbiterOnly":true 代表其为仲裁节点: config = {_id: "shardsvr_rs3", members: [ {_id: 0, host: "主机ip1:27021"}, {_id: 1, host: "主机ip2:27021",arbiterOnly:true}, {_id: 2, host: "主机ip3:27021"}, {_id: 3, host: "主机ip4:27021"}, {_id: 4, host: "主机ip5:27021"}, ] } 初始化副本集: > rs.initiate(config) { "ok" : 1 } shardsvr_rs3:SECONDARY> 查看此时状态: shardsvr_rs3:SECONDARY> rs.status() 创建Mongos Server路由服务器集群 在Mongos Server各节点启动Mongos服务 sudo systemctl start mongodb-mongos-server ===>> bash /apprun/wangbocheng/start_dir/5-start.sh 在任一台Mongos Server上启用分片机制 /apprun/mongodb/bin/mongo --host 主机ip1 --port 27017 使用admin数据库,定义副本集配置: use admin 添加各个分片集群 sh.addShard("shardsvr_rs1/主机ip1:27019,主机ip2:27019,主机ip3:27019,主机ip4:27019,主机ip5:27019") sh.addShard("shardsvr_rs2/主机ip1:27020,主机ip2:27020,主机ip3:27020,主机ip4:27020,主机ip5:27020") sh.addShard("shardsvr_rs3/主机ip1:27021,主机ip2:27021,主机ip3:27021,主机ip4:27021,主机ip5:27021") ###nohup /bin/mongodump --host 主机ip5 --port 27017 -u qbadmin -p "At1@tIk^nx" --authenticationDatabase Furion -o /data/mongo_bak_2025_0424/ & 导入备份: /apprun/mongodb/bin/mongorestore --host 主机ip5:27017 \ --db Furion \ --dir /data/mongo_bak_2025_0424/Furion \ --numInsertionWorkersPerCollection 24 # 根据 CPU 核数调整并发数 后台运行并记录输出到文件 nohup /apprun/mongodb/bin/mongorestore --host 主机ip5:27017 \ --db Furion \ --dir /data/mongo_bak_2025_0424/Furion \ --numInsertionWorkersPerCollection 24 > /data/mongorestore_log.log 2>&1 &
在mongos中创建认证用户
创建一个名为admin的超级管理员用户,该用户对所有数据库管理有root权限,可使用db.dropUser("admin")删除该用户
/apprun/mongodb/bin/mongo --host ip --port 27017
use admin
db.createUser({user: "admin", pwd: "密码", roles: [{ role: "root", db: "admin" }]})
账号验证操作:
db.auth("admin", "密码")
分别在Shard Server 01、02、03的Primary节点,添加admin用户
/apprun/mongodb/bin/mongo --host ip --port 27019
rs.status()
/apprun/mongodb/bin/mongo --host ip --port 27020
rs.status()
/apprun/mongodb/bin/mongo --host ip --port 27021
rs.status()
分别找到主Primary节点,并在对应主节点上添加admin用户
use admin
db.createUser({user: "admin", pwd: "密码", roles: [{ role: "root", db: "admin" }]})
开启集群认证功能
sudo systemctl stop mongodb-mongos-server
sudo systemctl stop mongodb-shard-3
sudo systemctl stop mongodb-shard-2
sudo systemctl stop mongodb-shard-1
sudo systemctl stop mongodb-config.service
运行此脚本去除Config Server、Shard Server、MONGOS SERVER各组件配置文件中安全认证部分的#注释号
按顺序重启所有节点的所有MongoDB组件
sudo systemctl start mongodb-config.service
sudo systemctl start mongodb-shard-1
sudo systemctl start mongodb-shard-2
sudo systemctl start mongodb-shard-3
sudo systemctl start mongodb-mongos-server
客户端连接mongodb集群
1. 转义密码中的特殊字符
密码 da&fr#fg 包含 & 和 #,在 MongoDB 连接字符串中需要 URL 编码:
& → %26
# → %23
/apprun/mongodb/bin/mongo "mongodb://admin:密码@192.168.109.18:27017,192.168.109.19:27017,192.168.109.20:27017/Furion?authSource=admin"
使用admin用户登录mongos,创建普通用户
浙公网安备 33010602011771号