Docs 菜单
Docs 主页
/
Atlas
/ /

排除私有端点连接问题

本页概述了常见的私有端点连接问题和可能的解决方案。

1

要查看每个私有端点的状态,请执行以下操作:

  1. 在Atlas中, Go项目的 Network Access 页面。

    警告: 导航改进正在进行中

    我们目前正在推出改进的全新导航体验。如果以下步骤与Atlas用户界面中的视图不匹配,请参阅 预览文档。

    1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。

    2. 如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。

    3. 在侧边栏中,单击 Security 标题下的 Network Access

      显示网络访问页面。

  2. 单击 Private Endpoint 标签页。

  3. 查看状态。

    Atlas Endpoint Service StatusEndpoint Status字段显示每个私有端点的状态。

请参阅以下状态,帮助您确定私有端点连接的状态:

Atlas Endpoint Service Status

状态
说明

创建私有链接

Atlas正在创建网络负载负载均衡器和 VPC资源。

已失败

出现系统故障。

available

Atlas网络负载负载均衡器和VPC端点服务已创建,可以接收连接请求。

删除

Atlas正在删除私有端点服务。

Endpoint Status

状态
说明

未配置

Atlas创建了网络负载负载均衡器和VPC端点服务,但Amazon Web Services尚未创建接口端点。单击 Edit 并完成向导以创建接口端点。

待接受

Amazon Web Services已收到从您的接口端点到Atlas VPC端点服务的连接请求。

待处理

Amazon Web Services正在接口端点和Atlas VPC端点服务之间建立连接。

已失败

Amazon Web Services 无法在Atlas VPC 资源和您 VPC 中的 接口端点 之间建立连接。单击 Edit,验证您提供的信息是否正确,然后再次创建私有端点。

重要提示:如果接口端点出现故障,您可能会看到以下消息:

No dns entries found for endpoint vpce-<guid>,
your endpoint must be provisioned in at least one subnet.
Click "Edit" to fix the problem.

此消息表明您在创建AWS PrivateLink连接时未指定子网。 要解决此错误,请执行以下操作:

  1. 单击 Edit(连接)。

  2. 单击 Back(连接)。

  3. 至少指定一个子网。

  4. 按照其余说明创建AWS PrivateLink连接。

available

Atlas VPC资源连接到VPC中的接口端点。您可以使用AWS PrivateLink连接到该地区中的Atlas集群。

删除

Atlas正在从私有端点服务中删除接口端点。

2
  1. 对于需要使用AWS PrivateLink连接到Atlas集群的每个资源,该资源的安全群组必须允许出站流量流向所有端口 (1024 -)65535 上接口端点的私有IP地址。

    有关更多信息,请参阅向安全组添加规则

  2. 您的接口端点安全群组必须允许需要使用AWS PrivateLink连接到Atlas集群的每个资源在所有端口上的入站流量。

    访问列表实例IP地址或安全组,以允许来自它们的流量到达接口端点安全群组。

VPC 中的客户端使用这些私有终结点感知连接字符串之一连接到 Atlas 集群时,客户端会尝试通过其中一个接口终结点与 Atlas VPC 中的负载均衡器建立连接。客户端的 DNS 解析机制会处理主机名解析到哪个接口终结点的问题。如果一个接口终结点不可用,则将使用下一个接口终结点。这个过程对驱动程序或其他连接机制是不透明的。驱动程序只知道 SRV 记录或连接字符串中的主机名。

DNS 种子列表私有端点感知连接字符串的 SRV 记录

以下示例显示了启用AWS PrivateLink的单区域集群的 SRV记录,以及为 pl-0-us-east-1.k45tj.mongodb.net 定义的三个唯一端口:

$ nslookup -type=SRV _mongodb._tcp.cluster0-pl-0.k45tj.mongodb.net
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
_mongodb._tcp.cluster0-pl-0.k45tj.mongodb.net service = 0 0 1026 pl-0-us-east-1.k45tj.mongodb.net.
_mongodb._tcp.cluster0-pl-0.k45tj.mongodb.net service = 0 0 1024 pl-0-us-east-1.k45tj.mongodb.net.
_mongodb._tcp.cluster0-pl-0.k45tj.mongodb.net service = 0 0 1025 pl-0-us-east-1.k45tj.mongodb.net.

