副本集
| 服务器IP | 主机角色 |
|---|---|
| 192.168.10.4 | MongoDB Replica Set Node01 |
| 192.168.10.5 | MongoDB Replica Set Node02 |
| 192.168.10.6 | MongoDB Replica Set Node03 |
开始部署
MongoDB Replica Set Node01
-
下载 mongodb 安装包
- 服务器支持访问互联网
- 服务器不支持访问互联网
wget https://pdpublic.mingdao.com/private-deployment/offline/common/mongodb-linux-x86_64-3.4.24.tgz# mongodb 安装包文件下载链接,下载完成后上传到部署服务器https://pdpublic.mingdao.com/private-deployment/offline/common/mongodb-linux-x86_64-3.4.24.tgz -
解压至安装目录
tar -zxvf mongodb-linux-x86_64-3.4.24.tgzmv mongodb-linux-x86_64-3.4.24 /usr/local/mongodb -
创建 mongodb 用户
useradd -M -s /sbin/nologin mongodb -
创建数据、日志目录并授予权限
mkdir -p /data/mongodb/ /data/logs/mongodbecho '1/3GWm7LjfCX/K2NOhv0evgBWan+KNX' > /data/mongodb/keyfilechmod 400 /data/mongodb/keyfilechown -R mongodb:mongodb /usr/local/mongodb/ /data/mongodb/ /data/logs/mongodb -
关闭透明大页 (THP)
MongoDB 在启用 THP 时可能出现性能下降和内存碎片问题,建议在启动 MongoDB 前通过 systemd 服务将其关闭
cat > /etc/systemd/system/disable-thp.service <<\EOF[Unit]Description=Disable Transparent Huge Pages (THP)DefaultDependencies=noAfter=sysinit.target local-fs.targetBefore=mongodb.service[Service]Type=oneshotExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'ExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/defrag'[Install]WantedBy=basic.targetEOFsystemctl daemon-reloadsystemctl enable disable-thpsystemctl start disable-thp -
配置 systemd 管理文件
cat > /etc/systemd/system/mongodb.service <<EOF[Unit]Description=MongoDBAfter=network-online.targetWants=network-online.target[Service]User=mongodbGroup=mongodbLimitNOFILE=1000000LimitNPROC=1000000LimitMEMLOCK=infinityExecStart=/usr/local/mongodb/bin/mongod --logpath /data/logs/mongodb/mongodb.log --dbpath /data/mongodb --auth --keyFile /data/mongodb/keyfile --port 27017 --replSet local-mongodb-oneExecStop=/usr/bin/kill \$MAINPIDRestart=on-failureRestartSec=5TimeoutStopSec=300[Install]WantedBy=multi-user.targetEOF -
加入开机自启动
# 安装后还没创建用户,所以先不用 systemctl start mongodb 启动服务systemctl daemon-reloadsystemctl enable mongodb
MongoDB Replica Set Node02
-
下载 mongodb 安装包
- 服务器支持访问互联网
- 服务器不支持访问互联网
wget https://pdpublic.mingdao.com/private-deployment/offline/common/mongodb-linux-x86_64-3.4.24.tgz# mongodb 安装包文件下载链接,下载完成后上传到部署服务器https://pdpublic.mingdao.com/private-deployment/offline/common/mongodb-linux-x86_64-3.4.24.tgz -
解压至安装目录
tar -zxvf mongodb-linux-x86_64-3.4.24.tgzmv mongodb-linux-x86_64-3.4.24 /usr/local/mongodb -
创建 mongodb 用户
useradd -M -s /sbin/nologin mongodb -
创建数据、日志目录并授予权限
mkdir -p /data/mongodb/ /data/logs/mongodbecho '1/3GWm7LjfCX/K2NOhv0evgBWan+KNX' > /data/mongodb/keyfilechmod 400 /data/mongodb/keyfilechown -R mongodb:mongodb /usr/local/mongodb/ /data/mongodb/ /data/logs/mongodb -
关闭透明大页 (THP)
MongoDB 在启用 THP 时可能出现性能下降和内存碎片问题,建议在启动 MongoDB 前通过 systemd 服务将其关闭
cat > /etc/systemd/system/disable-thp.service <<\EOF[Unit]Description=Disable Transparent Huge Pages (THP)DefaultDependencies=noAfter=sysinit.target local-fs.targetBefore=mongodb.service[Service]Type=oneshotExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'ExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/defrag'[Install]WantedBy=basic.targetEOFsystemctl daemon-reloadsystemctl enable disable-thpsystemctl start disable-thp -
配置 systemd 管理文件
cat > /etc/systemd/system/mongodb.service <<EOF[Unit]Description=MongoDBAfter=network-online.targetWants=network-online.target[Service]User=mongodbGroup=mongodbLimitNOFILE=1000000LimitNPROC=1000000LimitMEMLOCK=infinityExecStart=/usr/local/mongodb/bin/mongod --logpath /data/logs/mongodb/mongodb.log --dbpath /data/mongodb --auth --keyFile /data/mongodb/keyfile --port 27017 --replSet local-mongodb-oneExecStop=/usr/bin/kill \$MAINPIDRestart=on-failureRestartSec=5TimeoutStopSec=300[Install]WantedBy=multi-user.targetEOF -
加入开机自启动
# 安装后还没创建用户,所以先不用 systemctl start mongodb 启动服务systemctl daemon-reloadsystemctl enable mongodb
MongoDB Replica Set Node03
-
下载 mongodb 安装包
- 服务器支持访问互联网
- 服务器不支持访问互联网
wget https://pdpublic.mingdao.com/private-deployment/offline/common/mongodb-linux-x86_64-3.4.24.tgz# mongodb 安装包文件下载链接,下载完成后上传到部署服务器https://pdpublic.mingdao.com/private-deployment/offline/common/mongodb-linux-x86_64-3.4.24.tgz -
解压至安装目录
tar -zxvf mongodb-linux-x86_64-3.4.24.tgzmv mongodb-linux-x86_64-3.4.24 /usr/local/mongodb -
创建 mongodb 用户
useradd -M -s /sbin/nologin mongodb -
创建数据、日志目录并授予权限
mkdir -p /data/mongodb/ /data/logs/mongodbecho '1/3GWm7LjfCX/K2NOhv0evgBWan+KNX' > /data/mongodb/keyfilechmod 400 /data/mongodb/keyfilechown -R mongodb:mongodb /usr/local/mongodb/ /data/mongodb/ /data/logs/mongodb -
关闭透明大页 (THP)
MongoDB 在启用 THP 时可能出现性能下降和内存碎片问题,建议在启动 MongoDB 前通过 systemd 服务将其关闭
cat > /etc/systemd/system/disable-thp.service <<\EOF[Unit]Description=Disable Transparent Huge Pages (THP)DefaultDependencies=noAfter=sysinit.target local-fs.targetBefore=mongodb.service[Service]Type=oneshotExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'ExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/defrag'[Install]WantedBy=basic.targetEOFsystemctl daemon-reloadsystemctl enable disable-thpsystemctl start disable-thp -
配置 systemd 管理文件
cat > /etc/systemd/system/mongodb.service <<EOF[Unit]Description=MongoDBAfter=network-online.targetWants=network-online.target[Service]User=mongodbGroup=mongodbLimitNOFILE=1000000LimitNPROC=1000000LimitMEMLOCK=infinityExecStart=/usr/local/mongodb/bin/mongod --logpath /data/logs/mongodb/mongodb.log --dbpath /data/mongodb --auth --keyFile /data/mongodb/keyfile --port 27017 --replSet local-mongodb-oneExecStop=/usr/bin/kill \$MAINPIDRestart=on-failureRestartSec=5TimeoutStopSec=300[Install]WantedBy=multi-user.targetEOF -
加入开机自启动
# 安装后还没创建用户,所以先不用 systemctl start mongodb 启动服务systemctl daemon-reloadsystemctl enable mongodb
创建数据库用户
在 MongoDB Replica Set Node01 节点上操作
-
临时启动一个未开启连接认证的 mongodb 服务
su -c '/usr/local/mongodb/bin/mongod --fork --logpath /data/logs/mongodb/mongodb.log --dbpath /data/mongodb --noauth --port 27017' -s /bin/bash mongodb -
登录 MongoDB
在系统终端执行:
/usr/local/mongodb/bin/mongo --host 127.0.0.1 --port 27017后续创建用户的语句在 mongo 中执行。
-
创建管理员用户
db.getSiblingDB("admin").createUser({user: "root",pwd: "123456",roles: [{role: "root", db: "admin"}]});- 命令中指定的 mongodb admin 库权限 root 用户密码为
123456,实际部署必须修改为强口令
- 命令中指定的 mongodb admin 库权限 root 用户密码为
-
创建业务用户
var businessUser = "hap";var businessPassword = "123456";var databases = ["MDLicense","ClientLicense","commonbase","MDAlert","mdapproles","mdapprove","mdapps","mdattachment","mdcalendar","mdcategory","MDChatTop","mdcheck","mddossier","mdemail","mdform","MDGroup","mdgroups","MDHistory","mdIdentification","mdinbox","mdkc","mdmap","mdmobileaddress","MDNotification","mdpost","mdreportdata","mdroles","mdsearch","mdservicedata","mdsms","MDSso","mdtag","mdtransfer","MDUser","mdworkflow","mdworksheet","mdworkweixin","mdwsrows","pushlog","taskcenter","mdintegration","mdactionlog","mdworksheetlog","mdworksheetsearch","mddatapipeline","mdwfplugin","mdpayment","mdwfai","mdopenauth","mdaisearch","MDAgentInfra"];for (var i = 0; i < databases.length; i++) {var database = databases[i];db.getSiblingDB(database).createUser({user: businessUser,pwd: businessPassword,roles: [{role: "readWrite", db: database}]});}- 命令中指定的 mongodb 业务库权限 hap 用户密码为
123456,实际部署必须修改为强口令 - 若密码中包含特殊字符,仅允许
-或_,禁止使用@ ! # &等字符,以避免兼容性问题
- 命令中指定的 mongodb 业务库权限 hap 用户密码为
-
退出 mongo
exit(); -
关闭临时启动的 MongoDB
回到系统终端执行:
kill $(pgrep -f 'mongod')
启动 MongoDB
三台部署 mongodb 的服务器上操作
systemctl start mongodb
配置副本集
在 MongoDB Replica Set Node01 节点上操作
-
登录 mongodb
/usr/local/mongodb/bin/mongo -u root -p 123456 --authenticationDatabase admin -
配置副本集
rs.initiate({_id: "local-mongodb-one",members:[ {_id : 1, host : "192.168.10.4:27017"},{_id : 2, host : "192.168.10.5:27017"},{_id : 3, host : "192.168.10.6:27017"} ]})- 执行前,请务必将成员节点中的 IP 地址修改为实际的服务器地址。
-
确认副本集状态
rs.status()# 输出结果中,正常为一个节点 PRIMARY,两个 SECONDARY 状态