微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – MongoConnectionException – 找不到候选服务器

我正在使用MongoDB复制集开发一个 PHP Web应用程序来存储我的数据.我偶尔会收到以下错误

Fatal error: Uncaught exception ‘MongoConnectionException’ with message ‘No candidate servers found’

我有一个3成员Mongo副本集与1仲裁

rs0:PRIMARY> rs.status()
{
    "set" : "rs0","date" : ISODate("2013-01-30T01:04:04Z"),"myState" : 1,"members" : [
        {
            "_id" : 0,"name" : "JenEricsMacPro.local:27017","health" : 1,"state" : 1,"stateStr" : "PRIMARY","uptime" : 844478,"optime" : Timestamp(1359507378000,1),"optimeDate" : ISODate("2013-01-30T00:56:18Z"),"self" : true
        },{
            "_id" : 1,"name" : "ericsmacbookpro.local:27017","state" : 2,"stateStr" : "SECONDARY","uptime" : 10720,"lastHeartbeat" : ISODate("2013-01-30T01:04:04Z"),"pingMs" : 3
        },{
            "_id" : 2,"name" : "ericsmacbookair.local:27017","state" : 7,"stateStr" : "ARBITER","uptime" : 1206,"lastHeartbeat" : ISODate("2013-01-30T01:04:03Z"),"pingMs" : 4
        },{
            "_id" : 3,"name" : "ericsmacxps.local:27017","uptime" : 75204,"pingMs" : 1
        }
    ],"ok" : 1
}

下面是我偶尔会收到此错误代码示例.

$mongoConfig = array (
    'uri' => 'mongodb://JenEricsMacPro.local:27017,ericsmacbookpro.local:27017,ericsmacxps.local:27017/','database' => 'myDatabase','replicasetArray' => array('replicaset' => 'rs0'));

$connection = new MongoClient(
    $mongoConfig['uri'],$mongoConfig['replicasetArray']);

$connection->setReadPreference(MongoClient::RP_SECONDARY_PREFERRED);

$db = $connection->selectDB($mongoConfig['database']);

任何人都知道可能导致“找不到候选服务器”的消息或者我如何确定问题根源的任何建议?

我的所有mongo.conf文件都使用每台服务器的静态IP,没有防火墙和DNS似乎正在正确解析到我网络上的.local域.

编辑:我在实例化MongoClient之前添加了Derick建议的日志记录.

error_reporting (E_NOTICE);

MonGolog::setModule( MonGolog::ALL );
MonGolog::setLevel( MonGolog::ALL );

启用日志记录后,我收到了以下通知.

