官方介质路径:https://www.mongodb.com/try/download/community
官方部署文档:https://www.mongodb.com/docs/v5.0
官方配置文件描述 - mongod.conf:https://www.mongodb.com/docs/manual/reference/configuration-options
numactl:用于关闭 NUMA 功能
net-snmp:mongodb 依赖包
cyrus-sasl && cyrus-sasl-gssapi:mongodb 管理工具依赖包
mongodb-database-tools:mongoDB 官方管理工具
主机名 | IP 地址 | MongoDB 角色 | MongoDB 分片 |
---|---|---|---|
redis1 | 10.10.10.21 | mongossrv\configsvr | sharedsrv1:2311 sharedsrv2:2312 sharedsrv3:2313 |
redis2 | 10.10.10.22 | configsvr | sharedsrv1:2321 sharedsrv2:2322 sharedsrv3:2323 |
redis3 | 10.10.10.23 | configsvr | sharedsrv1:2331 sharedsrv2:2332 sharedsrv3:2333 |
mkdir -p /data/service/mongodb/mongossrv/log
mkdir -p /data/service/mongodb/configsrv/{data,log}
mkdir -p /data/service/mongodb/shardsrv1/{data,log}
mkdir -p /data/service/mongodb/shardsrv2/{data,log}
mkdir -p /data/service/mongodb/shardsrv3/{data,log}
每个 configsrv 都需部署
bindIp 需按节点实际信息调整
port 需按上述规划配置
vi /data/service/mongodb/configsrv/configsrv-${configsrv-port}.conf
# 系统日志
systemLog:
# 日志输出目标,一般配置为file,须于path同时配置
destination: file
# 以追加方式写入数据
logAppend: true
# 日志存放路径
path: /data/service/mongodb/configsrv/log/configsrv-${configsrv-port}.log
# 存储
storage:
# 数据存放路径
dbPath: /data/service/mongodb/configsrv/data
# 启动持久性日志。以确保数据文件保持有效和可恢复。
journal:
enabled: true
# 进程
processManagement:
# 以守护进程方式运行
fork: true
# PID 存放路径
pidFilePath: /data/service/mongodb/configsrv/configsrv-${configsrv-port}.pid
# 网络
net:
# 指定端口
port: ${configsrv-port}
# 指定 IP 地址。多个用逗号分开
bindIp: ${configsrv-ip}
# 复制集
replication:
# 指定复制集名称
replSetName: config
# Sharding 架构
sharding:
# 指定集群内此实例的角色
clusterRole: configsvr
每个 configsrv 都需启动
禁用 NUMA,以避免其导致的性能异常
numactl --interleave=all /data/service/mongodb/mongodb5.0.9/bin/mongod --config /data/service/mongodb/configsrv/configsrv-${configsrv-port}.conf
可在任意节点进行操作
登录 mongodb 交互界面
mongo ${configsrv-ip}:${configsrv-port}
配置 configsrv 副本集
id 需与配置中 replSetName 参数相同
后缀 priority:${number} 可增加权重,更容易被选举为 Primary
后缀 arbiterOnly:true 可将实力设置为仲裁实例,则只参与仲裁,不读写数据
host 内参数之间,用逗号分开
rs.initiate(
{
_id : "config",
members : [
{_id : 0, host : "${configsrv-ip}:${configsrv-port}" },
{_id : 1, host : "${configsrv-ip}:${configsrv-port}" },
{_id : 2, host : "${configsrv-ip}:${configsrv-port}" }
]
}
)
rs.status()
每个 shardsrv 都需部署
bindIp 需按节点实际信息调整
port 需按上述规划配置
vi /data/service/mongodb/shardsrv{1-3}/shardsrv-${shardsrv-port}.conf
# 系统日志
systemLog:
# 日志输出目标,一般配置为file,须于path同时配置
destination: file
# 以追加方式写入数据
logAppend: true
# 日志存放路径
path: /data/service/mongodb/shardsrv{1-3}/log/shardsrv-${shardsrv-port}.log
# 存储
storage:
# 数据存放路径
dbPath: /data/service/mongodb/shardsrv{1-3}/data
# 启动持久性日志。以确保数据文件保持有效和可恢复。
journal:
enabled: true
# 进程
processManagement:
# 以守护进程方式运行
fork: true
# PID 存放路径
pidFilePath: /data/service/mongodb/shardsrv{1-3}/shardsrv-${shardsrv-port}.pid
# 网络
net:
# 指定端口
port: ${shardsrv-port}
# 指定 IP 地址。多个用逗号分开
bindIp: ${shardsrv-ip}
# 复制集
replication:
# 指定复制集名称
# 3 个 shard 实例为 1 个复制集,而单个复制集内的所有实例需配置同一个复制集名称
replSetName: shard{1-3}
# Sharding 架构
sharding:
# 指定集群内此实例的角色
clusterRole: shardsvr
每个 shardsrv 都需启动
禁用 NUMA,以避免其导致的性能异常
numactl --interleave=all /data/service/mongodb/mongodb5.0.9/bin/mongod --config /data/service/mongodb/shardsrv{1-3}/shardsrv-${shardsrv-port}.conf
可在任意节点进行操作
登录 mongodb 交互界面
mongo ${shardsrv-ip}:${shardsrv-port}
配置 shardsrv 副本集
id 需与配置中 replSetName 参数相同
shardsrv1
rs.initiate(
{
_id : "shard1",
members : [
{_id : 0, host : "${shardsrv1-ip}:${shardsrv1-port}" },
{_id : 1, host : "${shardsrv1-ip}:${shardsrv1-port}" },
{_id : 2, host : "${shardsrv1-ip}:${shardsrv1-port}" }
]
}
)
rs.initiate(
{
_id : "shard1",
members : [
{_id : 0, host : "${shardsrv2-ip}:${shardsrv2-port}" },
{_id : 1, host : "${shardsrv2-ip}:${shardsrv2-port}" },
{_id : 2, host : "${shardsrv2-ip}:${shardsrv2-port}" }
]
}
)
rs.initiate(
{
_id : "shard3",
members : [
{_id : 0, host : "${shardsrv3-ip}:${shardsrv3-port}" },
{_id : 1, host : "${shardsrv3-ip}:${shardsrv3-port}" },
{_id : 2, host : "${shardsrv3-ip}:${shardsrv3-port}" }
]
}
)
rs.status()
每个 mongossrv 都需部署
bindIp 需按节点实际信息调整
port 需按上述规划配置
vi /data/service/mongodb/mongossrv/mongossrv-${mongossrv-port}.conf
# 系统日志
systemLog:
# 日志输出目标,一般配置为file,须于path同时配置
destination: file
# 以追加方式写入数据
logAppend: true
# 日志存放路径
path: /data/service/mongodb/mongossrv/log/mongossrv-${mongossrv-port}.log
# 进程
processManagement:
# 以守护进程方式运行
fork: true
# PID 存放路径
pidFilePath: /data/service/mongodb/mongossrv/mongossrv-${mongossrv-port}.pid
# 网络
net:
# 指定端口
port: ${mongossrv-port}
# 指定 IP 地址。多个用逗号分开
bindIp: ${mongossrv-ip}
# Sharding 架构
sharding:
# 指定 Sharding 架构内的 configsrv
# 用逗号隔开
configDB: config/${configsrv1-ip}:${configsrv1-port},${configsrv2-ip}:${configsrv2-port},${configsrv3-ip}:${configsrv3-port}
每个 mongossrv 都需启动
由于 mongossrv 只用于路由,并不存放实际数据。所以无需禁用 NUMA
mongossrv 需要通过 mongos 命令启动,而非 mongod
/data/service/mongodb/mongodb5.0.9/bin/mongos --config /data/service/mongodb/mongossrv/mongossrv-${mongossrv-port}.conf
在 Sharding 架构中,mongossrv 之间并没有 HA 功能
若需要部署 mongossrv HA,需要借助其它服务
可在任意 mongossrv 实例进行操作
登录 mongodb 交互界面
mongo ${mongossrv-ip}:${mongossrv-port}
添加分片复制集
实例之间用逗号隔开
sh.addShard( "${shard1-repliname}/${shardsrv1-ip}:${shardsrv1-port},${shardsrv2-ip}:${shardsrv2-port},${shardsrv3-ip}:${shardsrv3-port}" )
sh.addShard( "${shard2-repliname}/${shardsrv1-ip}:${shardsrv1-port},${shardsrv2-ip}:${shardsrv2-port},${shardsrv3-ip}:${shardsrv3-port}" )
sh.addShard( "${shard3-repliname}/${shardsrv1-ip}:${shardsrv1-port},${shardsrv2-ip}:${shardsrv2-port},${shardsrv3-ip}:${shardsrv3-port}" )
sh.status()