使用主机 public IP 连接到 MongoDB atlas
Connect to MongoDB atlas using host public IP
我正在尝试使用 public IP 而不是主机名连接到我的 mongodb atlas 实例。
所有 IP 都在安全设置中列入白名单。
我查找了集群中每个节点的 public 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
如何找到合适的 public 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
加密
MongoDB Atlas 要求所有入站连接都使用 TLS/SSL,并且会简单地丢弃任何不使用的连接。
副本集
Atlas 集群是至少 3 个成员的副本集。在任何给定时间只有主要成员能够接受写入。
哪个成员成为主要成员由符合条件的节点之间的选举决定。在多种情况下可能会选举出新的主要成员:
- 滚动重启以修改某些设置
- MongoDB或图集补丁和版本升级
- 主节点上的硬件问题
- 网络、电源或其他环境问题
- 主设备因任何原因无响应 5 秒或更长时间
如果您通过 IP 地址直接连接到一个节点而不使用副本集选项,您的客户端将不会意识到它正在连接到一个副本集并且不会监视此类更改。这意味着如果有选举,客户端可能会突然无法写入。
服务器发现
如果您确实使用副本集选项进行连接,则在连接时会有一个服务器发现阶段。 driver/client 将查询第一个连接的节点以获取副本集成员列表和当前主节点。客户端随后会丢弃原来的连接,并连接到列表中的每个节点,以监控副本集状态。
此列表将以存储在内部副本集配置文档中的相同格式提供。对于 Atlas,这将是 hostname:port.
这意味着即使通过 IP 地址进行初始连接,在服务器发现阶段客户端也需要能够解析主机名。
如果 driver/application 无法解析名称,将难以维持与 Atlas 的连接。
我正在尝试使用 public IP 而不是主机名连接到我的 mongodb atlas 实例。
所有 IP 都在安全设置中列入白名单。
我查找了集群中每个节点的 public 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
如何找到合适的 public 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
加密
MongoDB Atlas 要求所有入站连接都使用 TLS/SSL,并且会简单地丢弃任何不使用的连接。
副本集
Atlas 集群是至少 3 个成员的副本集。在任何给定时间只有主要成员能够接受写入。
哪个成员成为主要成员由符合条件的节点之间的选举决定。在多种情况下可能会选举出新的主要成员:
- 滚动重启以修改某些设置
- MongoDB或图集补丁和版本升级
- 主节点上的硬件问题
- 网络、电源或其他环境问题
- 主设备因任何原因无响应 5 秒或更长时间
如果您通过 IP 地址直接连接到一个节点而不使用副本集选项,您的客户端将不会意识到它正在连接到一个副本集并且不会监视此类更改。这意味着如果有选举,客户端可能会突然无法写入。
服务器发现
如果您确实使用副本集选项进行连接,则在连接时会有一个服务器发现阶段。 driver/client 将查询第一个连接的节点以获取副本集成员列表和当前主节点。客户端随后会丢弃原来的连接,并连接到列表中的每个节点,以监控副本集状态。
此列表将以存储在内部副本集配置文档中的相同格式提供。对于 Atlas,这将是 hostname:port.
这意味着即使通过 IP 地址进行初始连接,在服务器发现阶段客户端也需要能够解析主机名。
如果 driver/application 无法解析名称,将难以维持与 Atlas 的连接。