微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 何时查询Mongo DB的副本集

我正在努力理解的一件事是,在设置我们当前的Mongo配置时,我们目前有两台带有仲裁器的服务器.

现在我先创建一个关于主人的记录;去了二级,然后试图找到它,我收到的错误看起来像:

error: { "$err" : "not master and slaveok=false", "code" : 13435 }

在mongo的网站上阅读大约Slave OK,我发现在我需要设置的辅助服务器上

rs.slaveOk();

但是我不完全理解为什么在查询服务器时我会在PHP中执行此操作;或者如果我错误地理解这一点.

基本上我有一个服务器池,我打算连接到它们:

$m = new Mongo("mongodb://localhost:27017", array("replicaset" => "myReplSetName"));?>

这将连接到主..然而,这似乎并没有分配读取负载..我怎么能分配读取负载,以便它跨越两个服务器,从而使查询更快?

先感谢您

解决方法:

这是连接到副本集的可接受方式.假设命名服务器已启动,驱动程序连接将发现群集中的其余服务器,并且能够在允许时将查询指向它们,并通过故障转移事件遵循“PRIMARY”指定.不过,将其他服务器添加到此“种子列表”是个好主意,这样如果其中一个“种子”服务器发生故障,连接仍然可以成功.

至于分发阅读…这种行为在驾驶员的判断下实际上是行为.但是普遍接受的语义是:如果请求了slaveOk读取,那么读取查询将转到SECONDARY服务器(如果有的话);只有当没有可用时才会进入PRIMARY.当然,写查询总是会转到PRIMARY.

让PRIMARY共享一些读取负载一个建议是在将查询标记为slaveOk时随机化 – see the discussion here

要在PHP中将查询标记为slaveOk,您可以在多个级别设置此位 – 连接,数据库,集合或集群 – API details here这提供了几种实现上述随机化技术的可能方法 – 例如,尝试确保一半连接池中的连接已设置slaveOk位.

希望有所帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