在前面的示例中:

  • _mongodb._tcp.cluster0-pl-0.k45tj.mongodb.netmongodb+srv://cluster0-pl-0.k45tj.mongodb.net 连接字符串引用的 SRV 记录。

  • pl-0-us-east-1.k45tj.mongodb.net 是您已配置 AWS PrivateLink 的一个区域中一个 Atlas 集群的每个节点的主机名。

  • 102410251026 是 Atlas 在负载均衡器上为启用 AWS PrivateLink 的区域中每个 Atlas 副本集节点分配的唯一端口。Atlas 副本集中的所有节点都可通过相同的主机名访问,负载均衡器通过唯一端口解析各个节点。

私有端点感知连接字符串和 SRV 记录中的主机名 DNS 解析

SRV 记录和标准连接字符串中的主机名是 DNS 规范名称 (CNAME) 记录,解析为 AWS 为接口终结点生成的特定终结点的区域 DNS 名称。您将接口终结点部署到的 VPC 中的每个子网都有 DNS ALIAS 记录。每个 ALIAS 记录都包含该子网的接口终结点的私有 IP 地址。

以下示例显示了 SRV 记录和标准连接字符串中主机名的 DNS 查询,包括接口端点的特定端点区域 DNS 名称及其 DNS ALIAS 记录:

$ nslookup pl-0-us-east-1.k45tj.mongodb.net
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
pl-0-us-east-1.k45tj.mongodb.net
canonical name = vpce-024f5b57108c8d3ed-ypwbxwll.vpce-svc-02863655456245e5c.us-east-1.vpce.amazonaws.com.
Name: vpce-024f5b57108c8d3ed-ypwbxwll.vpce-svc-02863655456245e5c.us-east-1.vpce.amazonaws.com
Address: 10.0.30.194
Name: vpce-024f5b57108c8d3ed-ypwbxwll.vpce-svc-02863655456245e5c.us-east-1.vpce.amazonaws.com
Address: 10.0.20.54
$ mongosh "mongodb+srv://aws-replica-set-7-pl-0-lb.22qdu.mongodb-dev.net/" --apiVersion 1 --username sarah
Enter password: *****
Current Mongosh Log ID: 68910f1754be6d9adc74e399
Connecting to: mongodb+srv://<credentials>@aws-replica-set-7-pl-0-lb.22qdu.mongodb-dev.net/?appName=mongosh+2.5.6
MongoNetworkError: Client network socket disconnected before secure TLS connection was established
{"t":{"$date":"2025-08-04T19:48:17.649+00:00"},"s":"I", "c":"NETWORK",
"id":22942, "ctx":"listener","msg":"Connection refused because there are
too many open connections","attr":{"remote":"54.172.143.8:33205",
"isLoadBalanced":false,"uuid":{"uuid":{"$uuid":"e52e9c14-7648-430a-bc2e-95292347b7e0"}},
"connectionId":380,"connectionCount":58}}

注意

此功能正在逐步推出。我们预计到 20259 月底, Amazon Web Services中的所有专用集群都可以使用该功能。

  • 您可以在mongos日志中查看通过私有端点连接的分片的片集群的客户端端源IP 。

  • 您可以在mongod日志中查看通过私有端点连接的副本集的客户端端源IP 。

  • 您可以在Atlas 审核日志中查看通过私有端点连接的副本集和分片的集群的客户端端源IP 。

  • 以下版本的Amazon Web Services支持此功能:

    • 8.1 和 v8.1.0+

    • 8.0 和 v8.0.10+

    • 7.0 和 v7.0.22+

  • 原始客户端IP解决和端口由 sourceClient字段指示。在上面的示例中,该值为 10.50.4.23

    {"t":{"$date":"2025-07-21T12:15:42.123+00:00"},"s":"I","c":"NETWORK",
    "id":22943,"ctx":"listener","msg":"Connection accepted","attr":{"remote":"192.168.100.55:31245",
    "isLoadBalanced":true,"sourceClient":"10.50.4.23:50123","uuid":{"uuid":{"$uuid":"12345678-abcd-4321-abcd-87654321abcd"}},
    "connectionId":345,"connectionCount":19}}

