【问题标题】:MongoDB no suitable servers foundMongoDB 找不到合适的服务器
【发布时间】:2017-05-29 09:39:21
【问题描述】:

我无法连接到副本集。

[MongoDB\Driver\Exception\ConnectionTimeoutException]                                                                                                              
No suitable servers found (`serverSelectionTryOnce` set): 
[Server closed connection. calling ismaster on 'a.mongodb.net:27017'] 
[Server closed connection. calling ismaster on 'b.mongodb.net:27017']
[Server closed connection. calling ismaster on 'c.mongodb.net:27017']

但是,我可以使用 MongoChef 进行连接

【问题讨论】:

  • 请确保/etc/mongod.conf 中的bindIp 已正确添加。
  • 我多次遇到此问题,已检查所有端口并允许所有 IP 地址。但问题仍然存在,因为错误:找不到合适的服务器(serverSelectionTryOnce 设置):[套接字超时调用 ismaster ...

标签: php-mongodb


【解决方案1】:

将任何 localhost 引用切换到 127.0.0.1 对我有帮助。 localhost和127.0.0.1有区别

见:localhost vs. 127.0.0.1

MongoDB 可以设置为在 UNIX 套接字TCP/IP

上运行

如果所有其他方法都失败了,我发现在所有情况下最一致的方法如下:

在您的主机文件中,确保为您要使用的 IP 地址分配了一个名称(127.0.0.1 除外)。

192.168.0.101 coolname

192.168.0.101 coolname.somedomain.com

在 mongodb.conf 中:

bind_ip = 192.168.0.101

重启Mongo

注意1:从命令行访问mongo时,您现在必须指定主机。

mongo --host=coolname

注意 2:您还必须将对 localhost 或 127.0.0.1 的任何引用更改为您的新名称。

$client = new MongoDB\Client("mongodb://coolname:27017");

【讨论】:

  • 我同时使用了 localhost 和 127.0.0.1,但它不适用于 Windows 10 系统。 windows更新后无法正常工作。
  • @shankar msr 我添加了一些可能对您有所帮助的额外说明。
【解决方案2】:

我在基于 docker 的设置中遇到了同样的错误:

  • container1: nginx 监听 80 端口

  • container2: php-fpm 监听 9000 端口

  • container3:mongodb 监听端口 27017

nginx转发php到php-fpm

尝试从php 访问mongodb 时出现此错误。

mongodb Dockerfile 中,罪魁祸首是:

CMD ["mongod", "--bind_ip", "127.0.0.1"]

需要改成:

CMD ["mongod", "--bind_ip", "0.0.0.0"]

错误消失了。希望这对某人有所帮助。

【讨论】:

    【解决方案3】:

    在我的例子中,我暂时在运行 Linux Debian 9 的 VPS 上针对 MongoDB 从 Windows7 编写 PHP。PHP 最终将在同一个 Linux 机器中运行,为 MongoDB 数据提供 API。 顺便说一句,这个本地作曲家安装似乎对我没有任何好处,它纯粹是丑陋的。我的 PHP 在下面的修复之后可以在没有要求行 require_once 'C:\Users\<Windows User Name>\vendor\autoload.php' 的情况下工作。

    我的解决方法与接受的答案不同,这对我来说没有意义。

    我不必触摸任何主机文件

    所以用你的目标机器的IP编辑你的/etc/mongod.conf,然后用sudo systemctl restart mongod重启就可以了

    我不知道该怪什么

    1. PHP 和 MongoDB 站点提供可怕的文档,内容少且不完整的 PHP 示例,或者...
    2. 在 Linux 上安装 MongoDB 时未提及此 bindIP。

    到目前为止,我对 MongoDB 的启动体验非常消极,因为发生的所有变化都与我观看的视频所期望的完全不符。我似乎找不到任何反映我正在经历的事情

    $DB_CONNECTION_STRING="mongodb://user:password@164.152.09.84:27017"
    $m = new MongoDB\Driver\Manager( $DB_CONNECTION_STRING ) 
    

    而不是

    $m = new MongoClient()
    

    希望这对某人有所帮助

    PS。总是对分号、camelCAsE 和任何区分大小写的东西说NO......这是最好的荒谬。

    【讨论】:

      【解决方案4】:

      您的家庭网络的 IP 地址可能已更改,这将导致 MongoDB 锁定您。

      我通过访问 MongoDB Atlas 并更改允许连接到我的数据的 IP 地址为自己解决了这个问题。最初,我将其设置为仅允许来自我的家庭网络的连接。但是我的家庭网络 IP 地址发生了变化,并且我开始收到与您相同的错误消息。

      要检查您是否遇到同样的问题,请转到 MongoDB Atlas,进入您的项目,然后单击屏幕左侧的“网络访问”。在那里您可以更新您的 IP 地址。它会向您显示它允许进入的 IP 地址。要了解您当前的 IP 地址是什么,请访问 whatismyipaddress.com 并更新 MongoDB(如果不同)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-10
        • 2020-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-09
        相关资源
        最近更新 更多