如何设置一个不隐藏的mongodb延迟从站?

axe*_*otl 5 mongodb database-replication

出于测试目的,我试图通过设置 slaveDelay=n 的从站来模拟 mongodb 集群中的复制延迟。事实证明,这神奇地导致奴隶被隐藏,所以我的测试无法访问它。

MongoDB的文档状态“一般来说,我们不希望被用于slaveOkay延迟成员读取因此,设置slaveDelay还隐藏应用程序中的成员,就好像您还可以设置隐藏:。真正的”

有没有办法为我的“非典型”用例进行配置?或者有没有更好的方法来模拟从具有不同时间延迟的不同从站读取?

我尝试使用 TaggedReadPreference 强制测试代码连接到延迟的从站,但这导致

com.mongodb.MongoException: Could not find any valid secondaries with the supplied tags ('{ "delayed" : "true"}'
Run Code Online (Sandbox Code Playgroud)

显然,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
    }
]
})
Run Code Online (Sandbox Code Playgroud)

Rem*_*iet 1

据我所知这是不可能的。例如,您唯一的途径是通过代理模拟/强制主要设备和延迟的辅助设备之间的实际网络延迟。有许多此类工具可用,它们将为您提供更准确的测试。