收集这些详细信息需要使用jq 工具,该工具可以从jq网站下载。

以下查询提供从特定客户端IP解决创建的连接数。现在,您可以使用属性 sourceClient 收集确切的源VPC私有IP解决。

grep '"c":"NETWORK"' mongod.log | jq -c '.attr.sourceClient' | grep -v null | sort | uniq -c
1 "172.31.36.2:32958"
1 "172.31.36.2:52904"
1 "172.31.36.2:52908"
1 "172.31.36.2:52910"
1 "172.31.36.2:52918"

以下查询提供了每个驾驶员创建的连接数。这在客户可能为不同应用程序使用不同驱动程序的情况下非常有用。

more mongodb.log| grep 'NETWORK' | jq -r '.attr.doc.driver.name' | grep -v null | sort | uniq -c | sort -rn
56447 mongo-go-driver
21633 mongo-java-driver|sync
75 mongo-java-driver|sync|Airbyte
4 nodejs|Mongoose

要对连接计数和驾驶员详细信息进行更详细的分析,您可以使用以下Python脚本,该脚本提供了有关创建和终止的连接数量以及驾驶员名称和版本详细信息的全面信息。

import json
import sys
def process_log_file(json_file_path):
# Dictionary to store the filtered data
filtered_data = {}
with open(json_file_path, "r") as json_file:
# Read the file line by line
for line in json_file:
# Parse each line as a separate JSON object
data = json.loads(line)
if 'msg' in data and data['msg'] == 'client metadata':
# Extract the relevant data from the JSON object
drivername = data['attr']['doc']['driver']['name']
driverversion = data['attr']['doc']['driver']['version']
connectionid = data['ctx']
# Create a unique key for the driver based on name and version
driver_key = (drivername, driverversion)
# Add the connection ID to the driver's set of connections
if driver_key not in filtered_data:
filtered_data[driver_key] = {'connections': set(), 'opencount': 0, 'closedcount': 0}
filtered_data[driver_key]['connections'].add(connectionid)
filtered_data[driver_key]['opencount'] += 1
if 'msg' in data and data['msg'] == 'Connection ended':
connectionid = data['ctx']
# Check if the connection ID exists in any driver's connections
for driver_data in filtered_data.values():
if connectionid in driver_data['connections']:
driver_data['closedcount'] += 1
driver_data['connections'].remove(connectionid)
# Print the filtered data for each driver
for driver_key, driver_data in filtered_data.items():
print('Driver:', driver_key)
print('Connection Opened:', driver_data['opencount'])
print('Connection Closed:', driver_data['closedcount'])
if __name__ == '__main__':
# Check if a JSON file argument is provided
if len(sys.argv) < 2:
print("Please provide the path to a JSON file as an argument.")
sys.exit(1)
# Extract the JSON file path from the command-line arguments
json_file_path = sys.argv[1]
# Process the log file
process_log_file(json_file_path)
Driver: ('mongo-go-driver', 'v1.12.0-cloud')
Connection Opened: 14368
Connection Closed: 14362
Driver: ('mongo-go-driver', 'v1.12.1')
Connection Opened: 42056
Connection Closed: 41958
Driver: ('mongo-java-driver|sync', '4.11.1')
Connection Opened: 18012
Connection Closed: 17987
Driver: ('mongo-java-driver|sync', '4.8.2')
Connection Opened: 3621
Connection Closed: 3610
Driver: ('nodejs|Mongoose', '4.17.1|6.12.0')
Connection Opened: 3
Connection Closed: 1
Driver: ('mongo-go-driver', 'v1.13.0')
Connection Opened: 23
Connection Closed: 20
Driver: ('mongo-java-driver|sync|Airbyte', '4.11.0')
Connection Opened: 75
Connection Closed: 75
Driver: ('nodejs|Mongoose', '4.17.2|6.13.0')
Connection Opened: 1
Connection Closed: 0

