3

何をしても、Ruby の Mongo ドライバーをレプリカ セットに接続できないようです。この件に関するすべてのチケットとSOの質問を掘り下げ、構文のあらゆる組み合わせを試しました。ただし、最終的には、次のようにRailsコンソールでドライバーAPIを使用しようとするだけになりました。

Mongo::ReplSetConnection.new(['db1.yada.to:27017', 'db2.yada.to:27017'], :read => :primary).db("yada_production")

しかし、常に何を吐き出しても、即座に:

Mongo::ConnectionFailure: Failed to connect to primary node.

db サーバーにログインしてそこから mongo にアクセスすると、db1 が PRIMARY> で、db2 が SECONDARY> であることがわかります。

さらに、ポート 27017 でアプリケーション サーバーから db サーバーに telnet で接続できます。Connection.new を使用して接続を単一のサーバーに戻すと、問題なく機能します。

私は気が狂ってしまいます。私はもともと Mongo ruby​​ driver 1.4 + Rails 3.1 + Mongoid 2.3 + MongoDB 2.0.6 を使用していましたが、同じ問題で 1.6.2 + Rails 3.2 + 2.4.12 + 2.0.6 にアップグレードされました。

私はもともと認証でそれを使用していましたが、物事を簡素化するために認証をオフにしました。

これは完全に壊れていますか?他の人も同様の問題を抱えているようですが、「解決策」はどれも私にとってはうまくいきません。他にアイデアを持っている人はいますか?

4

1 に答える 1

4

私は自分の問題を理解しました。私のmongoレプリカセットは次のようになります。

PRIMARY> rs.status()
{
"set" : "yada",
"date" : ISODate("2012-07-30T06:30:23Z"),
"myState" : 1,
"members" : [
    {
        "_id" : 0,
        "name" : "YADAdb1:27017",
        "health" : 1,
        "state" : 1,
        "stateStr" : "PRIMARY",
        "optime" : {
            "t" : 1343627448000,
            "i" : 2
        },
        "optimeDate" : ISODate("2012-07-30T05:50:48Z"),
        "self" : true
    },
    {
        "_id" : 1,
        "name" : "db2.yada.to:27017",
        "health" : 1,
        "state" : 2,
        "stateStr" : "SECONDARY",
        "uptime" : 16022,
        "optime" : {
            "t" : 1343627448000,
            "i" : 2
        },
        "optimeDate" : ISODate("2012-07-30T05:50:48Z"),
        "lastHeartbeat" : ISODate("2012-07-30T06:30:22Z"),
        "pingMs" : 0
    }
],
"ok" : 1
}

db1のFQDNがdb1.yada.comであっても、ノードはローカルホスト名で初期化されることに注意してください。rs.status()で指定された正確な名前を使用する必要があるようです。使用しないと、接続が失敗します。つまり、DNSで解決できない場合は、接続サーバーの/ etc/hostsに追加する必要があります。私がそれをしたら、接続はうまくいきました。

私が読んだモンゴイドバグでこの効果に対する反応がありましたが、ダイアログでそれらが何を意味しているのか完全には理解していませんでした。サーバーのパブリックDNSエントリがなかったため、/ etc/hostsを変更するだけでよいと思いました。これで、Mongoでの正確な名前が必須であることは理にかなっています。

于 2012-07-30T06:35:44.113 に答える