跳到主要内容

副本集

服务器IP主机角色
192.168.10.4MongoDB Replica Set Node01
192.168.10.5MongoDB Replica Set Node02
192.168.10.6MongoDB Replica Set Node03

开始部署​

MongoDB Replica Set Node01​

  1. 下载 mongodb 安装包

    wget https://pdpublic.mingdao.com/private-deployment/offline/common/mongodb-linux-x86_64-3.4.24.tgz
  2. 解压至安装目录

    tar -zxvf mongodb-linux-x86_64-3.4.24.tgz
    mv mongodb-linux-x86_64-3.4.24 /usr/local/mongodb
  3. 创建 mongodb 用户

    useradd -M -s /sbin/nologin mongodb
  4. 创建数据、日志目录并授予权限

    mkdir -p /data/mongodb/ /data/logs/mongodb
    echo '1/3GWm7LjfCX/K2NOhv0evgBWan+KNX' > /data/mongodb/keyfile
    chmod 400 /data/mongodb/keyfile
    chown -R mongodb:mongodb /usr/local/mongodb/ /data/mongodb/ /data/logs/mongodb
  5. 关闭透明大页 (THP)

    MongoDB 在启用 THP 时可能出现性能下降和内存碎片问题,建议在启动 MongoDB 前通过 systemd 服务将其关闭

    cat > /etc/systemd/system/disable-thp.service <<\EOF
    [Unit]
    Description=Disable Transparent Huge Pages (THP)
    DefaultDependencies=no
    After=sysinit.target local-fs.target
    Before=mongodb.service
    [Service]
    Type=oneshot
    ExecStart=/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.target
    EOF

    systemctl daemon-reload
    systemctl enable disable-thp
    systemctl start disable-thp
  6. 配置 systemd 管理文件

    cat > /etc/systemd/system/mongodb.service <<EOF
    [Unit]
    Description=MongoDB
    After=network-online.target
    Wants=network-online.target
    [Service]
    User=mongodb
    Group=mongodb
    LimitNOFILE=1000000
    LimitNPROC=1000000
    LimitMEMLOCK=infinity
    ExecStart=/usr/local/mongodb/bin/mongod --logpath /data/logs/mongodb/mongodb.log --dbpath /data/mongodb --auth --keyFile /data/mongodb/keyfile --port 27017 --replSet local-mongodb-one
    ExecStop=/usr/bin/kill \$MAINPID
    Restart=on-failure
    RestartSec=5
    TimeoutStopSec=300
    [Install]
    WantedBy=multi-user.target
    EOF
  7. 加入开机自启动

    # 安装后还没创建用户,所以先不用 systemctl start mongodb 启动服务
    systemctl daemon-reload
    systemctl enable mongodb

MongoDB Replica Set Node02​

  1. 下载 mongodb 安装包

    wget https://pdpublic.mingdao.com/private-deployment/offline/common/mongodb-linux-x86_64-3.4.24.tgz
  2. 解压至安装目录

    tar -zxvf mongodb-linux-x86_64-3.4.24.tgz
    mv mongodb-linux-x86_64-3.4.24 /usr/local/mongodb
  3. 创建 mongodb 用户

    useradd -M -s /sbin/nologin mongodb
  4. 创建数据、日志目录并授予权限

    mkdir -p /data/mongodb/ /data/logs/mongodb
    echo '1/3GWm7LjfCX/K2NOhv0evgBWan+KNX' > /data/mongodb/keyfile
    chmod 400 /data/mongodb/keyfile
    chown -R mongodb:mongodb /usr/local/mongodb/ /data/mongodb/ /data/logs/mongodb
  5. 关闭透明大页 (THP)

    MongoDB 在启用 THP 时可能出现性能下降和内存碎片问题,建议在启动 MongoDB 前通过 systemd 服务将其关闭

    cat > /etc/systemd/system/disable-thp.service <<\EOF
    [Unit]
    Description=Disable Transparent Huge Pages (THP)
    DefaultDependencies=no
    After=sysinit.target local-fs.target
    Before=mongodb.service
    [Service]
    Type=oneshot
    ExecStart=/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.target
    EOF

    systemctl daemon-reload
    systemctl enable disable-thp
    systemctl start disable-thp
  6. 配置 systemd 管理文件

    cat > /etc/systemd/system/mongodb.service <<EOF
    [Unit]
    Description=MongoDB
    After=network-online.target
    Wants=network-online.target
    [Service]
    User=mongodb
    Group=mongodb
    LimitNOFILE=1000000
    LimitNPROC=1000000
    LimitMEMLOCK=infinity
    ExecStart=/usr/local/mongodb/bin/mongod --logpath /data/logs/mongodb/mongodb.log --dbpath /data/mongodb --auth --keyFile /data/mongodb/keyfile --port 27017 --replSet local-mongodb-one
    ExecStop=/usr/bin/kill \$MAINPID
    Restart=on-failure
    RestartSec=5
    TimeoutStopSec=300
    [Install]
    WantedBy=multi-user.target
    EOF
  7. 加入开机自启动

    # 安装后还没创建用户,所以先不用 systemctl start mongodb 启动服务
    systemctl daemon-reload
    systemctl enable mongodb

