我的Symfony2應用程序連接到一個MongoDB副本集(2個完整節點和一個仲裁器)。故障轉移完成後(新的主服務器已成功選出),許多Web請求都會導致服務器錯誤。如果我重新啓動Apache(但不做其他更改),則異常消失,應用程序按預期工作(查詢新的主服務器,沒有問題)。symfony2應用程序:mongodb副本集故障切換需要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-β1
- 主義-mongodb-odm 1.0.0-BETA5
- 學說共同2.2.0
- doctrine-dbal 2.1.7
它聞起來像Symfony2應用程序試圖重新使用過時的MongoDB連接。主要的日誌支持這種猜測:當我打開應用程序網頁並且它進行查詢時,連接加起來,並且當我重新啓動apache時,許多連接被釋放。
- 我需要強制清除APC緩存嗎?
- 我是否需要在故障切換事件後重新啓動所有Web服務器? (其他人做什麼?)
- 我需要玩
mongo.is_master_interval
嗎? - 我以爲
retry_query
andretry_connect
would smooth out failover automatically,但似乎並非如此。我是否需要將try/catch塊添加到我的代碼中?
相關:
- (我想出來的新
retry_query
和retry_connect
選項)
可能相關:
是的,我當時(和我)正在使用PHP Mongo擴展/驅動程序的1.2.12版本。一旦PR#81合併,我會嘗試1.3.x。並且請注意,我在我的問題中描述的情況發生在新的小學成功選舉後。 –