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

时间:2013-06-04 09:30:25

标签: 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 --port <port>

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

5 个答案:

答案 0 :(得分:31)

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

主要主机很棘手,因为您无法使用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将处于独立模式而不会发出警告

答案 1 :(得分:16)

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:1)

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

2)使用以下命令停止辅助服务器:

   use admin
   db.shutdownServer()

执行以下命令后。您的主服务器将自动成为独立服务器。

有关详细信息,请查看以下链接:http://www.tutespace.com/2016/03/stopping-and-starting-mongodb.html

答案 4 :(得分:1)

在Ubuntu机器上

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

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