MongoDB 云数据库常见问题诊断-阿里云开发者社区

开发者社区> 开发者小助手> 正文

MongoDB 云数据库常见问题诊断

简介: MongoDB 云数据库常见问题诊断
+关注继续查看

重要的内容


MongoDB 的主备节点在运行过程中是不固定的,实例重启、升级、节点故障等都有可能导致主备切换,在生产环境应该使用副本集的方式来正确连接MongoDB 来实现高可用。


连接问题


用户可通过 DMS mongo shell 连接 MongoDB 云数据库,以下场景都基于用户使用 mongo shell 连接数据库。

Q:  连接实例提示网络超时?

image.pngimage.png

通过 telnet 来确认是否是网络不通导致的,例如

telnet dds-uf69ba5cf6e123442.mongodb.rds.aliyuncs.com 3717


网络不通可能的原因:


1. ECS MongoDB 节点不在同一个可用区

2. ECS MongoDB 节点不在同一个 vpc 环境


Q:  连接实例提示鉴权失败?

image.png

可能的原因

1. 密码错误,可在控制台重置 root 密码

2. 连接的用户跟数据库不匹配,比如 root 用户是 admin 数据库下的用户,则使用 root 连接时,必须指定鉴权数据库为 admin3. 客户端版本过低,mongo shell 版本必须是 3.0+,其他语言客户端的版本要求参考 Driver 兼容性文档


Q:  连接 Secondary 执行执行命令时,提示 slaveOk=false 错误?
image.png
默认情况下,MongoDB 的读写请求都必须到 Primary 节点,Secondary 默认是
不可读的,除非客户端显式的指定 Secondary 节点可读(通过设置
readPreference)。
mongoshell 连接时,可以执行 rs.slaveOk()来指定备可读


image.png


如果想 mongo shell 一直连接到 Priamry 节点,可通过如下方式连接

mongo --host  副本集名称/节点 1,节点 2 --authenticationDatabase admin -u
system -p xxx
例如
mongo --host
mg-100101/dds-uf69ba5cf6e123442.mongodb.rds.aliyuncs.com:3717,dds-uf6
9ba5cf6e123441.mongodb.rds.aliyuncs.com:3717   --authenticationDatabase
admin -u system -p xxx


注意:MongoDB 的主备节点在运行过程中是不固定的,实例重启、升级、节点故障等都有可能导致主备切换,在生产环境应该使用副本集的方式来正确连接MongoDB 来实现高可用。


Q:  连接时提示

image.png


上述错误通常是实例的连接数已经达到上限,无法再建立更多的网络连接,可在控制台查看实例连接数的使用情况确认。用户使用实例时应该合理的规划并控制实例的连接数,避免因为连接数耗尽而无法连接实例,如果业务上的

确需要更多的网络连接,则需要升级实例的规格。连接数的管理请参考下面『连
接数问题』部分。


连接数问题      


 Q:  如何查看当前连接     


1. 登录阿里云控制台查看

2. 使用 mongo shell 连接实例,执行如下命令,其中 current 代表当前已建立连接数,available 代表当前可用连接数,internal*的连接用于内部管理,用户可忽略。

image.png

Q:  如何查看当前连接主要来自哪些 ECS 机器?

mongoshell DMS(如果连接数已满,则只能通过 DMS 来登录查看)连接实例,执行db.runCommand({currentOp: 1, $all: true}),就能输出所有跟该实例建立的所有连接情况,其中 client 字段包含了 ECS ip 地址信息。


image.png

image.png


有了上述结果,用户就可以根据来源 ip 做进一步的分析,得出各个 ECS 跟实例分别建立了多少连接等信息。


Q:  生产环境连接数快满了,如何限制每个 ECS 到实例的连接数量?


MongoDB 基本所有的 driver 都支持通过 Connection String URI 来连接实例云数据库的连接 URI 已为用户在控制上生成好,加上密码信息就能直接使用。


如果采用 URI 来连接实例的,在 URI 末尾加上&maxPoolSize=xx 来限制到实例的连接数即可,比如你有 10 ECS 并发访问实例,实例的最大连接数为 1000那么每个 ECS 上的连接池的数量要控制在 100 以内。


不同语言的客户端可能封装了不通的连接方式,但也一定有方法指定连接池的数量限制,具体参考各语言客户端的 api 文档。


附在高问题

用率很高,想看看实例正在执行什么 

Q:CPU利用率很高,想看看实例正在执行什么操作?

image.png

造成实例负载高的典型 case


1. 并发请求的量太大,超出当前规格的服务能力

2. 查询集合时,没有合理的建索引,导致全表扫描或排序

3. 正在跑一些计算量很大的 mapreduce 或者 aggregation 任务


正在执行的操作都包含一个 opid 字段,用户可以根据 opid 字段直接 kill 掉对应的操作

mongo-test:PRIMARY> db.killOp(opid)


仍然无法解决问题


请查看 FAQ 文档,或提交工单。 负载高问题


以上内容来自于《云数据库运维实战手册》,可点击https://developer.aliyun.com/topic/download?id=8198下载完整版

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10080 0
【MOS】RAC 环境中 gc block lost 和私网通信性能问题的诊断 (文档 ID 1674865.1)
【MOS】RAC 环境中 gc block lost 和私网通信性能问题的诊断 (文档 ID 1674865.1) 文档内容 症状   ...
1581 0
MongoDB 云数据库常见问题诊断
MongoDB 云数据库常见问题诊断
69 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13885 0
【MOS】如何诊断 11.2 集群节点驱逐问题 (文档 ID 1674872.1)
【MOS】如何诊断 11.2 集群节点驱逐问题 (文档 ID 1674872.1) 文档内容 用途 适用范围 ...
1260 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
7365 0
1444
文章
309
问答
来源圈子
更多
阿里云数据库:帮用户承担一切数据库风险,给您何止是安心!支持关系型数据库:MySQL、SQL Server、PostgreSQL、PPAS(完美兼容Oracle)、自研PB级数据存储的分布式数据库Petadata、自研金融级云数据库OceanBase支持NoSQL数据库:MongoDB、Redis、Memcache更有褚霸、丁奇、德哥、彭立勋、玄惭、叶翔等顶尖数据库专家服务。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载