使用主机公共IP连接到MongoDB地图集

时间:2020-05-20 23:39:57

标签: mongodb connection mongodb-atlas

我正在尝试使用公共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

1 个答案:

答案 0 :(得分:1)

加密

MongoDB Atlas要求所有入站连接都使用TLS / SSL,并且会删除所有不支持的连接。

副本集

Atlas集群是至少3个成员的副本集。在任何给定时间,只有主要成员才能接受写入。
哪个成员成为主要成员由合格节点之间的选举确定。在许多情况下,可能会选择一个新的主要数据库:

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

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

服务器发现

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

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

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

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