バックグラウンド
mongoDB 本番クラスター (シャーディングされていない) 3 つのホスト。それらはレプリカ セット rs0 に属します
- H1 - プライマリ
- H2 - セカンダリ
- H3 - セカンダリ
pymongoを使用してpythonスクリプトを作成しようとしています。これは運用クラスターであるため、プライマリに負担をかけず、通常のアクティビティのために解放しておくために、スクリプトでH3 セカンダリ レプリカ セットからのみ読み取りを行う必要があります。データは、2000 ドキュメントのバッチで「デバイス」と呼ばれるコレクションから取得されます。これにより、読み取り操作のオーバーヘッドがさらに削減されます。
関連コード
client = MongoClient('mongodb://H3-hostname:27017/', replicaset='rs0', readPreference='secondary')
.
.
.
.
.
devices = devices_collection.find({"status" : "ACTIVE"},{"key" : 1, "username" : 1}, sort = [("key", pymongo.ASCENDING)]).batch_size(2000)
また、以下のようにクラスター内のすべてのホストに言及することにより、少し異なる方法でクライアントを作成しようとしました
client = MongoClient('mongodb://H1-Hostname:27017, H2-Hostname:27017, H3-hostname:27017/?replicaset=rs0', readPreference='secondary')
問題
私の理解によると、上記のクライアントはセカンダリ レプリカ セットからのみ読み取ります。しかし、スクリプトを実行してクラウド マネージャーを見ると、プライマリである H1 は、ページ フォールトが ~15-20 から ~600 に急激に増加していることを示しています。
環境
- Mongo DB 3.0.3 (MMAPv1 ストレージ エンジン)
- パイソン 2.7.9
- ピモンゴ 3.0.3
- OS アマゾン Linux