プライマリ ノードが削除された後、MongoDB レプリカ セットへの PHP 接続が失敗します。
5 つのノードを持つ mongodb レプリカ セットを作成しました。mongo1 がプライマリで、その他はすべてセカンダリです。
これが私の接続コードです:
$dbmongo_name = "myDatabase";
$dbmongo_conn_str = "mongodb://myusername:mypassword@mongo1.mysite.net:27017,mongo2.mysite.net@27017,mongo3.mysite.net@27017,mongo4.mysite.net@27017,mongo5.mysite.net@27017";
$dbmongo_conn_options = array("db" => $dbmongo_name, "replicaSet" => "rs1", "readPreference" => "secondaryPreferred", "connectTimeoutMS" => 5000);
class DB_Mongo {
global $dbmongo_conn_str, $dbmongo_conn_options;
public $connection;
function __construct() {
$this->connection = new MongoClient($dbmongo_conn_str, $dbmongo_conn_options);
}
}
接続文字列の最初のサーバー (今回は mongo1) のサービスを停止するたびに、php ドライバーが接続例外エラーをスローするか、エラーをスローせずに接続の「接続済み」プロパティをスローすることがわかりました。 object は false になります。
php ドライバーがレプリカ セットに正しく接続できなかったようです。
サーバーの位置を入れ替えて、別の実験を試みました。今回の接続文字列は次のとおりです。
$dbmongo_conn_str = "mongodb://myusername:mypassword@mongo3.mysite.net:27017,mongo2.mysite.net@27017,mongo1.mysite.net@27017,mongo4.mysite.net@27017,mongo5.mysite.net@27017";
この場合、mongo1 は依然としてプライマリです。mongo3 サービスを停止すると、エラーが再び発生します。リストの最初のサーバーのサービスを停止しない限り、すべて問題ないようです。