Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 有没有办法在整个集群中启用SetLaveOkay_Mongodb_Sharding - Fatal编程技术网

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

Mongodb 有没有办法在整个集群中启用SetLaveOkay,mongodb,sharding,Mongodb,Sharding,我有一个分片集群,它有一个分片副本集,我的应用层正在与mongos对话,现在如果我的主服务器出现故障,我的php应用程序会抛出一个错误。我知道这是因为我没有通过执行以下操作从驱动程序启用setslavook: MongoCursor::$slaveOkay = true; 问题是,无论我在哪里与db交谈,我都必须添加此语句 是否有一种方法可以在系统级别启用此功能 我尝试在我的主要和次要应用程序中执行rs.slaveok(),但我的应用程序层仍然抛出错误 我还在mongos控制台中尝试了db.g

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

MongoCursor::$slaveOkay = true;
问题是,无论我在哪里与db交谈,我都必须添加此语句

是否有一种方法可以在系统级别启用此功能

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

我还在mongos控制台中尝试了
db.getMongo().setslavok()

错误声明如下:

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

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

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

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


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

谢谢Adam,对这一点的回应,我的问题是,我在应用层有一个巨大的代码库,很难更新,因为数据库在增长,我计划实现分片+副本集,但现在连我都只是更新连接字符串以与mongos对话,我正在寻找一种方法,我可以设置这个SetLaveOK标志,这样当我连接到mongos时,它应该会自动启用,对吧,所以在创建连接时将其设置在连接上,这应该涵盖它……我不确定我是否理解这个问题……感谢Adam提供的宝贵信息,我想我误解了SetLaveOK的工作方式。@AdamC我们不能全局设置它(有任何设置吗?)?这使得在应用程序级别不必担心。在每个连接上设置它,它将被全局设置,无法在服务器端设置它-它是客户端设置。