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

Amo*_*rni 29 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"}
 ]
}
Run Code Online (Sandbox Code Playgroud)

我可以使用连接到所有集 mongo --port <port>

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

小智 34

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

主要主机很棘手,因为您无法使用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
Run Code Online (Sandbox Code Playgroud)

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

use local
db.system.replset.find()
Run Code Online (Sandbox Code Playgroud)

它会提示如下消息:

{ "_id" : "replicaSetName", "version" : 1, "members" : [ { "_id" : 0, "host" : "hostprimary:mongoport" } ] }
Run Code Online (Sandbox Code Playgroud)

那么你将使用以下方法擦除它:

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

它可能会提示:

WriteResult({ "nRemoved" : 1 })
Run Code Online (Sandbox Code Playgroud)

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

  • ```本地没有授权执行命令{delete:\"system.replset \",删除:[{q:{_ id:\"rs0 \"},限制:0.0}],有序:true}```在做删除.从```system.replset```中删除需要什么角色? (6认同)

Ser*_*sev 17

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

  • 如果您不希望它保存其信息,您也可以删除`local` db (4认同)
  • 关于建议删除“本地”数据库的评论:你永远不知道未来的数据库版本会插入到这个数据库中,并且评论可能在它真正有意义并适用的几年后可读,但这可能会随着时间的推移而改变,因此删除“本地”数据库可能会导致服务器损坏。最好是使用指向文档的链接来备份建议,该文档声称可以这样做以归档一个人的目标。 (2认同)

Raj*_*rma 7

在 Ubuntu 机器上

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

use local

db.dropDatabase()
Run Code Online (Sandbox Code Playgroud)
  1. 重启mongo

  • 这里的任何答案都对我有用,除了这个..谢谢.. (3认同)