MongoDB Replica Set Node03​

  1. 下载 mongodb 安装包

    wget https://pdpublic.mingdao.com/private-deployment/offline/common/mongodb-linux-x86_64-3.4.24.tgz
  2. 解压至安装目录

    tar -zxvf mongodb-linux-x86_64-3.4.24.tgz
    mv mongodb-linux-x86_64-3.4.24 /usr/local/mongodb
  3. 创建 mongodb 用户

    useradd -M -s /sbin/nologin mongodb
  4. 创建数据、日志目录并授予权限

    mkdir -p /data/mongodb/ /data/logs/mongodb
    echo '1/3GWm7LjfCX/K2NOhv0evgBWan+KNX' > /data/mongodb/keyfile
    chmod 400 /data/mongodb/keyfile
    chown -R mongodb:mongodb /usr/local/mongodb/ /data/mongodb/ /data/logs/mongodb
  5. 关闭透明大页 (THP)

    MongoDB 在启用 THP 时可能出现性能下降和内存碎片问题,建议在启动 MongoDB 前通过 systemd 服务将其关闭

    cat > /etc/systemd/system/disable-thp.service <<\EOF
    [Unit]
    Description=Disable Transparent Huge Pages (THP)
    DefaultDependencies=no
    After=sysinit.target local-fs.target
    Before=mongodb.service
    [Service]
    Type=oneshot
    ExecStart=/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.target
    EOF

    systemctl daemon-reload
    systemctl enable disable-thp
    systemctl start disable-thp
  6. 配置 systemd 管理文件

    cat > /etc/systemd/system/mongodb.service <<EOF
    [Unit]
    Description=MongoDB
    After=network-online.target
    Wants=network-online.target
    [Service]
    User=mongodb
    Group=mongodb
    LimitNOFILE=1000000
    LimitNPROC=1000000
    LimitMEMLOCK=infinity
    ExecStart=/usr/local/mongodb/bin/mongod --logpath /data/logs/mongodb/mongodb.log --dbpath /data/mongodb --auth --keyFile /data/mongodb/keyfile --port 27017 --replSet local-mongodb-one
    ExecStop=/usr/bin/kill \$MAINPID
    Restart=on-failure
    RestartSec=5
    TimeoutStopSec=300
    [Install]
    WantedBy=multi-user.target
    EOF
  7. 加入开机自启动

    # 安装后还没创建用户,所以先不用 systemctl start mongodb 启动服务
    systemctl daemon-reload
    systemctl enable mongodb

创建数据库用户​

在 MongoDB Replica Set Node01 节点上操作

  1. 临时启动一个未开启连接认证的 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
  2. 登录 MongoDB

    在系统终端执行:

    /usr/local/mongodb/bin/mongo --host 127.0.0.1 --port 27017

    后续创建用户的语句在 mongo 中执行。

  3. 创建管理员用户

    db.getSiblingDB("admin").createUser({
    user: "root",
    pwd: "123456",
    roles: [{role: "root", db: "admin"}]
    });
    • 命令中指定的 mongodb admin 库权限 root 用户密码为 123456 ,实际部署必须修改为强口令
  4. 创建业务用户

    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 ,实际部署必须修改为强口令
    • 若密码中包含特殊字符,仅允许 - 或 _,禁止使用 @ ! # & 等字符,以避免兼容性问题
  5. 退出 mongo

    exit();
  6. 关闭临时启动的 MongoDB

    回到系统终端执行:

    kill $(pgrep -f 'mongod')

启动 MongoDB​

三台部署 mongodb 的服务器上操作

systemctl start mongodb

配置副本集​

在 MongoDB Replica Set Node01 节点上操作

  1. 登录 mongodb

    /usr/local/mongodb/bin/mongo -u root -p 123456 --authenticationDatabase admin
  2. 配置副本集

    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 地址修改为实际的服务器地址。
  3. 确认副本集状态

    rs.status()

    # 输出结果中,正常为一个节点 PRIMARY,两个 SECONDARY 状态