Pet*_*gad 3 php mongodb mongodb-php
我正在努力理解的一件事是,在设置我们当前的Mongo配置时,我们目前有两台带有仲裁器的服务器.
现在我先创建一个关于主人的记录; 去了二级,然后试图找到它,我收到的错误看起来像:
error: { "$err" : "not master and slaveok=false", "code" : 13435 }
Run Code Online (Sandbox Code Playgroud)
在mongo的网站上阅读Slave OK后,我发现在我需要设置的辅助服务器上
rs.slaveOk();
Run Code Online (Sandbox Code Playgroud)
但是我不完全理解为什么在查询服务器时我会在PHP中执行此操作; 或者如果我错误地理解这一点.
基本上我有一个服务器池,我打算连接到它们:
$m = new Mongo("mongodb://localhost:27017", array("replicaSet" => "myReplSetName"));?>
Run Code Online (Sandbox Code Playgroud)
这将连接到主..然而,这似乎并没有分配读取负载..我怎么能分配读取负载,以便它跨越两个服务器,从而使查询更快?
先感谢您
dam*_*ier 10
这是连接到副本集的可接受方式.假设命名服务器已启动,驱动程序连接将发现群集中的其余服务器,并且能够在允许时将查询指向它们,并通过故障转移事件遵循"PRIMARY"指定.不过,将其他服务器添加到此"种子列表"是个好主意,这样如果其中一个"种子"服务器发生故障,连接仍然可以成功.
至于分发阅读...这种行为在驾驶员的判断下实际上是行为.但是普遍接受的语义是:如果请求了slaveOk读取,那么读取查询将转到SECONDARY服务器(如果有); 只有当没有可用时才会进入PRIMARY.当然,写查询总是会转到PRIMARY.
让PRIMARY共享一些读取负载的一个建议是在将查询标记为slaveOk时随机化 - 请参阅此处的讨论
要在PHP中将查询标记为slaveOk,您可以在多个级别设置此位 - 连接,数据库,集合或集群 - 此处的API详细信息 这提供了几种实现上述随机化技术的可能方法 - 例如,尝试制作确保连接池中的一半连接设置了slaveOk位.
希望有所帮助!