1

プライマリ ノードが削除された後、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 サービスを停止すると、エラーが再び発生します。リストの最初のサーバーのサービスを停止しない限り、すべて問題ないようです。

4

0 に答える 0