繁体   English   中英

无法连接到 mongodb 复制集 Google Compute Engine

[英]Unable to connect to mongodb replicaset Google Compute Engine

我在谷歌计算引擎上为 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") 失败:提供了节点名或服务名,或未知 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公共访问并添加此规则,我可以从我的应用引擎连接到这些实例吗?

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM