【问题标题】:How to set up a mongodb delayed slave that is not hidden?如何设置不隐藏的mongodb延迟slave?
【发布时间】:2012-05-14 08:55:33
【问题描述】:

出于测试目的,我试图通过设置 slaveDelay=n 来模拟 mongodb 集群中的复制滞后。事实证明,这会神奇地导致从属设备被隐藏,因此我的测试无法访问它。

mongodb documentation 状态 “通常,我们不希望延迟成员用于 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
    }
]
})

【问题讨论】:

    标签: mongodb database-replication


    【解决方案1】:

    据我所知,这是不可能的。例如,您唯一的途径是通过代理模拟/强制您的主要和延迟的次要之间的实际网络延迟。有许多这样的工具可用,它们会给你一个更准确的测试。

    【讨论】:

      【解决方案2】:

      您可以 fsync 并锁定辅助服务器一段时间以使其落后:

      http://www.mongodb.org/display/DOCS/fsync+Command#fsyncCommand-v2.0Notes

      虽然解锁后它会很快赶上,但通过不错的 oplog 和较大的插入率,您可以反复模拟滞后效果。这意味着在开始测试等之前等待它滞后。

      如果您有一个主节点、一个辅助节点和一个仲裁器,如您所描述并在您选择的语言中使用 W=2 等效项(REPLICAS_SAFE 等),而辅助节点被锁定,除非您设置 wtimeout(您设置应该,如果使用 W=2) 则捕获异常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-16
        • 1970-01-01
        • 1970-01-01
        • 2012-02-22
        • 2013-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多