Notice: PARSE INFO: Parsing mongodb://JenEricsMacPro.local:27017,ericsmacxps.local:27017/ in MonGologic.PHP on line 27
Notice: PARSE INFO: - Found node: JenEricsMacPro.local:27017 in MonGologic.PHP on line 27
Notice: PARSE INFO: - Found node: ericsmacbookpro.local:27017 in MonGologic.PHP on line 27
Notice: PARSE INFO: - Found node: ericsmacxps.local:27017 in MonGologic.PHP on line 27
Notice: PARSE INFO: - Connection type: MULTIPLE in MonGologic.PHP on line 27
Notice: PARSE INFO: - Found option 'replicaset': 'rs0' in MonGologic.PHP on line 27
Notice: PARSE INFO: - Switching connection type: REPLSET in MonGologic.PHP on line 27
Notice: CON INFO: mongo_get_read_write_connection: finding a REPLSET connection (read) in MonGologic.PHP on line 27
Notice: CON FINE: found connection JenEricsMacPro.local:27017;rs0;X;297 (looking for JenEricsMacPro.local:27017;rs0;X;297) in MonGologic.PHP on line 27
Notice: CON INFO: is_ping: pinging JenEricsMacPro.local:27017;rs0;X;297 in MonGologic.PHP on line 27
Notice: CON FINE: mongo_connection_destroy: Closing socket for JenEricsMacPro.local:27017;rs0;X;297. in MonGologic.PHP on line 27
Notice: CON INFO: freeing connection JenEricsMacPro.local:27017;rs0;X;297 in MonGologic.PHP on line 27
Notice: CON WARN: Couldn't connect to 'JenEricsMacPro.local:27017': send_package: error reading from socket: Operation timed out in MonGologic.PHP on line 27
Notice: CON FINE: found connection ericsmacbookpro.local:27017;rs0;X;297 (looking for ericsmacbookpro.local:27017;rs0;X;297) in MonGologic.PHP on line 27
Notice: CON INFO: is_ping: pinging ericsmacbookpro.local:27017;rs0;X;297 in MonGologic.PHP on line 27
Notice: CON FINE: mongo_connection_destroy: Closing socket for ericsmacbookpro.local:27017;rs0;X;297. in MonGologic.PHP on line 27
Notice: CON INFO: freeing connection ericsmacbookpro.local:27017;rs0;X;297 in MonGologic.PHP on line 27
Notice: CON WARN: Couldn't connect to 'ericsmacbookpro.local:27017': send_package: error reading from socket: Operation timed out in MonGologic.PHP on line 27
Notice: CON FINE: found connection ericsmacxps.local:27017;rs0;X;297 (looking for ericsmacxps.local:27017;rs0;X;297) in MonGologic.PHP on line 27
Notice: CON INFO: is_ping: pinging ericsmacxps.local:27017;rs0;X;297 in MonGologic.PHP on line 27
Notice: CON FINE: mongo_connection_destroy: Closing socket for ericsmacxps.local:27017;rs0;X;297. in MonGologic.PHP on line 27
Notice: CON INFO: freeing connection ericsmacxps.local:27017;rs0;X;297 in MonGologic.PHP on line 27
Notice: CON WARN: Couldn't connect to 'ericsmacxps.local:27017': send_package: error reading from socket: Operation timed out in MonGologic.PHP on line 27
Notice: CON FINE: discover_topology: checking ismaster for JenEricsMacPro.local:27017;rs0;X;297 in MonGologic.PHP on line 27
Notice: CON WARN: discover_topology: Couldn't create a connection for JenEricsMacPro.local:27017;rs0;X;297 in MonGologic.PHP on line 27
Notice: CON FINE: discover_topology: checking ismaster for ericsmacbookpro.local:27017;rs0;X;297 in MonGologic.PHP on line 27
Notice: CON WARN: discover_topology: Couldn't create a connection for ericsmacbookpro.local:27017;rs0;X;297 in MonGologic.PHP on line 27
Notice: CON FINE: discover_topology: checking ismaster for ericsmacxps.local:27017;rs0;X;297 in MonGologic.PHP on line 27
Notice: CON WARN: discover_topology: Couldn't create a connection for ericsmacxps.local:27017;rs0;X;297 in MonGologic.PHP on line 27
Notice: REPLSET FINE: finding candidate servers in MonGologic.PHP on line 27
Notice: REPLSET FINE: - all servers in MonGologic.PHP on line 27
Notice: REPLSET FINE: filter_connections: adding connections: in MonGologic.PHP on line 27
Notice: REPLSET FINE: filter_connections: done in MonGologic.PHP on line 27
Notice: REPLSET FINE: limiting to servers with same replicaset name in MonGologic.PHP on line 27
Notice: REPLSET FINE: limiting to servers with same replicaset name: done in MonGologic.PHP on line 27
Notice: REPLSET FINE: limiting by credentials in MonGologic.PHP on line 27
Notice: REPLSET FINE: limiting by credentials: done in MonGologic.PHP on line 27
我建议你添加日志记录以了解发生了什么. Mongo驱动程序(自1.3版本起)提供了大量日志记录来调试连接问题.在 http://derickrethans.nl/mongodb-debugging.html有一篇文章解释如何打开它.如果从日志信息中不清楚会发生什么,请使用日志更新您的问题,以便我可以更新我的答案.

从发布的日志中我可以看到您的客户端无法连接到您的连接字符串中的任何种子.如果您的机器/客户端无法连接,您当然无法与MongoDB通信.在这种情况下,可能有几种可能性:

>驱动程序无法将名称转换为IP地址.在这种情况下,您需要修复DNS设置,或将所有主机添加到/ etc / hosts>你真的无法连接到它们,这可能是防火墙.>在1.2系列驱动程序中存在一些问题,所以如果你还没有使用1.3.4或更高版本,我建议你升级.这应该是一个更顺畅的经历.>请记住,为了能够编写,您需要大多数节点.如果您没有,那么您将收到“无候选服务器”错误.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口。下面介绍的是其中NATIVE的支付实现流程与PC端实现扫码支付流程
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口。下面介绍的是其中APP的支付的配置与实现流程
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户信息这个功能的开发流程。 配置 1.首先得在微信公众平台申请一下微信小程序账号并获取到小程序的AppID和AppSecret https://mp.weixin.qq.com/cgi-bin/loginpage?url=%2Fwxamp%2F
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一款开源且免费商用的后台开发框架,它基于ThinkPHP和Bootstrap两大主流技术构建的极速后台开发框架,它有着非常完善且强大的功能和便捷的开发体验,使我逐渐喜欢上了它。
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛,就离不开通讯了,然后我就想到了长连接。这里本人用的是GatewayWorker框架。
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口。下面介绍的是其中JSAPI的支付实现流程
服务器优化必备:深入了解PHP8底层开发原理
Golang的网络编程:如何快速构建高性能的网络应用?
Golang和其他编程语言的对比:为什么它的开发效率更高?
PHP8底层开发原理揭秘:如何利用新特性创建出色的Web应用