如何修改副本集配置?

时间:2012-06-08 17:57:09

标签: mongodb

我正在运行一个mongo 2节点集群,并使用此副本集配置。

config = {_id: "repl1", members:[
{_id: 0, host: 'localhost:15000'},
{_id: 1, host: '192.168.2.100:15000'}]
}

我必须将这两个节点都移到新服务器上。我已经复制了从旧服务器到新服务器的所有内容,但是由于第二个节点上的ip更改,我在重新配置副本配置时遇到了问题。

我试过这个。

config = {_id: "repl1", members:[
 {_id: 0, host: 'localhost:15000'},
{_id: 1, host: '192.168.2.200:15000'}]
}
   rs.reconfig(config)  
   {


"startupStatus" : 1,
"errmsg" : "loading local.system.replset config (LOADINGCONFIG)",
"ok" : 0
}

它显示上面的消息,但没有发生变化。

我还尝试更改副本集名称,但指向相同的数据目录。 我收到以下错误:

rs.initiate() 
{
"errmsg" : "local.oplog.rs is not empty on the initiating member. cannot initiate.",
"ok" : 0
}

更改IP但在第二个节点上保留数据的正确步骤是什么,或者我是否需要重新创建/重新同步第二个节点?

4 个答案:

答案 0 :(得分:32)

嗯,我遇到了同样的问题。

我必须删除所有复制和oplog。

use local
db.dropDatabase()

使用新的设置名称

重新启动您的mongo
config = {_id: "repl1", members:[
{_id: 0, host: 'localhost:15000'},
{_id: 1, host: '192.168.2.100:15000'}]
}

rs.initiate(config)

我希望这也适合你

答案 1 :(得分:30)

重新配置副本集时可以使用强制选项:

rs.reconfig(config, {force: true})

请注意,正如Adam在评论中已经建议的那样,您应该至少有3个节点:2个完整节点和1个仲裁器(最低支持配置)或3个完整节点(最低建议配置),以便可以选择主节点。

答案 2 :(得分:3)

我意识到这是一个旧帖子,但我发现在尝试更改副本集中辅助节点使用的端口时,我收到了同样的错误。

在我的情况下,我需要停止我正在更改其配置的辅助服务器,并在应用主服务器上更改的配置之前将其提交到新的地址和端口。

这是在mongo文档中,但是我必须上下调整的顺序是我在第一遍中误读的内容,所以为了清楚起见我在这里重复了一遍:

  1. 关闭正在移动的副本集的辅助成员。
  2. 将该辅助备用于其新地址
  3. 按照上面原始帖子中的详细说明进行配置更改

答案 3 :(得分:0)

您可以使用rs.reconfig选项。首先使用rs.conf()检索当前配置。根据需要修改配置文档,然后将修改后的文档传递给rs.reconfig()

docs中的更多信息。