Centos7 构建MongoDB分片集群

基础环境

  • 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
复制代码

添加认证

生产建议开启权限认证

  1. 生成密钥文件
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,保持集群内一致

  1. 配置文件中开启认证
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"}]});
复制代码
  1. 重启所有服务

  2. 校验认证

use admin
db.auth("admin", "admin");
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享