有没有办法在整个集群中启用setSlaveOkay

时间:2012-09-03 13:17:30

标签: mongodb sharding

我有一个分片集群,其副本集分片,我的应用程序层与mongos交谈,现在如果我的主服务器出现故障,我的php应用程序会抛出错误。
我知道这是因为我有通过执行以下操作从驱动程序中未启用setSlaveOkay

MongoCursor::$slaveOkay = true;

这个问题是,无论我在哪里谈论db,我都要添加这个声明。

有没有办法可以在系统级别启用它?

我尝试在我的主要和辅助中执行rs.slaveok(),但我的应用层仍然抛出错误。

我还在mongos控制台

中尝试了db.getMongo().setSlaveOk()

错误陈述如下:

PHP Fatal error:  Uncaught exception 'MongoCursorException' with message 'dbclient error communicating with server: testserver:10001'

1 个答案:

答案 0 :(得分:2)

您可以在PHP中的几个级别设置slaveOK:连接,数据库,集合或游标。

各种细节可在此处找到:

http://php.net/manual/en/mongo.queries.php

您正在为每个光标设置它,这就是您必须经常调用它的原因。相反,您可以在db或collection级别设置它。就幕后发生的事情而言 - 实际上为每个连接设置了slaveOK - 当你为数据库,集合,游标等设置它时,PHP就是为你管理它。

在mongos或shell中的任何其他位置设置它只需为该连接设置它。注销后,将不再设置。