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

考虑一下,我有 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 信息的文档,但是谁能告诉我如何从副本集转换回独立?

最佳答案

从副本集中删除所有辅助主机 (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] ** WARNING: mongod started without --replSet yet 1 documents are present in local.system.replset

要删除警告,您可以执行 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 将处于独立模式而不会出现警告

https://stackoverflow.com/questions/16914281/

相关文章:

mongodb - Meteor.Collection.ObjectID() 与 MongoDB O

javascript - 使用 IntelliJ IDEA for JavaScript 的最佳插件

database - findOneAndUpdate 和 update 的 Mongoose 区别

node.js - 在MongoDB中更新和返回文档

node.js - 在 Mongoose 中创建外键关系

mongodb - 如何使用 docker-compose 在 mongodb 中创建用户

mongodb - MongoDb 2.2、2.4 和 2.6 中的 Map-Reduce 性能

MongoDB 性能 - 拥有多个数据库

mongodb - 是否可以从集合中 mongodump 转储最后的 "x"记录?

.net - MongoDB事务?