PHP连接MongoDB数据库报错“No suitable servers found (`serverSelectionTryOnce` set)”的解决办法

PHP连接MongoDB数据库报错“No suitable servers found (`serverSelectionTryOnce` set)”的解决办法

最近在使用MongoDB数据库过程遇到报错  “No suitable servers found (`serverSelectionTryOnce` set): [connection refused calling ismaster on ‘xxx.xxx.xxx.xxx:xxxx’]”  问题。

解决如下:

导致原因:主要是因为服务器开启了ipv6支持,但是MongoDB默认是不开启ipv6的支持的。

一、连接单节点的MongoDB服务器的解决方法

1.删除操作系统中ipv6解析,删除/etc/hosts'中的'::1 localhost, 这一行

2.开启mongod的ipv6支持,参数:/usr/local/src/mongodb/bin/mongod  –filePermissions 0777 –ipv6

3.在mongo的配置里,host使用“localhost:27017”。

二、如果第一种方法解决不了,或者你采用的是副本集的MongoDB连接字符串,可以采用永久禁用IPv6的方法来解决这个问题

vim  /etc/sysctl.conf   命令修改或者添加系统配置文件

  1. # 禁用整个系统所有接口的IPv6
  2. net.ipv6.conf.all.disable_ipv6 = 1
  3. # 禁用某一个指定接口的IPv6(例如:eth0, lo)
  4. net.ipv6.conf.lo.disable_ipv6 = 1
  5. net.ipv6.conf.eth0.disable_ipv6 = 1
  6. 修改完毕后,使用sysctl -p命令使得配置生效。
  7. 然后通过/etc/init.d/network restart,命令来重启网络服务。

三、使用阿里云MongoDB三节点副本集报“No suitable servers found”错

  1. 阿里云的三节点副本集报这个错误,可能是因为’connectTimeoutMS’ 参数的默认设置太小导致的。个人猜测:是因为连接超时的设置如果太小,导致服务监视器没有触发选举主节点的投票。连接监视器,貌似每两秒钟会检查一下各个节点的状态。

2.修改“connectTimeoutMS”参数的值尝试。

四、linux 执行:setsebool -P httpd_can_network_connect on

发表评论

电子邮件地址不会被公开。 必填项已用*标注