前言

  • 有一台单实例 MongoDB 服务器已经运行半年了,需要将其扩展为副本集
  • 3 台服务器的操作系统均为 Ubuntu 20.04
  • 3 台服务器的 MongoDB 版本均为 4.4
  • 扩展示意图
    image.png

操作步骤

  • 备份 mongo0 上的数据
  • 修改配置文件 /etc/mongod.conf,官方文档: https://docs.mongodb.com/v4.4...

    # 增加或修改
    security:
    authorization: enabled
    keyFile: /data/mongo/security/rs0.key
    
    replication:
     replSetName: rs0
  • 创建目录,并修改所有者

    sudo mkdir /data/mongo/security
    sudo chown -R mongodb:mongodb /data/mongo/security/
  • 生成密钥文件,分发到各机器。官方文档:https://docs.mongodb.com/v4.4...

    openssl rand -base64 756 > /data/mongo/security/rs0.key
    sudo chown mongodb:mongodb /data/mongo/security/rs0.key
    sudo chmod 400 /data/mongo/security/rs0.key
  • 重启 MongoDB 服务

    sudo systemctl restart mongod.service
  • 配置 /etc/hosts 文件

    # 添加或修改
    192.168.31.20 mongo0
    192.168.31.34 mongo1
    192.168.31.35 mongo2
  • 登录 mongo0 初始化副本集节点

    mongo mongodb://user:password@192.168.31.20:27017/?authSource=admin
    rs.initiate({
      _id: "rs0",
      members: [{
          _id: 0,
          priority: 9,     // 0-1000,值越大优先级约高
          host: "mongo0:27017"
      }, {
          _id: 1,
          priority: 7,
          host: "mongo1:27017"
      }, {
          _id: 2,
          priority: 7,
          host: "mongo2:27017"
      }]
    })
  • 查看副本集状态

    rs0:PRIMARY> rs.status()
  • 查看从节点数据同步状态

    rs0:PRIMARY> rs.printSecondaryReplicationInfo()
    source: mongo1:27017
      syncedTo: Thu Jan 01 1970 08:00:00 GMT+0800 (CST)
      1615602247 secs (448778.4 hrs) behind the primary 
    source: mongo2:27017
      syncedTo: Thu Jan 01 1970 08:00:00 GMT+0800 (CST)
      1615602247 secs (448778.4 hrs) behind the primary
  • 修改优先级

    rs0:PRIMARY> conf = rs.conf()
    rs0:PRIMARY> conf.members[1].priority = 11
    rs0:PRIMARY> conf.members[2].priority = 11
    rs0:PRIMARY> rs.reconfig(conf)
  • 如果数据量大,同步时间过长,可以考虑拷贝文件的 resync 方式来进行全量同步(initial sync)。

MongoDB 副本集的 10 种状态

本文出自 qbit snap

qbit
268 声望279 粉丝