使用自动故障转移时PHP MongoDB错误

时间:2011-05-11 09:21:39

标签: php mongodb

我正在努力想出这个问题。我有一个2服务器副本集,其中一个仲裁服务器与当前主服务器一起运行。

当我连接或发出查询时,我会收到间歇性错误,其中包括以下任何一种错误:

  • 无法确定主人。
  • 无法连接到[将主机放在此处]。
  • 破坏管道例外。
  • MongoCursorExceptions。

似乎它们经常发生在服务器启动的时间越长。一段时间后,无法建立连接,当我尝试登录mongo shell时出现以下错误:

MongoDB shell version: 1.8.1
connecting to: test
Wed May 11 16:36:50 MessagingPort recv() errno:104 Connection reset by peer 127.0.0.1:27017
Wed May 11 16:36:50 SocketException: remote:  error: 9001 socket exception [1] 
Wed May 11 16:36:50 DBClientCursor::init call() failed
exception: DBClientBase::findOne: transport error: 127.0.0.1 query: { whatsmyuri: 1 }

(顺便说一句,通过详细(-vvvv)日志记录,9001套接字异常似乎出现在每个运行的查询中。)

当我重新启动mongo服务器时,事情会恢复并开始工作,但不会很长时间。

无论我使用哪种连接选项,都没有用。当我更改两个Web服务器以连接到主副本时,一切都开始工作了。没有错误。没有自动故障转移:(。奇怪的是,replicaSet选项仍然设置,这意味着PHP驱动程序仍然需要确定它连接的那个是否是主服务器,如果没有连接到它,如果没有,什么都不做。

这告诉我该问题存在于PHP驱动程序中,它在尝试确定它是否连接到主服务器之后尝试连接到主服务器。为了尝试和支持我的理论,我告诉其中一个服务器连接到辅助服务器。我立即开始从该服务器获取错误。不是仍然连接到主服务器的其他服务器。切换回来,没有错误。

任何人都可以对此有所了解吗?

我的设置: - 2个网络服务器 - 两者都有Apache / PHP - MongoDB Replica-Set跨越两者 - 次要的一个 - 主要和仲裁者在另一方面 - MongoDB 1.8.1 - PHP驱动程序1.1.4 - PHP 5.3.3 --Apache 2.2.17 - RedHat 5.5(Tikanga)

1 个答案:

答案 0 :(得分:-2)

这是MongoDB用户邮件列表中active thread的重新发布。

最好关闭它,让讨论结束。