如何使 Mongodb 副本集为主

How to Make Mongodb replicaset as master

最近由于未知问题,我们托管在 GCP 计算虚拟机上的 MongoDB 已停止,我们无法重新启动它,因为它抛出 MongoDB.service 未找到。所以我们在备份数据库路径中的所有 .wt 文件后重新安装了 MongoDB。重新安装 MongoDB 后,我们将文件复制回来,但我们看不到数据库中的数据。我们尝试了 --repair 标志,但仍然没有用。 有没有什么办法可以让它发挥作用?

另一件事是我们拍摄了崩溃前一天的 VM 快照。只有当我们 运行 方法 rs.slaveOk() 时,我们才能看到 MongoDB 中的数据。我认为我们不能将该数据库用作主数据库。有没有一种方法可以将其用作主数据库。

我对副本集的概念比较陌生,Master/slave欢迎提出任何建议和问题

谢谢

如果您使用 rs.slaveOk() 看到快照中的数据很容易恢复,您可以通过以下步骤将成员重新配置为独立 PRIMARY:

  1. 获取当前配置:

    cfg = rs.conf()
    printjson(cfg)
    
  2. 仅在临时变量 cfg 中设置可用成员(在示例中它是 cfg 中的第一个 id:0 ):

    cfg.members = [cfg.members[0]]
    
  3. 仅使用可用成员重新配置副本集:

    rs.reconfig(cfg, {force : true})
    

    (不要忘记添加 {force:true} 选项,因为这是从 SECONDARY 重新配置的唯一方法)

  4. 如果该成员都很好,并且成功地选举为主要,则可以添加其他新成员,并使用rs.add()...