我们可以建议客户在连接字符串中包含应用程序名称,以指定连接到集群的不同应用程序。 通过使用 appName,我们可以识别哪个应用程序将来会创建与集群的大量连接。appName有关在连接字符串中使用 的更多详细信息,请参阅我们文档的其他配置部分。此外,您可以使用 db.currentOp().appname 命令查看与应用程序名称关联的当前操作。以下查询提供了 appName 的详细信息以及该特定应用程序创建的连接数。

more mongodb.log| grep 'NETWORK' | jq -r '.attr.doc.application.name' | grep -v null | sort | uniq -c | sort -rn
10809 niyo-*******-api
8616 MongoDB CPS Module v13.17.2.8878 (git: 70c0b932f47f4f0b3e82a75e223f39ed9635b47f)
7203 niyo-ns*****
5752 MongoDB Automation Agent v13.17.2.8878 (git: 70c0b932f47f4f0b3e82a75e223f39ed9635b47f)
3601 *****-auth-service

提供的详细信息有助于查明导致大量连接的具体因素。通过分析源客户端IP、客户端元数据、驾驶员使用情况和应用程序名称,您可以确定哪些元素导致连接数增加,并确定需要调查的必要领域。这种有针对性的方法使您能够忽略其他不太相关的因素,并专注于解决突出显示的信息问题,最终简化缓解进程并提高集群性能。

仅当集群跨越的每个地区内都有一个节点配置了私有端点时,私有端点才在多区域集群中可用。要学习;了解有关配置多区域私有端点的更多信息,请参阅 多区域分片集群的区域化私有端点。

多区域集群的连接字符串索引

为新地区配置私有端点并将集群节点部署到该地区后,当您使用私有端点连接到集群时,可能会看到以下错误:

DNSHostNotFound: Failed to look up service "<MongoDB service name>"

当连接字符串的索引自动更改并且客户端随后重新启动时,会出现此错误,从而导致 SRV DNS 查找。 多区域集群的私有端点连接字符串使用索引0。 如果连接字符串使用不同的索引, MongoDB会自动更新连接字符串以使用 0索引。

示例,您可以为一个地区配置两个私有端点。如果删除第一个私有端点,则连接字符串将使用索引1 并类似于以下内容:

mongodb+srv://abc-pl-1.xxxxx.mongodb.net/

然后,假设您为集群中的新地区配置私有端点,并随后将集群节点添加到该地区。您的集群现在包括多个区域,并且您的连接字符串会更新为使用 0 的索引:

mongodb+srv://abc-pl-0.xxxxx.mongodb.net/

为了避免在客户端下次重新启动后出现潜在的连接问题,请确认您正在使用零索引的私有端点连接字符串来连接到集群。 集群更改完成后,您可以从Atlas用户界面或API访问权限更新的私有端点连接字符串。

您可以使用 nslookuptelnet 工具测试从应用程序到Atlas私有端点的连接。

1

使用 -type=SRV 标志运行 nslookup,以获取与集群中每个节点关联的端口号。

nslookup -type=SRV _mongodb._tcp.cluster0-pl-0.k45tj.mongodb.net
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
_mongodb._tcp.cluster0-pl-0.k45tj.mongodb.net service = 0 0 1026 pl-0-us-east-1.k45tj.mongodb.net.
_mongodb._tcp.cluster0-pl-0.k45tj.mongodb.net service = 0 0 1024 pl-0-us-east-1.k45tj.mongodb.net.
_mongodb._tcp.cluster0-pl-0.k45tj.mongodb.net service = 0 0 1025 pl-0-us-east-1.k45tj.mongodb.net.
2

在您的应用程序环境中,使用所列端口之一(示例,上述示例输出中的 102610241025)运行以下 telnet 命令来测试连接:

