Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将MongoDB副本集转换为独立服务器_Mongodb_Replicaset - Fatal编程技术网

如何将MongoDB副本集转换为独立服务器

如何将MongoDB副本集转换为独立服务器,mongodb,replicaset,Mongodb,Replicaset,考虑一下,我有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--端

考虑一下,我有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--端口


有一些文档可以获取有关的信息,但是有人能告诉我如何从副本集中转换回独立吗?

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

从副本集中删除所有辅助主机(rs.remove('host:port')),在不使用replSet参数(编辑/etc/mongo.conf)的情况下重新启动mongo deamon,辅助主机再次以独立模式启动

主主机很棘手,因为您无法使用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个文档

要删除警告,可以执行两个步骤: 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将处于独立模式,没有警告

遵循以下步骤:

  • 转到辅助服务器上的mongo shell

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

  • 转到辅助服务器上的Linux shell,然后键入以下命令:

  • sudo服务mongod站

    启动MongoDB复制-

    • 转到辅助服务器上的Linux shell,然后键入以下命令:

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

    • 转到“主”并键入以下命令以启动复制:

    a] rs.启动()

    b] rs.add(“Secondar-1:端口号”)

    c] rs.add(“二级-2:端口号”)

    d] rs.add({“\u id”:3,“主机”:“隐藏的\u成员:端口号”,“优先级”:0, “隐藏”:true})

    e] Ubuntu机器上的rs.status()

  • 停止mongo服务器
  • 打开/etc/mongod.conf
  • 注释复制和replSetName行
  • 启动mongo服务器并转到mongo shell
  • 删除本地数据库
  • 重启mongo
  • 建议在副本集成员上执行以下维护,这将使副本集成员进入独立模式以进行进一步操作。只需稍加修改即可使其独立:

  • 如果所关注的节点是碎片中的唯一节点,请根据将块排放到其他碎片,否则碎片数据库将中断,即。
    • 确保连接到mongos并运行
      sh.startBalancer(超时,间隔)
    • 对于关注的碎片,请转到admin数据库和
      db.adminCommand({removeShard:“mongodb0”})
    • 重复上述removeShard命令检查排放状态,等待排放完成
  • 如果关注的节点是主节点,则执行
    rs.steppdown(300)
  • 通过运行
    db.shutdownServer()
  • 通过以下方式更改yaml配置:
    • 注释掉replication.replSetName(-replSetName在命令行中)
    • 注释掉shard或配置服务器的sharding.clusterRole(-shardsvc和-configsvr在命令行中)
    • 注释掉net.port,然后将其更改为其他端口(命令行中的-port)
  • 启动mongod实例
  • 如果更改是永久性的,请转到其他mongod实例并运行
    rs.remove(“主机:端口”)

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

    如果您不想让它保存其信息,还可以删除
    local
    dbnotworking:``bippo:PRIMARY>rs.remove('rudi.dev:27017');{“errmsg”:“异常:在新的replset配置中找不到self”,“代码”:13433,“确定”:0}bippo:PRIMARY>rs.config(){“\u id”:“bippo”,“版本”:1,“成员”:[{“\u id”:0,“主机”:“rudi.dev:27017”}]``为convert ReplicaSet to single server编写一份完整的文档。关于建议删除
    本地
    数据库的注释:您永远不知道未来的数据库版本将插入到该数据库中,并且注释可能在实际有意义和适用的几年后可读,但这可能会随着时间的推移而改变,因此,删除
    local
    db可能会导致服务器损坏。最好的方法是使用指向文档的链接来备份该建议,该文档声称可以这样做以归档个人目标。我必须运行
    rs.initiate()
    ,以重新创建复制群集并使节点成为主节点。谢谢<代码>未授权在本地执行命令{delete:\“system.replset\”,删除:[{q:{u id:\“rs0\”},限制:0.0}],命令:true}执行删除操作。需要什么角色才能从
    系统.replset中删除?在MongoDB 4.0中,似乎无法删除
    本地
    数据库中的
    replset.
    集合。我不得不放弃
    local
    dbAFAIK,因为您的主服务器将不会成为standalon服务器。它将成为仅包含单个成员的副本集的主要成员。这里的任何答案都适用于我,除了这个。。谢谢。这不仅可以用于转换
    #replication:
       #replSetName: rs0
    
    use local
    
    db.dropDatabase()