【问题标题】:How to convert a MongoDB replica set to a stand alone server如何将 MongoDB 副本集转换为独立服务器
【发布时间】:2013-06-04 09:30:24
【问题描述】:

考虑一下,我有 4 个复制集,配置如下:

{
 "_id": "rs_0",
 "version": 5,
 "members" : [
  {"_id": 1, "host": "127.0.0.1:27001"},
  {"_id": 2, "host": "127.0.0.1:27002"},
  {"_id": 3, "host": "127.0.0.1:27003"},
  {"_id": 4, "host": "127.0.0.1:27004"}
 ]
}

我可以使用 mongo --port <port>

有一些文档可以获取关于Convert a Standalone to a Replica Set 的信息,但是谁能告诉我如何从副本集转换回独立的?

【问题讨论】:

    标签: mongodb replicaset


    【解决方案1】:

    从副本集中删除所有辅助主机 (rs.remove('host:port')),重新启动不带 replSet 参数的 mongo 守护程序(编辑 /etc/mongo.conf),辅助主机再次以独立模式启动。

    Primary 主机是一个棘手的问题,因为您无法使用 rs.remove 从副本集中删除它。 一旦副本集中只有主节点,您应该退出 mongo shell 并停止 mongo。然后编辑 /etc/mongo.conf 并删除 replSet 参数并再次启动 mongo。 启动 mongo 后,您已经处于独立模式,但 mongo shell 会提示如下消息:

    2015-07-31T12:02:51.112+0100 [initandlisten] ** 警告:mongod 在没有 --replSet 的情况下启动,但 local.system.replset 中存在 1 个文档

    要删除警告,您可以执行 2 个步骤: 1)删除本地数据库并重新启动mongo:

    use local
    db.dropDatabase();
    
    /etc/init.d/mongod restart
    

    2)或者如果你不想这么激进,你可以这样做:

    use local
    db.system.replset.find()
    

    它会提示如下消息:

    { "_id" : "replicaSetName", "version" : 1, "members" : [ { "_id" : 0, "host" : "hostprimary:mongoport" } ] }
    

    然后您将使用以下方法擦除它:

    db.system.replset.remove({ "_id" : "replicaSetName", "version" : 1, "members" : [ { "_id" : 0, "host" : "hostprimary:mongoport" } ] })
    

    它可能会提示:

    WriteResult({ "nRemoved" : 1 })
    

    现在,您可以重新启动 mongo,警告应该消失了,您的 mongo 将处于独立模式而不会出现警告

    【讨论】:

    • 我不得不运行rs.initiate() 再次重新创建复制集群并使节点成为PRIMARY。谢谢!
    • not authorized on local to execute command { delete: \"system.replset\", deletes: [ { q: { _id: \"rs0\" }, limit: 0.0 } ], ordered: true } 进行删除。需要什么角色才能从system.replset 中删除?
    • 在 MongoDB 4.0 中,您似乎无法删除 replset.* 数据库中的 replset.* 集合。我不得不放弃local db
    【解决方案2】:

    在 Ubuntu 机器上

    1. 停止你的 mongo 服务器
    2. 打开 /etc/mongod.conf
    3. 注释复制和 replSetName 行
    #replication:
       #replSetName: rs0
    
    1. 启动您的 mongo 服务器并转到 mongo shell
    2. 删除本地数据库

    use local
    
    db.dropDatabase()
    
    1. 重启mongo

    【讨论】:

    • 这里的任何答案都对我有用,除了这个......谢谢......
    • 这不仅可以用于将 mongodb 副本集转换回独立集,反之亦然,也可以将独立集重新启动为副本集。
    【解决方案3】:

    只需从副本集 (rs.remove('host:port')) 中删除主机,重新启动它而不使用 replSet 参数,它就会再次独立。

    【讨论】:

    • 如果您不希望它保留其信息,您也可以删除local db
    • 不工作:``` bippo:PRIMARY> rs.remove('rudi.dev:27017'); {“errmsg”:“异常:在新的 replset 配置中找不到自己”,“code”:13433,“ok”:0 } bippo:PRIMARY> rs.config(){“_id”:“bippo”,“版本”:1,“成员”:[{“_id”:0,“主机”:“rudi.dev:27017”}]}```
    • 写一个完整的文档将ReplicaSet转换为单服务器tecnicume
    • 关于建议删除 local 数据库的评论:您永远不知道未来的数据库版本将插入到该数据库中,并且该评论可能在几年后才真正有意义并适用,但这可能会随着时间的推移而改变,因此删除local db 可能会导致服务器损坏。最好的方法是使用文档链接备份建议,该链接声称可以这样做以存档自己的目标。
    【解决方案4】:

    MongoDB Documentation 建议对副本集成员执行以下维护,这会将副本集成员带入独立模式以进行进一步操作。只需稍加修改即可独立制作:

    1. 如果关注的节点是分片中的唯一节点,请按照MongoDB documentation here 将块排到其他分片,否则分片数据库将中断,即
      • 确保通过连接 mongos 启用平衡器并运行 sh.startBalancer(timeout, interval)
      • 对于关注的分片,转到管理数据库和db.adminCommand( { removeShard: "mongodb0" } )
      • 重复上述 removeShard 命令检查排空状态,等待排空完成
    2. 如果相关节点是主节点,请执行rs.stepDown(300)
    3. 通过运行db.shutdownServer() 停止节点
    4. 通过以下方式更改 yaml 配置:
      • 注释掉replication.replSetName(命令行中的--replSetName)
      • 注释掉分片或配置服务器的 sharding.clusterRole(命令行中的 --shardsvc 和 --configsvr)
      • 注释掉 net.port,然后将其更改为不同的端口(命令行中的 --port)
    5. 启动 mongod 实例
    6. 如果更改是永久性的,请转到其他 mongod 实例并运行 rs.remove("host:port")

    在此之后,相关节点应启动并以独立模式运行。

    【讨论】:

      【解决方案5】:

      按照以下步骤:

      1. 转到辅助服务器上的 mongo shell

      2. 使用以下命令停止辅助服务器: 使用管理员 db.shutdownServer()

      3. 转到辅助服务器上的 Linux shell- 并键入以下命令:

      sudo service mongod 停止

      开始 MongoDB 复制 -

      • 转到 Linux shell - 在辅助服务器上并输入以下命令:

        sudo 服务 mongod 启动 开始 MongoDB 复制 -

      • 转到主要并键入以下命令以开始复制:

      a] rs.initiate()

      b] rs.add("Secondar -1:port no")

      c] rs.add("Secondary-2:port no")

      d] rs.add({ "_id" : 3, "host" : "Hidden_​​member:port no", "priority" : 0, “隐藏”:真 })

      e] rs.status()

      【讨论】:

      • AFAIK 您的主服务器不会成为独立服务器。它将成为仅包含一个成员的副本集的主要成员。
      猜你喜欢
      • 2013-07-06
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 2017-01-31
      • 2021-03-08
      • 2019-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多