17

我在 mongodb 中配置副本集时犯了一个错误。我认为我做错的是我在两个节点上都做了一个 rs.initialize() ,这让他们在某种程度上感到困惑。我不知道。

现在我想做的就是重新开始,但我找不到取消初始化节点的方法。所以我按照建议删除了 local* db 文件,从而重置了配置。我这样做了,现在没有任何效果。

> rs.initiate()
{
    "info2" : "no configuration explicitly specified -- making one",
    "me" : "0.0.0.0:27017",
    "errmsg" : "couldn't initiate : can't find self in the replset config",
    "ok" : 0
}
> rs.conf()
null

我试图删除并重新安装该软件包(我在 Ubuntu 服务器上执行此操作),这意味着我的 mongodb.conf 消失了,并且我的 init 脚本停止工作。这当然很容易解决。

那么我该如何重新开始呢?

注意:我确实看过这个答案,但由于 rs.conf() 不起作用,这也不起作用。

4

3 回答 3

54

如果您的机器的主机名没有映射回 127.0.0.1,您也会收到此错误。更新您的 /etc/hosts 和/或您的 /etc/hostname,并且没有配置的 rs.initiate() 应该可以工作。

于 2013-05-31T15:26:05.650 回答
26

如果您使用已生成的配置强制重新配置,是否可以解决问题?

您可以在 {{mongo}} shell 中执行类似于以下操作的操作:

> cfg = {
...     "_id" : "rs0",
...     "version" : 1,
...     "members" : [
...         {
...             "_id" : 0,
...             "host" : "0.0.0.0:27017"
...         }
...     ]
... }

>rs.reconfig(cfg, {force:true})

您可能需要调整cfg变量以获得您的主机名和端口名,因为can't find self in new replset config如果 repl 集在配置中找不到它正在运行的节点,错误将返回到 shell。

于 2012-11-29T01:53:46.003 回答
9

如果您只是注释掉这将获得正确bind_ip/etc/mongod.conf结果,以便您可以重新发出rs.initiate()命令来设置或重新配置副本。

于 2014-05-05T18:05:42.403 回答