1

シャードされたレプリカ セットを持つシャード クラスターがあり、アプリケーション レイヤーは mongos と通信しています。プライマリ サーバーがダウンすると、php アプリケーションがエラーをスローします。これは、次のようなことを行ってドライバーから
有効にしていないためです。setSlaveOkay

MongoCursor::$slaveOkay = true;

これに関する問題は、db と話しているときはいつでも、このステートメントを追加する必要があることです。

システムレベルでこれを有効にする方法はありますか?

プライマリとセカンダリの両方でやってみrs.slaveok()ましたが、それでもアプリケーション層がエラーをスローしています。

私もdb.getMongo().setSlaveOk()mongosコンソールで試しました

エラーステートメントは次のとおりです。

PHP Fatal error:  Uncaught exception 'MongoCursorException' with message 'dbclient error communicating with server: testserver:10001'
4

1 に答える 1

2

PHPでは、接続、データベース、コレクション、カーソルなど、いくつかのレベルでslaveOKを設定できます。

さまざまな詳細はここにあります:

http://php.net/manual/en/mongo.queries.php

カーソルごとに設定しているため、頻繁に呼び出す必要があります。代わりに、これをデータベースまたはコレクションレベルで設定できます。舞台裏で何が起こっているかという点では、slaveOKは実際には接続ごとに設定されていますが、データベース、コレクション、カーソルなどに設定すると、PHPがそれを管理します。

モンゴまたはシェルの他の場所に設定するだけで、その接続用に設定されます。ログアウトすると、設定されなくなります。

于 2012-09-03T16:50:53.080 に答える