【问题标题】:Unable to connect to mongodb replicaset Google Compute Engine无法连接到 mongodb 副本集 Google Compute Engine
【发布时间】:2020-12-11 12:47:27
【问题描述】:

我在谷歌计算引擎上为 mongodb 创建了一个 3 节点副本集,出于测试目的,我为防火墙规则添加了 0.0.0.0/0,我可以从任何地方连接到单个节点,并且所有实例都可以在没有任何问题!但问题是当我尝试使用以下命令连接到副本集时

mongo "mongodb://username:password@public-ip-1:27017,public-ip-2:27017,public-ip-3:27017/production?replicaSet=rs0"
  1. 当我在同一个项目的另一个实例中尝试此代码时,它可以正常工作
  2. 当我从不同的项目实例或本地实例尝试时,它会抛出如下错误

2020-08-22T14:36:40.579+0530 I NETWORK [thread1] getaddrinfo("mongodb-1-servers-vm-0") 失败:提供节点名或服务名,或未知 2020-08-22T14:36:40.582+0530 I NETWORK [thread1] getaddrinfo("mongodb-1-servers-vm-1") failed: nodename or servname provided, or not known 2020-08-22T14:36:40.582+0530 W NETWORK [thread1] 无法到达主集 rs0

从这些实例中,我可以分别连接到各个节点,因为

mongo "mongodb://username:passsword@public-ip-1:27017/production"
mongo "mongodb://username:passsword@public-ip-2:27017/production"
mongo "mongodb://username:passsword@public-ip-3:27017/production"

可能是什么问题?

第二个问题是,在防火墙上这些是添加应用引擎服务帐户的选项吗?所以如果我禁用0.0.0.0/0 公共访问并添加此规则,我可以从我的应用引擎连接到这些实例吗?

【问题讨论】:

    标签: mongodb google-cloud-platform google-compute-engine


    【解决方案1】:

    当连接到副本集时,客户端使用服务器发现过程。基本步骤是:

    1. 连接到连接字符串中的第一个主机
      • 如果失败,请尝试第二个
    2. 一旦建立连接,运行isMaster之类的命令到:
      • 发现所有副本集成员的名称
      • 发现当前哪个节点是主节点
    3. 关闭初始连接
    4. 使用第 2 步中发现的主机名和端口连接到副本集的每个成员

    这意味着从rs.conf()rs.status() 返回的主机名必须可由您希望能够直接连接到副本集的每个客户端解析。

    从错误消息看来,节点似乎是使用短名称添加到副本集中的。如果您将每个节点的短名称添加到您要连接的机器上的主机文件中,它应该可以工作。

    或者,在 rs.initiaters.add 命令中使用可公开解析的主机名重建副本集。

    【讨论】:

    • 感谢您的回复!我可以在我的 /etc/hosts 中看到这些连接字符串你能给我任何关于我的第二个查询的思考过程或解决方案吗?如何从应用引擎安全地连接到同一个副本集
    • 应用引擎需要解析这些名称,因此要么将它们添加到应用引擎运行的主机文件中,要么使用应用引擎可以解析的主机名重建副本集。
    • 您是否可以共享一个文档/文章,其中指定如何在应用引擎上传递主机?请
    • 连接公网IP好还是私网IP好?对于复制配置?哪个是首选
    • 那么,如果我使用私有 ip 创建副本并且我尝试使用私有 ip 连接到副本?我会得到同样的错误吗?
    猜你喜欢
    • 1970-01-01
    • 2020-09-25
    • 2013-05-25
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    相关资源
    最近更新 更多