出于测试目的,我试图通过设置 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
}
]
})