10

サーバー 1 のプライマリ + アービター、サーバー 2 のセカンダリ + アービター、サーバー 3 の非表示のセカンダリ (バックアップ ノード) の 5 つのメンバーで構成されるレプリカ セットがあります。この構成は、1 つのサーバーがダウンしたり、接続が一時的に失われたりした場合に機能することを期待しています。

しかし、サーバー 2 (セカンダリ ノードとアービター ノードを備えたサーバー) がダウンしたとき、私は奇妙な問題に遭遇しました。PHP からレプリカ セットへの接続に 1 分以上かかっていました。接続文字列を変更して、ダウンしているサーバー (セカンダリ ノード) を除外しようとしましたが、役に立ちませんでした。

同時に、mongo コンソール経由での接続は問題なく機能しました。プライマリ ノードはプライマリのままでした。PHP エラー ログにはエラーが含まれていませんでした。

役に立った唯一のことは、レプリカ セットからダウンしたサーバー上のノードを削除することでした。

しかし、今は構成のフェイルオーバーが心配です。今気づいたように、セカンダリ ノードとアービター ノードを備えたサーバーがダウンすると、構成全体が適切に機能しなくなります。それを回避する方法はありますか?セカンダリ + アービター サーバーが使用可能かどうかに関係なく、PHP クライアントがプライマリに接続できるようにする必要があります。それを達成する方法は?

mongo PHP クライアント ライブラリのバージョンは 1.6.x、サーバーのバージョンは 3.0 です。

4

2 に答える 2

1

接続文字列がどのように見えるか疑問に思っています。

私の経験では、次のようなものがレプリカ セット構成で機能します。

$m = new MongoClient("mongodb://rs1.example.com:27017,rs2.example.com:27017");

しかし、rs2 がダウンすると、あなたが説明したのと同じような経験をするでしょう。正しい接続文字列形式を使用していることを確認することをお勧めします。

$m = new MongoClient("mongodb://rs1.example.com:27017", array("replicaSet" => "myReplSetName"));

また

$m = new MongoClient("mongodb://rs1.example.com:27017,rs2.example.com:27017/?replicaSet=myReplSetName");

于 2015-05-08T04:14:42.950 に答える