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


PHP MongoDB errors when using automatic failover

我很难弄清楚这个问题。我有一个 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副本集跨两个- 二对一- 另一方为主裁判和仲裁者- MongoDB 1.8.1- PHP 驱动程序 1.1.4- PHP 5.3.3- 阿帕奇 2.2.17- 红帽 5.5 (蒂坎加)

这是

MongoDB用户邮件列表中活动线程的重新发布。

可能最好关闭它,让讨论在那里结束。