私はpymongoのMongoClientクラスを採用して、1つのプライマリと2つのセカンダリの3つのノードを持つレプリカセットに接続しました。コード スニペットは次のとおりです。
c = MongoClient([secondary1_hostname, secondary2_hostname], replicaSet='rs0')
3 つの mongod のログを確認すると、プライマリ ホストへの接続が常に作成されていることがわかりましたが、他の 2 つのセカンダリ ホストはクライアントからの接続要求を受信していないか、すぐに接続が切断されました。クライアントが最初に 1 つのセカンダリに到達し、プライマリ アドレスを取得してから接続をドロップし、プライマリへの長期接続を作成したようです。
ただし、MongoReplicaSetClient クラスを使用する場合は、次のコード シンペットを使用します。
c = MongoReplicaSetClient(secondary1_name, replicaSet='rs0')
mongod のログ ファイルから取得した、各レプリカ セット メンバーに対して作成された 3 つの接続が常に存在します。
では、なぜ MongoClient の動作は常にプライマリへの接続のみを作成するのでしょうか? PyMongo のマニュアルを読みましたが、答えが見つかりませんでした。どんな提案でも大歓迎です。