【问题标题】:Mongoose / MongoDB replica set using secondary for readsMongoose / MongoDB 副本集使用辅助读取
【发布时间】:2015-07-16 15:16:12
【问题描述】:

我最近更改了我的服务器设置以包含一个副本集。辅助数据库位于世界各地的多个区域以减少延迟。问题是我认为所有的读取都是从主服务器而不是从辅助服务器完成的。我在远离主数据库的服务器上看到 500 毫秒以上的 newrelic 延迟,但与主数据库位于同一区域的登台服务器约为 20 毫秒。如何检查辅助读取或最近读取是否正常工作,或者我的设置是否缺失/错误? (我已经尝试过 SECONDARY_PREFERRED 和 NEAREST)

网址:

mongodb://1.1.1.1:27017,1.1.1.2:27017,1.1.1.3:27017,1.1.1.4:27017,1.1.1.5:27017/mydatabase

我的选项如下所示:

"replSet": {
   "rs_name": "myRepSet"
   "readPreference": "ReadPreference.SECONDARY_PREFERRED",
   "read_preference": "ReadPreference.SECONDARY_PREFERRED",
   "slaveOk": true
}

猫鼬版本:3.8.x

【问题讨论】:

    标签: mongodb mongoose replicaset


    【解决方案1】:

    根据gitHub 上的项目问题,当升级到最新版本(mongoose@3.8.1 & mongodb@1.3.23) 时,读取首选项似乎不起作用,因为所有读取都是从主服务器而不是辅助服务器。

    根据 cmets,当您回滚到旧版本 (mongoose@3.6.4 & mongodb@1.2.14) 时不会出现此问题,读取将开始进入辅助节点(集合级别)。此问题将在 version 3.8.7 中修复。

    请参考以下问题:

    https://github.com/Automattic/mongoose/issues/1833 https://github.com/Automattic/mongoose/issues/1895

    【讨论】:

    • 我们实际上更新到 Mongoose 4.x 以解决一半的问题,然后自己对代码进行了一些修改,将延迟降低到 ~20-60 毫秒。我会感谢这个答案,因为它与我们所做的一样。
    【解决方案2】:

    如何检查辅助读取或最近读取是否正常工作,

    如果您可以访问您的机器,检查正在查询哪些机器的简单方法是使用mongostat。只需登录您的一台服务器并运行

    mongostat --discover

    这将为您提供在副本集中每台机器上运行的插入/查询/更新/删除的基本输出。如果你有一个安静的系统,很容易看到查询被重定向到哪里,这样你至少可以知道你的辅助服务器是否被击中。

    如果不是,您将需要调查您的驱动程序设置。

    【讨论】:

    • 它似乎只是显示节点之间的同步。该网站每天有 40,000 次点击,那里显示的数据太多,无法解释任何事情。
    • 太糟糕了,但可以理解。您可以只登录其中一个辅助服务器并在本地运行 mongostat 并查看“查询”列下是否显示任何内容。
    【解决方案3】:

    您可以使用最近的选项检查而不是次要选项。我想这应该可行。 检查此链接。 http://docs.mongodb.org/manual/reference/read-preference/#nearest

    【讨论】:

    • 正如我在问题中所说,我已经尝试了两个选项,结果相同。
    • 我的错。一天结束,我的眼睛现在更糟了。无论如何,您是否检查了此链接。在我看来值得一试。 emptysqua.re/blog/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    相关资源
    最近更新 更多