私の Symfony2 アプリは MongoDB レプリカ セット (2 つのフル ノードとアービター) に接続します。フェールオーバーが完了した後 (新しいプライマリが正常に選出された後)、多くの Web 要求でサーバー エラーが発生します。Apache を再起動すると (ただし、他に変更を加える必要はありません)、例外はなくなり、アプリは期待どおりに動作します (新しいプライマリをクエリしますが、問題ありません)。
Apache を再起動する前MongoCursorException
に、メッセージnot master and slaveOk=false
またはcouldn't determine master
. 一貫性がありません。ヒットした Apache ワーカーに依存しているようです。か何か。とにかく、Apache を再起動するとアプリがすぐに修正され、すべてのクエリが正常に成功するようです。
私のレプリカ セットはパフォーマンスではなく冗長性のためのものなので、slaveOk=true は使用しません。
これらのオプションは Mongo コンストラクターに渡されます。
connect => TRUE
replicaSet => foo
私は使用しています:
- PHP 5.3.10
- APC 3.1.7
- モンゴ DB 2.2.1
- Symfony2 バージョン 2.0.18
私のdeps
ファイルから:
- 教義 2.1.7
- doctrine-mongodb 1.0.0-BETA1
- doctrine-mongodb-odm 1.0.0-BETA5
- doctrine-common 2.2.0
- doctrine-dbal 2.1.7
Symfony2 アプリが古くなった MongoDB 接続を再利用しようとしているようです。プライマリのログは、この推測を裏付けています。アプリの Web ページにアクセスしてクエリを作成すると、接続が追加され、Apache を再起動すると、多くの接続が解放されます。
- APC キャッシュを強制的にクリアする必要がありますか?
- フェールオーバー イベント後にすべての Web サーバーを再起動するだけでよいですか? (他の人は何をしているの?)
- で遊ぶ必要があり
mongo.is_master_interval
ますか? - フェイルオーバーを自動的にスムーズにする
retry_query
とretry_connect
思いましたが、そうではないようです。コードに try/catch ブロックを追加する必要がありますか?
関連している:
- Doctrine ODM / MongoDB はクエリを再試行しませんか? (私は新しい
retry_query
とretry_connect
オプションを試しています)
おそらく関連しています: