1

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

MongoCursor::$slaveOkay = true;

问题是,无论我在哪里与 db 交谈,我都必须添加此语句。

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

我尝试rs.slaveok()在我的主要和次要中都这样做,但我的应用程序层仍然抛出错误。

db.getMongo().setSlaveOk()我也在mongos 控制台中尝试过

错误说明如下:

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

1 回答 1

2

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

可在此处找到各种详细信息:

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

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

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

于 2012-09-03T16:50:53.080 回答