telnet pl-0-<xyz>.mongodb.net 1024
telnet pl-0-<xyz>.mongodb.net 1025
telnet pl-0-<xyz>.mongodb.net 1026

要查看每个私有端点的状态,请执行以下操作:

1

警告: 导航改进正在进行中

我们目前正在推出改进的全新导航体验。如果以下步骤与Atlas用户界面中的视图不匹配,请参阅预览文档。

  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。

  2. 如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。

  3. 在侧边栏中,单击 Security 标题下的 Network Access

    显示网络访问页面。

2
3

Atlas Endpoint Service StatusEndpoint Status字段显示每个私有端点的状态。

请参阅以下状态,帮助您确定私有端点连接的状态:

Atlas Endpoint Service Status

状态
说明

创建私有链接

Atlas正在创建负载负载均衡器和 VNet 资源。

已失败

出现系统故障。

available

Atlas创建了负载负载均衡器和Azure Private Link服务。 Azure Private Link服务已准备好接收连接请求。

删除

Atlas正在删除Azure Private Link服务。

Endpoint Status

状态
说明

未配置

Atlas创建了负载负载均衡器和Azure Private Link服务,但您尚未创建私有端点。 单击Edit并完成向导以创建私有端点。

启动

Atlas尚未接受与您的私有端点的连接。

已失败

Azure无法在Atlas VNet 资源和 VNet 中的私有端点之间建立连接。 单击Edit ,验证您提供的信息是否正确,然后再次创建私有端点。

available

Atlas VNet 资源连接到 VNet 中的私有端点。 您可以使用Azure Private Link连接到该地区中的Atlas集群。

删除

Atlas正在删除Azure Private Link Service 中的私有端点连接。

当 VNet 中的客户端使用这些私有终结点感知的连接字符串之一连接到 Atlas 集群时,该客户端会尝试通过私有终结点的网络接口与 Atlas VNet 中的私有链接服务建立连接。 Private Link 服务通过 Azure 标准负载均衡器将流量发送到你在该区域部署的 Atlas 集群节点。您的客户端的 DNS 解析机制负责将主机名解析为网络接口的私有 IP 地址。驱动程序只知道连接字符串中的主机名,并在集群副本集的每个节点上监听一个端口

DNS 种子列表私有端点感知连接字符串的 SRV 记录

以下示例展示启用 Azure Private Link 的单区域集群的 SRV 记录,同时显示为 pl-0-eastus2.uzgh6.mongodb.net 定义的三个唯一端口:

$ nslookup -type=SRV _mongodb._tcp.cluster0-pl-0.uzgh6.mongodb.net
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
_mongodb._tcp.cluster0-pl-0.uzgh6.mongodb.net service = 0 0 1024 pl-0-eastus2.uzgh6.mongodb.net.
_mongodb._tcp.cluster0-pl-0.uzgh6.mongodb.net service = 0 0 1025 pl-0-eastus2.uzgh6.mongodb.net.
_mongodb._tcp.cluster0-pl-0.uzgh6.mongodb.net service = 0 0 1026 pl-0-eastus2.uzgh6.mongodb.net.

在前面的示例中:

  • _mongodb._tcp.cluster0-pl-0.uzgh6.mongodb.net 是连接字符串引用的 SRV 记录。

  • pl-0-eastus2.uzgh6.mongodb.net 是您已配置Azure Private Link的一个地区中一个Atlas 集群中每个节点的主机名。

  • 102410251026 是Atlas在负载负载均衡器上为启用了Azure Private Link的地区中的每个Atlas副本集节点分配的唯一端口。 Atlas副本集集中的所有节点都可以通过相同的主机名访问,负载负载均衡器通过唯一端口解析各个节点。

私有端点感知连接字符串和 SRV 记录中的主机名 DNS 解析

SRV记录和标准连接字符串中的主机名是 DNSA 记录,可解析为私有端点网络接口的私有IP解决。

以下示例显示了在 SRV 记录和标准连接字符串中对主机名的 DNS 查询:

$ nslookup pl-0-eastus2.uzgh6.mongodb.net
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: pl-0-eastus2.uzgh6.mongodb.net
Address: 10.0.0.4

