MongoDB黑名单致命错误

时间:2013-07-29 08:04:07

标签: php mongodb

我已经看过几次这个错误,为了解决这个问题,我只是重新启动服务器。

  

致命错误:未捕获异常'MongoConnectionException'   消息'无法连接到:localhost:27017:以前的连接   尝试失败,服务器列入黑名单   /var/www/html/include/config.php:9堆栈跟踪:#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}   在第9行的/var/www/html/include/config.php中引发

但是,我可能有一段时间没有看到它......我怎样才能防止问题发生?

更新:它再次发生,经过几分钟的等待,我不得不重新启动以使网站再次运行

3 个答案:

答案 0 :(得分:14)

从用于PHP的MongoDB驱动程序的1.4版本开始,如果无法联系到服务器,我们将把服务器“黑名单”长达一分钟。这样我们就不会通过连接来关闭服务器,这可能会超时。这主要是为了确保在副本集环境中我们仍然可以继续使用另一台主机,但当然如果你只有一台机器,这有点棘手。

如果您使用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 :(得分:1)

显然,这是由MongoDB的PHP驱动程序中的错误引起的问题。检查您是否使用版本1.4.0,如果是,请更新到更新版本并修复错误。

答案 2 :(得分:0)

似乎mongo处理连接本身,如果你想使用持久性mongo连接,你不应该在你的代码中使用紧密连接,我已经解决了这个问题,通过从mongo连接php脚本中删除关闭,如下所示:

不要使用关闭..............

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

希望有用。