文档数据库服务

数据库连接

2025-07-02 02:24:27

无法建立与文档数据库服务的连接

排查方向

根据九个方面考虑的标准,你可以将连接失败的处理步骤整理如下:

排除数据库实例异常 

  1. 检查文档数据库服务系统是否出现故障,确认实例状态是否正常。

  2. 确认没有其他进程或用户锁定了实例或表。

使用正确的客户端连接方式 

  1. 确保使用正确版本的MongoDB客户端,建议使用4.0版本以上。

  2. 对于内网连接,确保文档数据库服务和ECS实例在同一区域和VPC内。

  3. 对于公网连接,确保购买或使用已有的EIP,并将其绑定到文档数据库服务实例。

使用正确的SSL方式安全连接 

  1. 确认SSL开关的状态,根据开关状态使用正确的连接命令。

  2. 确保提供了正确的SSL证书文件路径。

排除连接命令错误 

  1. 检查连接地址、端口、用户名和密码是否配置正确。

  2. SSL方式下,检查连接命令是否正确设置了SSL相关参数。

排除网络不通 

  1. 对于内网访问,检查ECS和文档数据库服务实例是否在同一区域和VPC,如不在同一VPC,建立VPC对等连接。

  2. 检查安全组规则,确保允许文档数据库服务实例的相关端口通过。

  3. 对于公网访问,检查安全组和网络ACL规则,确保允许访问文档数据库服务实例的相关端口。

  4. 测试ECS是否能够ping通文档数据库服务实例地址的端口。

跨网段访问(配置IP映射) 

  1. 确认是否需要跨网段访问配置,根据情况进行相应的网络配置。

排除实例的连接数满 

  1. 检查实例的连接数,确保连接数未达到上限。

排除磁盘满的情况 

  1. 检查实例磁盘使用率,确保磁盘未满,导致无法正常连接实例。

排除CPU使用率飙升问题 

  1. 检查实例的CPU使用率,确保CPU正常运行,避免影响数据读写处理和连接。

排查思路

确认数据库实例状态 

• 通过文档数据库服务控制台检查文档数据库服务实例是否运行正常。

验证连接字符串 

• 检查连接字符串是否正确,包含正确的主机名(或IP地址)、端口号、用户名和密码等信息。

检查网络连接 

• 确保你的网络连接正常,尝试访问其他网站或服务来验证网络是否工作正常。

检查安全组和防火墙规则 

• 确保安全组和防火墙规则允许与DDS实例相关的端口通过,特别是如果涉及公网访问。

验证SSL配置(如果使用) 

• 如果连接使用SSL方式,首先通过文档数据库服务控制台基本信息查看SSL是否开启,并且上传证书到ECS。

• 连接命令如下:

./mongo --ssl --host <DB_HOST> --port <DB_PORT> -u <DB_USER> -p --authenticationDatabase <AUTH_DB> --sslCAFile <CA_FILE_PATH> --sslAllowInvalidHostnames

• 其中,各参数的含义如下:

– --ssl: 启用 SSL 连接。

– --host <DB_HOST>: 指定 MongoDB 数据库的主机名或 IP 地址。

– --port <DB_PORT>: 指定 MongoDB 数据库的端口号。

– -u <DB_USER>: 指定用于认证的 MongoDB 用户名。

– -p: 表示在命令行中输入密码。在输入该命令后,系统会提示您输入 MongoDB 用户的密码。

– --authenticationDatabase <AUTH_DB>: 指定认证所使用的数据库。在这里指定为认证用户所在的数据库。

– --sslCAFile <CA_FILE_PATH>: 指定 SSL 连接时的 CA(Certificate Authority)文件的路径。该文件用于验证服务器端证书的合法性。

– --sslAllowInvalidHostnames: 允许连接到 SSL 服务器时不验证服务器的主机名。这个选项用于在连接时忽略 SSL 证书中的主机名不匹配错误。

 需要将 <DB_HOST>、<DB_PORT>、<DB_USER>、<AUTH_DB> 和 <CA_FILE_PATH>替换为实际的 MongoDB 数据库的主机名、端口号、用户名、认证数据库和 SSL CA 文件的路径。

确认用户权限 

• 确保使用的用户名和密码具有连接到文档数据库服务实例的权限。

尝试使用其他客户端工具 

• 如果连接失败是由于客户端工具问题,尝试使用其他客户端工具进行连接,以排除客户端工具本身的问题。

查看错误日志 

• 检查连接失败时产生的错误日志或错误消息,这些信息可能有助于找到问题的原因。

