基础环境
- CentOS 7
- MongoDB 4.4.13
MongoDB分片集群架构
创建目录
sudo mkdir -p \
/var/mongo/shard_cluster/shard1/data \
/var/mongo/shard_cluster/shard1/logs \
/var/mongo/shard_cluster/shard1/etc \
/var/mongo/shard_cluster/config/data \
/var/mongo/shard_cluster/config/logs \
/var/mongo/shard_cluster/config/etc \
/var/mongo/shard_cluster/mongos/logs \
/var/mongo/shard_cluster/mongos/etc && \
sudo chown -R stb_admin:stb_admin /var/mongo
复制代码
下载MongoDB
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.13.tgz -P /var/mongo && \
tar -xvf /var/mongo/mongodb-linux-x86_64-rhel70-4.4.13.tgz -C /var/mongo && \
mv /var/mongo/mongodb-linux-x86_64-rhel70-4.4.13 /var/mongo/mongodb
复制代码
创建shard
以下只展示构建shard1过程,shard2、shard3构建自行修改
vi /var/mongo/shard_cluster/shard1/etc/mongod.conf
复制代码
/var/mogno/shard_cluster/shard/etc/mongod.conf
processManagement:
# 启用在后台运行或进程的守护程序模式
fork: true
systemLog:
# 日志输出类型,file或syslog
destination: file
# 日志目录
path: /var/mongo/shard_cluster/shard1/logs/mongodb.log
# 重启将新日志附加到现有日志文件的末尾
logAppend: true
storage:
# 指定数据存放的路径
dbPath: /var/mongo/shard_cluster/shard1/data/
journal:
# 启用或禁用持久性日志以确保数据文件保持有效和可恢复。此选项仅在指定dbPath设置时适用
enabled: true
# 进程在日志操作之间允许的最长时间(以毫秒为单位)
commitIntervalMs: 100
# 使用单独的目录来存储每个数据库的数据
directoryPerDB: true
operationProfiling:
# 设置慢日志时间
slowOpThresholdMs: 100
mode: slowOp
# 是否支持分片,本集群需要支持分片,因此需要加上配置
sharding:
# 实例在分片集群中的角色,config:configsvr,shard:shardsvr
clusterRole: shardsvr
archiveMovedChunks: true
replication:
# 复制操作日志(即oplog )的最大大小(以 MB 为单位),oplog 通常是可用磁盘空间的 5%。
oplogSizeMB: 5120
# 副本集的名称
replSetName: shard1
net:
# 设置mongod监听端口
port: 27001
bindIpAll: true
#security:
# keyFile: /var/mongo/mpc/shard1/keys/key.file
# authorization: enabled
复制代码
启动shard
numactl --interleave=all /var/mongo/mongodb/bin/mongod -f /var/mongo/shard_cluster/shard1/etc/mongod.conf --fork
复制代码
注意 : mongodb 服务端使用 numactl –interleave=all 可以成倍的提高导入速度
配置副本集
/var/mongo/mongodb/bin/mongo --port 27001
rs.initiate(
{
_id: "shard1",
members: [
{ _id : 0, host : "<IP>:27001" },
{ _id : 1, host : "<IP>:27001" },
{ _id : 2, host : "<IP>:27001" }
]
}
)
复制代码
创建config
vi /var/mongo/shard_cluster/config/etc/mongocfg.conf
复制代码
/var/mongo/shard_cluster/config/etc/mongocfg.conf
processManagement:
# 启用在后台运行或进程的守护程序模式
fork: true
systemLog:
# 日志输出类型,file或syslog
destination: file
# 日志目录
path: /var/mongo/shard_cluster/config/logs/mongocfg.log
# 重启将新日志附加到现有日志文件的末尾
logAppend: true
storage:
# 指定数据存放的路径
dbPath: /var/mongo/shard_cluster/config/data/
journal:
# 启用或禁用持久性日志以确保数据文件保持有效和可恢复。此选项仅在指定dbPath设置时适用
enabled: true
# 进程在日志操作之间允许的最长时间(以毫秒为单位)
commitIntervalMs: 100
# 使用单独的目录来存储每个数据库的数据
directoryPerDB: true
operationProfiling:
# 设置慢日志时间
slowOpThresholdMs: 100
mode: slowOp
# 是否支持分片,本集群需要支持分片,因此需要加上配置
sharding:
# 实例在分片集群中的角色,config:configsvr,shard:shardsvr
clusterRole: configsvr
archiveMovedChunks: true
replication:
# 复制操作日志(即oplog )的最大大小(以 MB 为单位),oplog 通常是可用磁盘空间的 5%。
oplogSizeMB: 5120
# 副本集的名称
replSetName: config
net:
# 设置mongod监听端口
port: 27000
bindIpAll: true
#security:
# keyFile: /var/mongo/mpc/config/keys/key.file
# authorization: enabled
复制代码
启动config
numactl --interleave=all /var/mongo/mongodb/bin/mongod -f /var/mongo/shard_cluster/config/etc/mongocfg.conf --fork
复制代码
配置副本集
/var/mongo/mongodb/bin/mongo --port 27000
rs.initiate(
{
_id: "config",
configsvr: true,
members: [
{ _id : 0, host : "<IP>:27000" },
{ _id : 1, host : "<IP>:27000" },
{ _id : 2, host : "<IP>:27000" }
]
}
)
复制代码
创建mongos
vi /var/mongo/shard_cluster/mongos/etc/mongos.conf
复制代码
/var/mongo/shard_cluster/mongos/etc/mongos.conf
processManagement:
# 启用在后台运行或进程的守护程序模式
fork: true
systemLog:
# 日志输出类型,file或syslog
destination: file
# 日志目录
path: /var/mongo/shard_cluster/mongos/logs/mongos.log
# 重启将新日志附加到现有日志文件的末尾
logAppend: true
# 是否支持分片,本集群需要支持分片,因此需要加上配置
sharding:
configDB: config/172.17.53.243:27000,172.17.53.244:27000,172.17.53.245:27000
net:
# 设置mongod监听端口
port: 27017
bindIpAll: true
#security:
# keyFile: /var/mongo/mpc/mongos/keys/key.file
复制代码
启动mongos
numactl --interleave=all /var/mongo/mongodb/bin/mongos -f /var/mongo/shard_cluster/mongos/etc/mongos.conf
复制代码
配置cluster
/var/mongo/mongodb/bin/mongo --port 27017
# 将shard添加到cluster
sh.addShard("shard1/<IP>:27001,<IP>:27001,<IP>:27001")
# 数据库开启shard
sh.enableSharding("<database>")
# collection开启shard
sh.shardCollection("<database>.<collection>", { _id : "hashed" } )
复制代码
添加系统服务
shard
sudo vi /etc/systemd/system/mongo-shard1.service
[Unit]
Description=mongodb shard1 service
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/var/mongo/mongodb/bin/mongod -f /var/mongo/shard_cluster/shard1/etc/mongod.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/var/mongo/mongodb/bin/mongod --shutdown -f /var/mongo/shard_cluster/shard1/etc/mongod.conf
PrivateTmp=true
RestartSec=1
Restart=always
StartLimitIntervalSec=0
[Install]
WantedBy=multi-user.target
复制代码
config
sudo vi /etc/systemd/system/mongo-config.service
[Unit]
Description=mongodb config service
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/var/mongo/mongodb/bin/mongod -f /var/mongo/shard_cluster/config/etc/mongocfg.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/var/mongo/mongodb/bin/mongod --shutdown -f /var/mongo/shard_cluster/config/etc/mongocfg.conf
PrivateTmp=true
RestartSec=1
StartLimitIntervalSec=0
Restart=always
[Install]
WantedBy=multi-user.target
复制代码
mongos
sudo vi /etc/systemd/system/mongo-mongos.service
[Unit]
Description=mongodb mongos service
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
LimitNOFILE=65536
LimitNOFILESoft=65536
ExecStart=/var/mongo/mongodb/bin/mongos -f /var/mongo/shard_cluster/mongos/etc/mongos.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s HUP $MAINPID
PrivateTmp=true
StartLimitIntervalSec=0
RestartSec=1
[Install]
WantedBy=multi-user.target
复制代码
添加认证
生产建议开启权限认证
- 生成密钥文件
openssl rand -base64 745 > /var/mongo/mpc/shard1/keys/key.file
sudo chmod 600 /var/mongo/mpc/shard1/keys/key.file
复制代码
复制key.file到所有shard、config、mongos,保持集群内一致
- 配置文件中开启认证
security:
keyFile: /var/mongo/mpc/shard1/keys/key.file
authorization: enabled
复制代码
mongos不需要authorization: enabled
3)添加管理员用户
use admin
db.createUser({user: "admin", pwd: "admin", roles: [{role: "root", db: "admin"}]});
复制代码
-
重启所有服务
-
校验认证
use admin
db.auth("admin", "admin");
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END