【问题标题】:Connect to MongoDB atlas using host public IP使用主机公网 IP 连接到 MongoDB atlas
【发布时间】:2020-05-20 23:39:57
【问题描述】:

我正在尝试使用公共 IP 而不是主机名连接到我的 mongodb atlas 实例。

所有 IP 都在安全设置中列入白名单。

我查找了集群中每个节点的公共 IP,并尝试连接到每个节点,但每次都失败。

Hosts ---> Public Address
(Secondary node) cluster0-shard-00-00-ubkbl.mongodb.net --->  54.221.247.60
(Primary node) cluster0-shard-00-01-ubkbl.mongodb.net ---> 54.145.147.81
(secondary node) cluster0-shard-00-02-ubkbl.mongodb.net ---> 184.73.253.26

如何找到合适的公共 IP 来使用?

错误示例:

mongo admin --host 54.145.147.81 -u <USERNAME> --port 27017 -p --verbose
MongoDB shell version v4.2.0
Enter password:
connecting to: mongodb://54.145.147.81:27017/admin?compressors=disabled&gssapiServiceName=mongodb
2020-05-20T20:09:18.015-0400 D1 NETWORK  [js] creating new connection to:54.145.147.81:27017
2020-05-20T20:09:18.032-0400 D1 NETWORK  [js] connected to server 54.145.147.81:27017
2020-05-20T20:09:18.050-0400 I  NETWORK  [js] DBClientConnection failed to receive message from 54.145.147.81:27017 - HostUnreachable: Connection closed by peer
2020-05-20T20:09:18.050-0400 D1 -        [js] User Assertion: HostUnreachable: network error while attempting to run command 'isMaster' on host '54.145.147.81:27017'  src/mongo/client/dbclient_base.cpp 226
2020-05-20T20:09:18.050-0400 D1 -        [js] User Assertion: InternalError: network error while attempting to run command 'isMaster' on host '54.145.147.81:27017'  src/mongo/scripting/mozjs/mongo.cpp 832
2020-05-20T20:09:18.050-0400 E  QUERY    [js] Error: network error while attempting to run command 'isMaster' on host '54.145.147.81:27017'  :
connect@src/mongo/shell/mongo.js:341:17
@(connect):2:6
2020-05-20T20:09:18.050-0400 D1 -        [js] User Assertion: Location12513: connect failed src/mongo/shell/shell_utils.cpp 416
2020-05-20T20:09:18.050-0400 I  QUERY    [js] MozJS GC prologue heap stats -  total: 3762898 limit: 0
2020-05-20T20:09:18.053-0400 I  QUERY    [js] MozJS GC epilogue heap stats -  total: 2 limit: 0
2020-05-20T20:09:18.053-0400 D1 -        [main] User Assertion: Location12513: connect failed src/mongo/scripting/mozjs/proxyscope.cpp 320
2020-05-20T20:09:18.053-0400 F  -        [main] exception: connect failed
2020-05-20T20:09:18.053-0400 E  -        [main] exiting with code 1

【问题讨论】:

  • 你是如何尝试连接的,你看到了什么错误?
  • Mongoshell 也是一个外部应用程序。
  • 我们可以看到 mongo shell 命令行和使用--verbose 选项的响应吗?
  • @Joe 更新上面的描述 ^
  • Atlas 需要 TLS/SSL。 Atlas 集群也是一个副本集,因此您可能需要指定该集的名称。

标签: mongodb connection mongodb-atlas


【解决方案1】:

加密

MongoDB Atlas 要求所有入站连接都使用 TLS/SSL,并且会简单地丢弃任何不使用的连接。

副本集

Atlas 集群是至少包含 3 个成员的副本集。只有主要成员才能在任何给定时间接受写入。
哪个成员成为主要成员由合格节点之间的选举决定。在多种情况下可能会选出新的主节点:

  • 滚动重启以修改某些设置
  • MongoDB 或 Atlas 补丁和版本升级
  • 主节点上的硬件问题
  • 网络、电源或其他环境问题
  • 主要出于任何原因在 5 秒或更长时间内无响应

如果您通过 IP 地址直接连接到节点而不使用副本集选项,您的客户端将不会意识到它正在连接到副本集并且不会监视此类更改。这意味着如果有选举,客户端可能会突然无法写入。

服务器发现

如果您确实使用副本集选项进行连接,则在连接时会有一个服务器发现阶段。驱动程序/客户端将查询第一个连接的节点以获取副本集成员列表和当前主节点。然后客户端将断开原始连接,并连接到列表中的每个节点以监控副本集状态。

此列表将以存储在内部副本集配置文档中的相同格式提供。对于 Atlas,这将是主机名:端口。

这意味着即使通过 IP 地址进行初始连接,在服务器发现阶段,客户端也需要能够解析主机名。

如果驱动程序/应用程序无法解析名称,它将难以维持与 Atlas 的连接。

【讨论】:

    猜你喜欢
    • 2020-11-27
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 2020-01-15
    相关资源
    最近更新 更多