2013-07-29 41 views
8

我已經看到了這個錯誤幾次,並修復它,我只是重新啓動我的服務器。MongoDB列入黑名單致命錯誤

Fatal error: Uncaught exception 'MongoConnectionException' with message 'Failed to connect to: localhost:27017: Previous connection attempts failed, server blacklisted' in /var/www/html/include/config.php:9 Stack trace: #0 /var/www/html/include/config.php(9): MongoClient->__construct('mongodb://local...') #1 /var/www/html/classes.php(3): include('/var/www/html/i...') #2 /var/www/html/myusers.php(8): include('/var/www/html/c...') #3 {main} thrown in /var/www/html/include/config.php on line 9

但是,我可能有一段時間沒有看到它...我怎樣才能防止這個問題發生?

更新:它再次發生,並等待幾分鐘後,我不得不重新啓動,以再次使現場工作

回答

1

顯然,這是一種由MongoDB的PHP驅動程序錯誤的問題。檢查你是否使用1.4.0版本,如果是,更新到新版本並且錯誤應該被修正。

+7

這不是一個錯誤...這是一個功能。 – Derick

+0

當我看看[this]時,看起來像是一個bug(https://jira.mongodb.org/browse/PHP-846)。我的錯。順便說一句,很高興被XDebug的創造者評論。 *弓* :) – ciruvan

14

由於1.4版本的PHP版MongoDB驅動程序,如果無法聯繫到服務器,我們將「黑名單」服務器長達一分鐘。這是爲了讓我們不用連接超時服務器,這可能會超時。這主要是爲了確保在副本集環境中我們仍然可以繼續使用另一個主機,但是當然如果你只有一臺機器,這有點棘手。

如果使用MongoLog那麼你可以很輕鬆地發現引擎蓋下會發生什麼:

MongoLog::setModule(MongoLog::ALL); 
MongoLog::setLevel(MongoLog::ALL); 
MongoLog::setCallback('print_mongo_log'); 
function print_mongo_log($a, $b, $c) { echo $c, "\n"; } 

這將顯示驅動程序正在試圖做的一切。當出現問題時,看到第一個轉儲會很有趣,而且有一次它會「卡在」黑名單中。

上述警告將在60秒後或重新啓動Web服務器軟件(或您使用PHP-FPM)時消失。如果你覺得這個解釋是不正確的,請在http://jira.mongodb.org/browse/PHP

+1

它再次發生,等待幾分鐘後,我不得不重新啓動,使網站再次工作 – jSmith

+0

你根本不必「重新啓動」 - 這聽起來很奇怪。聽起來好像它沒有被從黑名單中刪除。我已經更新了包含一些調試建議的答案。 – Derick

+1

有沒有一種方法可以禁用此功能,因爲我們沒有使用mongo副本集? – MaK

0

提交一個bug /功能請求這似乎蒙戈處理連接本身,你不應該使用,如果你想使用持久性蒙戈連接在你的代碼緊密的聯繫,我已經解決這個問題通過從蒙戈連接PHP腳本接近這樣的:

不要使用接近..............

$client = new MongoClient("mongodb://127.0.0.1:27017"); 
//close mongo connection 
$client->close(); 

希望對大家有用。