在两个不同的终端中,我启动了mongod:
mongod --dbpath 1 --port 27001 --smallfiles --oplogSize 50 --logpath log.1 --replSet test
mongod --dbpath 2 --port 27002 --smallfiles --oplogSize 50 --logpath log.2 --replSet test
(已创建数据子目录1和2)。
我进入第三个窗口并对其中一个mongod实例运行mongo shell
mongo --port 27001
在shell中,我将配置设置为
cfg = { _id: "test", members: [ {_id:0, host: "localhost:27001"}, {_id:1, host:"localhost:27002"} ] }
然后运行:
use admin
rs.initiate(cfg)
来自shell的响应是:
{
"startupStatus" : 4,
"info" : "hotest",
"errmsg" : "all members and seeds must be reachable to initiate set",
"ok" : 0
}
例如,端口27001上的日志文件报告:
Sun Nov 18 18:32:56 [rsStart] trying to contact macbookpro.local:27001
Sun Nov 18 18:32:56 [rsStart] couldn't connect to macbookpro.local:27001: couldn't connect to server macbookpro.local:27001
Sun Nov 18 18:32:56 [rsStart] replSet can't get local.system.replset config from self or any seed (yet)
似乎rs.initiate(cfg)无法连接到端口27001上的mongod实例。但是当我在没有--replSet的情况下运行mongod时,mongo shell连接就好了。
目前尚不清楚我在哪里搞砸了,但我敢打赌这很明显。
答案 0 :(得分:11)
发现它!
事实证明,当使用brew在OSX上安装MongoDB时,会在/usr/local/etc/mongo.conf中创建配置文件。在这个文件中有一行:
#仅接受本地连接 bind_ip = 127.0.0.1
好吧,如果你看日志rsStart错误是:
Sun Nov 18 18:32:56 [rsStart] trying to contact macbookpro.local:27001
Sun Nov 18 18:32:56 [rsStart] couldn't connect to macbookpro.local:27001: couldn't connect to server macbookpro.local:27001
Sun Nov 18 18:32:56 [rsStart] replSet can't get local.system.replset config from self or any seed (yet)
如果我ping macbookpro.local,返回的IP地址是192.168.41.1。 192.168.41.1<> 127.0.0.1所以mongod拒绝回应。从配置中删除此行是成功设置复制。
啧。我是个白痴。看了几个小时,并一直认为连接到网络时的机器名是127.0.0.1。让这成为你的一课 - 不要老去!
答案 1 :(得分:3)
确定主机名可能很痛苦,因此不要传递配置对象并尝试计算出主机名应该是什么,只需在第一台主机上执行rs.initiate()
而不添加任何参数。这将创建所需的配置,为您发现正确的值。它将打印出有效的"它创建的配置版本。这是一个样本:
> rs.initiate()
{
"info2" : "no configuration explicitly specified -- making one",
"me" : "adamc-mbp.local:27001",
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}
复制并粘贴" me"字段并使用新的端口号,传递给rs.add()
:
sotest:PRIMARY> rs.add("adamc-mbp.local:27002")
{ "ok" : 1 }
现在看一下你的配置:
sotest:PRIMARY> rs.conf()
{
"_id" : "sotest",
"version" : 2,
"members" : [
{
"_id" : 0,
"host" : "adamc-mbp.local:27001"
},
{
"_id" : 1,
"host" : "adamc-mbp.local:27002"
}
]
}
你应该好好去:))
答案 2 :(得分:3)
我有同样的问题。不知怎的,mongo将localhost解析为你的机器名称macbookpro.local。
只需将此行添加到/ etc / hosts文件中:
127.0.0.1 macbookpro.local