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位.

希望有所帮助!

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...