MongoDB常见连接问题总结

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介:

image

总结:

1、外部网络原因导致的连接问题的因素很多,不过这类问题比较好排查,可以引导用户连续的ping ConnectString 即可进行诊断,不在同一个VPC的是无法ping 通的。

2、用户因素导致的连接问题需要重点说明下:

a、版本驱动的要求,MongoDB 要求用户如果使用Mongo Shell登录,则Mongo shell版本必须是3.0+,其他语言客户端版本要求参考:Driver兼容性要求,如果版本不对会报认证失败的错误,这种情况就建议用户升级Driver版本。

b、用户mongo shell连接姿势不对,Mongo shell目前常见的3种连接方式为:

1)、mongo mongodb://[Login_User]:@[ConnectString_URL]:[Instance_Port]/[Auth_Database],

    例子:mongo mongodb://root:@s-2zec38d903fc0af4-pub.mongodb.rds.aliyuncs.com:3717/admin                   

2)、mongo [ConnectString_URL]:[Instance_port]/[Auth_Database] -u[Login_User] -p[Password],

    例子:mongo dds-2ze15a12d4c7e5f41172-pub.mongodb.rds.aliyuncs.com:3717 -uroot -p

3)、mongo --host [ConnectString_URL]:[Instance_Port] --authenticationDatabase [Auth_Database] -u [Login_User] -p [Password],

    例子:mongo  --host dds-2ze15a12d4c7e5f41172-pub.mongodb.rds.aliyuncs.com:3717 --authenticationDatabase admin -u root -p            

副本集连接方式:mongo mongodb://root:[Password]@dds-2ze15a12d4c7e5f41172-pub.mongodb.rds.aliyuncs.com:3717,dds-2ze15a12d4c7e5f42730-pub.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-6189843

这类问题比较多遇到的是用户的参数写错了,端口号不对等,另外一个比较多的用户使用误区是用户连接地址写成secondary节点地址,这种情况下用户会反馈无法读取数据,这是因为Replica sets中的secondary节点默认是不可读的,需要用户在连接中执行rs.slaveOk()或者db.getMongo().setSlaveOk()后即可正常查询,需要注意的是这是session级别的调整,新连接需要再次设置,如不想每次设置,可以参考我上面的加replicaSet的连接方式,这种情况下Driver会去判断哪个节点是Primary,并与之建连。

更详细的Connection String URI 请参考:Connection String URI Format。(生产环境一定要引导用户使用控制台上的Connect String去连接)

c、账户密码不对这个也遇到的比较多,还有一个就是登陆账户与认证数据库不匹配,MongoDB 中账户与数据库是绑定的,查看账户的详细信息可以在admin库下执行db.system.users.find();进行查看,这类情况请用户仔细核对账户、密码和认证的数据库三者是否正常。

d、用户应用程序配置的并发连接数个数过低,MongoDB实例监控看还有空闲连接,这种情况可以通过db.serverStatus().connections进行查看确认,如果current一直无法增长且值比应用端配置的连接池并发数大1则极有可能是这种情况,间接的情况就是Mongo shell可以多个客户端同时登陆,应用端缺无法新建连接进来,这种情况需要用户调大应用端连接池的并发数。

e、实例连接数打满一般都是用户的业务变化或者使用不当导致实例连接耗尽,可以通过实例的秒级监控进行确认,或者尝试执行db.serverStatus().connections进行确认,如果available值基本为0,则可以判定,通常应用端会把报:Connections refused because too many open connections的错误(连接地址不在白名单内也会报这个错误,请用户检查白名单配置),这类情况就先用户在业务端进行调整和优化,例如优化慢查询、业务限流、规格升级等。

排查步骤:

    1、ping  [连接地址URL]     确认网络层面是否通以及DNS是否正常解析
    2、telnet [连接地址URL]  [实例端口]     telnet确认端口是否正常通信以及再次确认DNS是否正常解析
    3、mongo shell客户端方式登录测试    用户使用的其他工具登录结果不能做为判断标准,以mongo shell登录结果为准
    4、网络抓包,通过分析抓包文件定位问题点

网络抓包:

      1、普通抓包,问题复现即终止
         打开一个到 ECS 的 ssh 连接,并以 root 身份登录。在该窗口运行下列命令
        tcpdump -i any -s 0 -w /var/tmp/rds.cap port MongoDB实例端口 or 53  
      2、抓一段时间包,问题复现终止
          打开一个到 ECS 的 ssh 连接,并以 root 身份登录。在该窗口运行下列命令(下面的命令抓 60 分钟的包,每 5 分钟保存一个文件)
         tcpdump -i any -s 0 -w /var/tmp/rds_%Y-%m-%d_%H-%M-%S.cap -G 300 -W 12 port MongoDB实例端口 and 53
      3、固定大小循环抓包,问题复现终止
          打开一个到 ECS 的 ssh 连接,并以 root 身份登录。在该窗口运行下列命令(下面的命令将抓包结果保存在 20 个 50 MB 文件中,循环使用)
          tcpdump -i any -s 0 -w /var/tmp/rds.cap -C 50 -W 20 port MongoDB实例端口 or 53
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
7月前
|
NoSQL Java MongoDB
java连接MongoDB
java连接MongoDB
|
7月前
|
存储 NoSQL 网络安全
修改mongodb的连接参数
在MongoDB中,你可以通过连接字符串(connection string)来配置连接参数。连接字符串是一个包含连接信息的字符串,可以包括主机地址、端口、认证信息、数据库名等。 下面是一些常见的连接参数,你可以根据需要进行修改: 1. **主机地址(host):** MongoDB服务器的地址。可以是IP地址或主机名。 ```mongodb mongodb://localhost:27017 ``` 2. **端口号(port):** MongoDB服务器的端口号。默认端口号是27017。 ```mongodb mongodb://localhost:
327 1
|
7月前
|
NoSQL JavaScript 前端开发
如何使用 Node.js 连接和操作 MongoDB 数据库?
如何使用 Node.js 连接和操作 MongoDB 数据库?
547 2
|
NoSQL MongoDB Python
python mongodb pymongo 连接 身份认证
python mongodb pymongo 连接 身份认证
117 0
|
2月前
|
NoSQL 网络安全 MongoDB
MongoDB - 连接
10月更文挑战第12天
22 1
|
2月前
|
NoSQL 前端开发 JavaScript
Node.js 连接 MongoDB
10月更文挑战第20天
46 0
|
2月前
|
NoSQL 前端开发 JavaScript
Node.js 连接 MongoDB
10月更文挑战第9天
60 0
|
3月前
|
存储 NoSQL MongoDB
01 MongoDB的概述、应用场景、下载方式、连接方式和发展历史等
文章详细介绍了MongoDB的概览、应用场景、下载与连接方式,并涵盖了MongoDB的主要特性及其在数据存储方面的优势。
41 0
|
4月前
|
JavaScript NoSQL 前端开发
|
6月前
|
NoSQL 关系型数据库 Java
实时计算 Flink版产品使用问题之如何使用Flink MongoDB Connector连接MongoDB
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。