我的 Symfony2 应用程序连接到 MongoDB 副本集(2 个完整节点和一个仲裁器)。故障转移完成后(已成功选出新的主节点),许多 Web 请求会导致服务器错误。如果我重新启动 Apache(但不进行其他更改),异常就会消失,应用程序会按预期工作(查询新的主节点,没问题)。
在重新启动 Apache 之前MongoCursorException
,我收到消息not master and slaveOk=false
或couldn't determine master
. 不一致:似乎这取决于我遇到的 Apache 工人。或者其他的东西。无论如何,重新启动 Apache 似乎可以立即修复应用程序,并且所有查询都正常成功。
我的副本集是为了冗余,而不是性能,所以我从不使用 slaveOk=true。
这些选项被传递给 Mongo 构造函数:
connect => TRUE
replicaSet => foo
我在用着:
- PHP 5.3.10
- APC 3.1.7
- MongoDB 2.2.1
- Symfony2 版本 2.0.18
从我的deps
文件:
- 教义 2.1.7
- 学说-mongodb 1.0.0-BETA1
- 学说-mongodb-odm 1.0.0-BETA5
- 学说通用 2.2.0
- 教义-dbal 2.1.7
闻起来像是 Symfony2 应用程序试图重用过时的 MongoDB 连接。主要的日志支持这种猜测:当我点击应用程序网页并进行查询时,连接会增加,当我重新启动 apache 时,会释放许多连接。
- 我需要强制清除我的 APC 缓存吗?
- 发生故障转移事件后,我是否只需要重新启动所有网络服务器?(其他人到底在做什么?)
- 我需要玩
mongo.is_master_interval
吗? - 我认为
retry_query
并且retry_connect
会自动消除故障转移,但事实并非如此。我需要在我的代码中添加 try/catch 块吗?
有关的:
- Doctrine ODM / MongoDB 不重试查询?(我正在尝试新的
retry_query
和retry_connect
选项)
可能相关: