我有一个分片集群,其副本集分片,我的应用程序层与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'
答案 0 :(得分:2)
您可以在PHP中的几个级别设置slaveOK:连接,数据库,集合或游标。
各种细节可在此处找到:
http://php.net/manual/en/mongo.queries.php
您正在为每个光标设置它,这就是您必须经常调用它的原因。相反,您可以在db或collection级别设置它。就幕后发生的事情而言 - 实际上为每个连接设置了slaveOK - 当你为数据库,集合,游标等设置它时,PHP就是为你管理它。
在mongos或shell中的任何其他位置设置它只需为该连接设置它。注销后,将不再设置。