1. 准备新机器

  • 安装 MongoDB
    在新机器上安装与现有集群相同版本的 MongoDB。

    1
    sudo apt-get install -y mongodb-org
  • 配置网络
    确保新机器能够与现有 MongoDB 集群中的节点互相通信。

2. 加入新节点到复制集

  • 连接到主节点
    在现有复制集群的主节点上连接 MongoDB shell。

    1
    mongo --host <PRIMARY_HOST>:<PRIMARY_PORT>
  • 查看现有复制集状态

    1
    rs.status()

    确保当前复制集运行正常,并记录下复制集的名称。

  • 在新机器上启动 MongoDB

    使用与现有集群一致的配置启动 MongoDB。

    1
    mongod --replSet <replica_set_name> --bind_ip 0.0.0.0 --port 27017 --dbpath /var/lib/mongodb --logpath /var/log/mongodb/mongod.log --fork
  • 将新节点加入到复制集

    回到主节点的 MongoDB shell 中,使用以下命令将新机器加入到复制集。

    1
    rs.add("<NEW_HOST>:<NEW_PORT>")
  • 验证同步状态

    可以使用以下命令查看新节点的同步进度。

    1
    2
    rs.status()
    rs.printReplicationInfo()

    当新节点的 STATESECONDARY 并且 lag 值接近 0 时,表示同步已完成。

3. 迁移数据并切换角色

  • 将新节点提升为主节点(可选)

    如果你打算将新机器设置为主节点,可以通过调整优先级实现。

    1
    2
    3
    cfg = rs.conf()
    cfg.members[<NEW_NODE_INDEX>].priority = 2
    rs.reconfig(cfg)

    使用以下命令强制选举新节点为主节点:

    1
    rs.stepDown()

    在主节点切换后,你可以再次检查状态:

    1
    rs.status()
  • 移除旧节点(可选)

    如果迁移成功并希望移除旧机器,可以执行以下命令:

    1
    rs.remove("<OLD_HOST>:<OLD_PORT>")

4. 更新应用配置

  • 更新连接字符串

    修改应用程序的 MongoDB 连接字符串,使其指向新的集群配置。

    1
    mongodb://<NEW_HOST>:<NEW_PORT>,<SECONDARY_HOST>:<SECONDARY_PORT>/?replicaSet=<replica_set_name>

5. 测试

  • 读写测试

    使用 MongoDB shell 或应用程序进行一些基本的读写操作,确保迁移后的集群正常工作。

6. 清理旧节点

  • 关闭旧节点

    在确认新集群稳定后,可以停止并移除旧节点的 MongoDB 实例。

    1
    2
    sudo service mongod stop
    sudo rm -rf /var/lib/mongodb/*