检查连接数和资源使用情况 

• 确认文档数据库服务实例的连接数是否达到上限,以及磁盘和CPU的使用情况是否正常。

验证内网/公网访问配置 

• 对于内网访问,确认文档数据库服务和ECS实例是否在同一区域和VPC,如果不在同一VPC,检查VPC对等连接配置。

• 对于公网访问,确保ECS和文档数据库服务实例的安全组和网络ACL规则允许相应端口通过,并验证ECS是否能够ping通文档数据库服务实例地址的端口。

排除其他因素 

• 排除可能影响连接的其他因素,例如阻塞的进程、资源竞争等。

如何应对因实例连接数达到最大限制而引发的连接失败问题

问题现象

• Python连接文档数据库服务时的错误 

– pymongo.errors.ServerSelectionTimeoutError:表示Python的MongoDB驱动(pymongo)无法选择可用的文档数据库服务服务器,连接超时。

• Java连接文档数据库服务时的错误 

– com.mongodb.MongoTimeoutException:表示Java的MongoDB驱动无法在规定的时间内连接到文档数据库服务实例,连接超时。

可能原因

• 分片集群(Sharded Cluster):

– 读写请求过多,超过了分片集群的连接数上限。

– 部分分片服务器负载过高,无法处理更多的连接请求。

– 分片键设计不合理,导致部分分片集群负载不均衡。

• 副本集(Replica Set):

– 读写请求过多,超过了副本集的连接数上限。

– 副本集中的主节点(Primary)负载过高,无法处理更多的连接请求。

• 单节点实例:

– 读写请求过多,超过了单节点实例的连接数上限。

处理思路

• 请及时排查业务侧连接是否有效,优化实例连接,释放不必要的连接。

• 排查“net.maxIncomingConnections”参数的值及实例规格,修改参数值或对数据库进行规格扩容。

• 通过文档数据库服务控制台,基本信息页查看监控信息、CPU、内存、磁盘、连接数等指标,通过控制台的告警中心设置告警策略,出现告警时可以提前识别风险。

处理方法

优化实例连接,释放不必要的连接。

• 您可以通过重启实例来临时释放所有的连接。

• 您可以查询节点当前连接数,以及当前连接来源,分析各个终端和文档数据库服务实例分别建立了多少连接,并作出相应调整。

db.serverStatus().connections
{ "current" : 7, "available" : 398, "totalCreated" : 818364 }
#您需要关注以下参数及对应的值:
current:当前已经建立的连接数。
available:当前可用的连接数。

修改参数值或对数据库进行规格扩容。

• 通过文档数据库服务参数设置页面connPoolMaxConnsPerHost 的值进行调整,修改后重启实例生效。

• 如果调整连接数过大,可能导致服务崩溃,这时只能通过变更实例规格增加承载的连接数的数量。

如何检索当前连接数量并对其进行控制

查询并修改当前连接数配置值

购买文档数据库服务实例规格不同,最大连接数也不同。

登录文档数据库服务管理控制台,查询当前连接数:

  1. 实例列表页,点击运行状态是“运行中”的实例ID。

  2. 进入实例详情页。

  3. 点击“参数设置”菜单栏,通过 connPoolMaxConnsPerHost 参数的值,可以查看到当前实例连接数配置值。

  4. 通过修改 connPoolMaxConnsPerHost 参数可以限制连接数。

ECS和文档数据库分别安置于互不连通的VPC环境中时,如何处理

请参考弹性云主机-用户指南-网卡-切换虚拟私有云,将ECS的虚拟私有云切换为与文档数据库服务相同的虚拟私有云。

应用程序是否需要支持自动重连数据库

需要,应用程序在文档数据库服务重启后应该支持自动重连数据库。文档数据库服务的重启可能是计划内的维护操作,也可能是出于异常情况而进行的,无论哪种情况,都可能导致数据库连接中断。为了保障应用的连续性和可靠性,应用程序应该具备自动重连的能力。

同时建议您的应用程序采用长连接方式连接数据库,以降低资源消耗,提高性能。

如何创建并登录弹性云服务器

创建并登录弹性云服务器,请参见弹性云主机-快速入门-创建弹性云主机弹性云主机-快速入门-登录弹性云主机

• 该弹性云服务器用于连接文档数据库实例,需要与待连接的实例处于同一虚拟私有云子网内。

• 创建弹性云服务器时,要选择操作系统,例如centos7.6,并为其绑定EIP。

• 正确配置安全组,使弹性云服务器可以直接连接文档数据库服务。


bSwQFdlsAenK