龙蜥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,创建普通用户

posted on 2025-04-27 15:59  NG-承  阅读(38)  评论(0)    收藏  举报

导航