php连接mongodb数据库报错“no suitable servers found (`serverselectiontryonce` set)”的解决办法 -kb88凯时官网登录

时间:2018-08-19
阅读:

公司的核心系统使用了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支持,参数:./bin/mongod –filepermissions 0777 –ipv6

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

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

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

# 禁用整个系统所有接口的ipv6

net.ipv6.conf.all.disable_ipv6 = 1

# 禁用某一个指定接口的ipv6(例如:eth0, lo)

net.ipv6.conf.lo.disable_ipv6 = 1

net.ipv6.conf.eth0.disable_ipv6 = 1

修改完毕后,使用sysctl -p命令使得配置生效。

然后通过/etc/init.d/network restart,命令来重启网络服务。

第三:使用mongodb三节点副本集报“no suitable servers found”错

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

可以尝试,修改“connecttimeoutms”参数的值试试。

返回顶部
顶部
网站地图