32

Consider, I have 4 replicate sets and the config is as follows:

{
 "_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"}
 ]
}

I am able to connect to all sets using mongo --port <port>

There are documents for getting information on Convert a Standalone to a Replica Set, but can anyone tell me how to convert back to standalone from replica set?

4

5 回答 5

41

从副本集中删除所有辅助主机 (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 将处于独立模式而没有警告

于 2015-07-31T11:32:10.713 回答
17

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

于 2013-06-04T09:31:55.800 回答
8

在 Ubuntu 机器上

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

use local

db.dropDatabase()
  1. 重启mongo
于 2018-04-05T05:23:31.257 回答
3

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

  1. 如果所关注的节点是分片中的唯一节点,请按照此处的 MongoDB 文档将块排到其他分片,否则分片数据库将中断,即
    • 确保通过连接到 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")

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

于 2018-04-30T13:40:42.030 回答
0

请按照以下步骤操作:

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

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

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

sudo 服务 mongod 停止

开始 MongoDB 复制 -

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

    sudo service mongod start 开始 MongoDB 复制 -

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

a] rs.initiate()

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

c] rs.add("Secondary-2: 端口号")

d] rs.add({ "_id" : 3, "host" : "Hidden_​​member:port no", "priority" : 0, "hidden" : true })

e] rs.status()

于 2016-03-14T15:04:56.460 回答