仅当集群跨越的每个地区内都有一个节点配置了私有端点时,私有端点才在多区域集群中可用。 要学习;了解有关配置多区域私有端点的更多信息,请参阅多区域分片集群的区域化私有端点。

多区域集群的连接字符串索引

为新地区配置私有端点并将集群节点部署到该地区后,当您使用私有端点连接到集群时,可能会看到以下错误:

DNSHostNotFound: Failed to look up service "<MongoDB service name>"

当连接字符串的索引自动更改并且客户端随后重新启动时,会出现此错误,从而导致 SRV DNS 查找。 多区域集群的私有端点连接字符串使用索引0。 如果连接字符串使用不同的索引, MongoDB会自动更新连接字符串以使用 0索引。

示例,您可以为一个地区配置两个私有端点。如果删除第一个私有端点,则连接字符串将使用索引1 并类似于以下内容:

mongodb+srv://abc-pl-1.xxxxx.mongodb.net/

然后,假设您为集群中的新地区配置私有端点,并随后将集群节点添加到该地区。您的集群现在包括多个区域,并且您的连接字符串会更新为使用 0 的索引:

mongodb+srv://abc-pl-0.xxxxx.mongodb.net/

为了避免在客户端下次重新启动后出现潜在的连接问题,请确认您正在使用零索引的私有端点连接字符串来连接到集群。 集群更改完成后,您可以从Atlas用户界面或API访问权限更新的私有端点连接字符串。

您可以使用 nslookuptelnet 工具测试从应用程序到Atlas私有端点的连接。

1

使用 -type=SRV 标志运行 nslookup,以获取与集群中每个节点关联的端口号。

nslookup -type=SRV _mongodb._tcp.cluster0-pl-0.k45tj.mongodb.net
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
_mongodb._tcp.cluster0-pl-0.k45tj.mongodb.net service = 0 0 1026 pl-0-us-east-1.k45tj.mongodb.net.
_mongodb._tcp.cluster0-pl-0.k45tj.mongodb.net service = 0 0 1024 pl-0-us-east-1.k45tj.mongodb.net.
_mongodb._tcp.cluster0-pl-0.k45tj.mongodb.net service = 0 0 1025 pl-0-us-east-1.k45tj.mongodb.net.
2

在您的应用程序环境中,使用所列端口之一(示例,上述示例输出中的 102610241025)运行以下 telnet 命令来测试连接:

telnet pl-0-<xyz>.mongodb.net 1024
telnet pl-0-<xyz>.mongodb.net 1025
telnet pl-0-<xyz>.mongodb.net 1026

要查看每个私有端点的状态,请执行以下操作:

1

警告: 导航改进正在进行中

我们目前正在推出改进的全新导航体验。如果以下步骤与Atlas用户界面中的视图不匹配,请参阅预览文档。

  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。

  2. 如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。

  3. 在侧边栏中,单击 Security 标题下的 Network Access

    显示网络访问页面。

2
3

Atlas Endpoint Service StatusEndpoint Status字段显示每个私有端点的状态。

请参阅以下状态,帮助您确定私有端点连接的状态:

Atlas Endpoint Service Status

状态
说明

创建私有链接

Atlas正在创建网络负载负载均衡器和VPC资源。

已失败

出现系统故障。

available

Atlas创建了网络负载负载均衡器和VPC端点服务。 私有端点服务已准备好接收连接请求。

删除

Atlas正在删除私有端点服务。

Endpoint Status

状态
说明

启动

Atlas尚未连接到您的私有端点,也尚未接受端点。

正在等待用户

Atlas上的VPC资源可供使用。 VPC您必须通过运行shell 脚本在 中设立端点。

已验证

Atlas已验证VPC中的端点,但尚未接受Google Cloud Platform VPC中的私有端点。Endpoint Status 可能需要几分钟才能变为 Available

available

Atlas VPC资源连接到Google Cloud Platform VPC中的私有端点。 Atlas已接受端点。 您可以使用GCP Private Service Connect 连接到该地区中的Atlas集群。

