我有一个带有4个mongod实例的副本集
{
"_id" : "rs0",
"members" : [
{
"_id" : 0,
"host" : "localhost:27031"
},
{
"_id" : 1,
"host" : "localhost:27032"
},
{
"_id" : 2,
"host" : "localhost:27033"
},
{
"_id" : 3,
"host" : "localhost:27034"
}
],
"settings" : {
"replicaSetId" : ObjectId("5cf22332f5b9d21b01b9b6b2")
}
}
我从副本集中删除了2个实例
rs.remove("localhost:27033")
rs.remove("localhost:27034")
现在我的要求是用这两个删除的成员组成一个新的副本集。最好的办法是什么?
连接到已删除的成员
mongo --port 27033
执行
conf = {
"_id" : "rs0",
"members" : [
{
"_id" : 2,
"host" : "localhost:27033"
},
{
"_id" : 3,
"host" : "localhost:27034"
}
],
"settings" : {
"replicaSetId" : ObjectId("5cf22332f5b9d21b01b9b6b2")
}
}
然后
rs.reconfig(conf, {force:true})
结果
被移除的成员组成一个复制集,其中一个成为主要成员,另一个成为次要成员。数据在他们之间被复制。
而且这个副本集似乎与从中删除它们的初始副本集是隔离的。
1) 我不得不使用
. 不确定后果。
"errmsg" : "replSetReconfig should only be run on PRIMARY, but my state is REMOVED; use the \"force\" argument to override",
2) 新的副本集实际上是新的吗?在rs.config()中
这个解决方案好吗?
有没有更好的解决办法?
:我需要将旧副本集的数据(删除时存在的数据)保留在新副本集中。