在OSX上测试mongo复制

时间:2012-11-19 03:11:27

标签: mongodb

在两个不同的终端中,我启动了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连接就好了。

目前尚不清楚我在哪里搞砸了,但我敢打赌这很明显。

3 个答案:

答案 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