テスト目的で、slaveDelay=n でスレーブをセットアップすることにより、mongodb クラスターでのレプリケーション ラグをシミュレートしようとしています。結局のところ、これにより魔法のようにスレーブが非表示になるため、私のテストではスレーブにアクセスできません。
mongodbのドキュメントには、「通常、slaveOkay 読み取りに遅延メンバーを使用することは望ましくありません。したがって、slaveDelay を設定すると、hidden:true も設定したかのように、アプリケーションからメンバーが非表示になります。」と記載されています。
私の「非典型的な」ユースケースを構成する方法はありますか? または、タイムラグが異なるさまざまなスレーブからの読み取りをシミュレートするより良い方法はありますか?
TaggedReadPreference を使用してテスト コードを強制的に遅延スレーブに接続しようとしましたが、これは
com.mongodb.MongoException: Could not find any valid secondaries with the supplied tags ('{ "delayed" : "true"}'
どうやら、Java ドライバーはセカンダリを認識できません。「slaveDelay」設定を削除すると、正常に接続されます。
これが私のクラスター構成です。
rs.reconfig({
"_id" : "rs0",
"version" : 4,
"members" : [
{ "_id" : 0,
"host" : "localhost:27017",
"priority" : 0,
slaveDelay: 10,
tags: { delayed: "true" }
},
{ "_id" : 1,
"host" : "localhost:27018"
},
{ "_id" : 2,
"host" : "localhost:27019",
"arbiterOnly" : true
}
]
})