活跃的

Atlas已准备好使用VPC资源。 Atlas已接受端点。 将虚拟机分配给专用服务连接。

已失败

Google Cloud Platform无法在Atlas VPC资源与Google Cloud Platform VPC中的私有端点之间建立连接。 单击Edit ,验证您提供的信息是否正确,然后再次创建私有端点。

Deleted

您从Atlas中的某个地区手动删除了私有端点。 您还必须在Google Cloud Platform中删除私有端点才能删除资源。 待删除的地区群组。

仅当集群跨越的每个地区内都有一个节点配置了私有端点时,私有端点才在多区域集群中可用。 要学习;了解有关配置多区域私有端点的更多信息,请参阅多区域分片集群的区域化私有端点。

多区域集群的连接字符串索引

为新地区配置私有端点并将集群节点部署到该地区后,当您使用私有端点连接到集群时,可能会看到以下错误:

DNSHostNotFound: Failed to look up service "<MongoDB service name>"

当连接字符串的索引自动更改并且客户端随后重新启动时,会出现此错误,从而导致 SRV DNS 查找。 多区域集群的私有端点连接字符串使用索引0。 如果连接字符串使用不同的索引, MongoDB会自动更新连接字符串以使用 0索引。

示例,您可以为一个地区配置两个私有端点。如果删除第一个私有端点,则连接字符串将使用索引1 并类似于以下内容:

mongodb+srv://abc-pl-1.xxxxx.mongodb.net/

然后,假设您为集群中的新地区配置私有端点,并随后将集群节点添加到该地区。您的集群现在包括多个区域,并且您的连接字符串会更新为使用 0 的索引:

mongodb+srv://abc-pl-0.xxxxx.mongodb.net/

为了避免在客户端下次重新启动后出现潜在的连接问题,请确认您正在使用零索引的私有端点连接字符串来连接到集群。 集群更改完成后,您可以从Atlas用户界面或API访问权限更新的私有端点连接字符串。

您可以使用 nslookuptelnet 工具测试从应用程序到Atlas私有端点的连接。

1

使用 -type=SRV 标志运行 nslookup,以获取与集群中每个节点关联的端口号。

nslookup -debug -type=SRV _mongodb._tcp.gpc-mongo-pl-0-us-central1.test.mongodb.net
Server: 8.8.8.8
Address: 8.8.8.8#53
------------
QUESTIONS:
_mongodb._tcp.gpc-mongo-pl-0-us-central1.test.mongodb.net, type = SRV, class = IN
ANSWERS:
-> _mongodb._tcp.gpc-mongo-pl-0-us-central1.test.mongodb.net
service = 0 0 27017 pl-00-000-us-central1-gcp.test.mongodb.net.
ttl = 60
-> _mongodb._tcp.gpc-mongo-pl-0-us-central1.test.mongodb.net
service = 0 0 27017 pl-00-001-us-central1-gcp.test.mongodb.net.
ttl = 60
-> _mongodb._tcp.gpc-mongo-pl-0-us-central1.test.mongodb.net
service = 0 0 27017 pl-00-002-us-central1-gcp.test.mongodb.net.
ttl = 60
AUTHORITY RECORDS:
ADDITIONAL RECORDS:
------------
Non-authoritative answer:
_mongodb._tcp.gpc-mongo-pl-0-us-central1.test.mongodb.net service = 0 0 27017 pl-00-000-us-central1-gcp.test.mongodb.net.
_mongodb._tcp.gpc-mongo-pl-0-us-central1.test.mongodb.net service = 0 0 27017 pl-00-001-us-central1-gcp.test.mongodb.net.
_mongodb._tcp.gpc-mongo-pl-0-us-central1.test.mongodb.net service = 0 0 27017 pl-00-002-us-central1-gcp.test.mongodb.net.
2

在应用程序环境中,使用所列端口之一(示例,上述示例输出中的 27017)运行以下 telnet 命令来测试连接:

telnet pl-0-<xyz>.mongodb.net 27017

后退

管理和连接

在此页面上