2012-09-03 29 views
1

我有一个分片集的分片集已分片,我的应用程序层正在与mongos交谈,现在如果我的主服务器出现故障,我的php应用程序会抛出错误。
我知道这是因为我还没有做这样的事情启用setSlaveOkay从驱动程序:有没有办法在整个集群中启用setSlaveOkay

MongoCursor::$slaveOkay = true; 

这样做的问题是,在以往任何时候我说话分贝我一定要添加此语句。

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

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

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

回答

2

你可以在PHP几个层次设置slaveOK:连接,数据库,收集,或光标

我也mongos控制台

的错误语句如下尝试db.getMongo().setSlaveOk()

的各种细节都可以在这里找到:

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

你每个光标,这就是为什么你有这么经常把它设置它。相反,您可以在数据库或集合级别设置它。就幕后发生的事情而言 - slaveOK实际上是为每个连接设置的 - 当您为数据库,集合,光标等设置数据库,集合,光标等时,PHP只是为您管理它。

将它设置在mongos或其他任何位置在shell中简单地设置它的连接。一旦你注销,它不再设置。

+0

谢谢亚当,对此作出回应,我的问题是,我在应用程序层有一个巨大的代码库,这是非常难以更新的,因为数据库正在增长,我计划实施分片+副本集,但现在甚至我只是更新了连接字符串以与mongos对话,我正在寻找一种方法来设置这个setslaveok标志,以便当我连接到mongos时,应该自动启用它, –

+0

正确,因此在创建时将其设置在连接上它应该涵盖它.....不知道我明白这个问题... –

+0

谢谢亚当的宝贵资料,我想我误解了setslaveok的工作方式。 –

相关问题