5

2 つの異なるターミナルで、次のように 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

(data サブディレクトリ 1 と 2 は既に作成されています)。

3 番目のウィンドウに入り、mongod インスタンスの 1 つに対して mongo シェルを実行します。

mongo --port 27001

シェルでは、構成を次のようにセットアップします

cfg = { _id: "test", members: [ {_id:0, host: "localhost:27001"}, {_id:1, host:"localhost:27002"} ] }

次に実行します:

use admin
rs.initiate(cfg)

シェルからの応答は次のとおりです。

{
"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 シェルは問題なく接続します。

私がどこを台無しにしているかは明らかではありませんが、それは明らかだと思います。

4

3 に答える 3

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)

macbookpro.local に ping を実行すると、返された IP アドレスは 192.168.41.1 でした。192.168.41.1 <> 127.0.0.1 なので、mongod は応答を拒否していました。この行を構成から削除すると、レプリケーションを正常にセットアップできます。

おい。私はとてもばかです。これを何時間も見て、ネットワークに接続したときのマシン名は 127.0.0.1 だと考え続けました。これをあなたへの教訓にしましょう---年をとらないでください!

于 2012-11-19T22:42:46.680 に答える
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"
        }
    ]
}

あなたは行ってもいいはずです:)

于 2012-11-19T07:00:32.267 に答える
3

同じ問題がありました。どういうわけか、mongo は localhost をマシンの名前 macbookpro.local として解決します。

次の行を /etc/hosts ファイルに追加するだけです:

127.0.0.1           macbookpro.local
于 2013-03-05T01:32:18.900 に答える