目录
常见问题 ........................................................................................................................ 3
MongoDB 云数据库常见问题诊断 ..................................................................... 3
云数据库 MongoDB FAQ ................................................................................ 11
RDS MySQL FAQ ............................................................................................ 1 5
RDS PostgreSQL FAQ .................................................................................... 22
云数据库 Redis FAQ ........................................................................................ 2 6
MongoDB................................................................................................................. 2 7
性能问题 .............................................................................................................2 7
MongoDB 磁盘 IO 高问题 .......................................................................2 7
MongoDB 空间使用问题 .........................................................................3 3
MongoDB 内存高问题 .............................................................................4 6
RDS MySQL .............................................................................................................5 5
排错实战 .............................................................................................................5 5
RDS MySQL 活跃线程数高问题 ............................................................5 5
RDS MySQL 慢 SQL 问题 ...................................................................... 59
巡检维护 ............................................................................................................. 77
RDS MySQL 巡检到底巡检什么 ............................................................ 77
RDS MySQL 运维之小版本升级 ............................................................8 5
性能问题 ............................................................................................................. 87
RDS MySQL 实例 IO 高问题 ................................................................. 87
1
RDS MySQL 实例空间问题 ....................................................................9 3
DS MySQL 内存使用问题 ..................................................................... . 10 5
运维实战 ........................................................................................................... 11 0
RDS MySQL 高并发场景实战 ...............................................................11 0
RDS PostgreSQL ..................................................................................................13 3
运维实战 ........................................................................................................... 13 3
RDS PostgreSQL 慢 SQL 问题 ........................................................... 13 3
RDS PostgreSQL CPU 高问题 ............................................................. 14 8
RDS PostgreSQL 实例 IO 高问题 .......................................................15 3
RDS PostgreSQL 监控实战 基于 Pigsty 解决实际监控问题 .......... 16 0
Redis........................................................................................................................ 17 5
性能问题 .......................................................................................................... 17 5
Redis CPU 高问题 ................................................................................ 17 5
Redis 内存高问题 ................................................................................. 18 3
Redis 流控问题 ..................................................................................... 19 2
运维实战 .......................................................................................................... 19 5
Redis 的运维实战 .................................................................................. 19 5
Redis 的开发规范和常见问题 .............................................................. 21 3
2
常见问题
MongoDB 云数据库常见问题诊断
作者 张友东(林青)
重要的内容
MongoDB 的主备节点在运行过程中是不固定的,实例重启、升级、节点故障
等都有可能导致主备切换,在生产环境应该 使用副本集的方式来正确连接
MongoDB 来实现高可用。
连接问题
用户可 通过 DMS 或 mongo shell 连接 MongoDB 云数据库 ,以下场景都基于用
户使用 mongo shell 连接数据库。
Q: 连接实例提示网络超时 ?
# /u01/mongodb_current/bin/mongo --host
dds-uf69ba5cf6e123442.mongodb.rds.aliyuncs.com:3717
--authenticationDatabase admin -u root -p xxx
MongoDB shell version: 3.2.3
DB Prefix:
connecting to: 10.1.2.8 :3717/admin
2016-05 -31T15:25:58.940+0800 W NETWORK Failed to connect to
10.1.2.8 :3717 after 5000 milliseconds, giving up.
2016-05 -31T15:25:58.943+0800 E QUERY
Error: couldn't connect to
server 10.1.2.8 :3717 (10.1.2.8), connection attempt failed
at connect (src/mongo/shell/mongo.js:181:14)
3
at (connect):1:6 a t src/mongo/shell/mongo.js:181
exception: connect failed
通过 telnet 来确认是否是网络不通导致的,例如
telnet dds-uf69ba5cf6e123442 .mongodb.rds.aliyuncs.com 3717
网络不通可能的原因:
1. ECS 跟 MongoDB 节点不在同一个可用区
2. ECS 跟 MongoDB 节点不在同一个 vpc 环境
Q: 连接实例提示鉴权失败?
$mongo --host dds-uf69ba5cf6e123442.mongodb.rds.aliyuncs.com: 3717
--authenticationDatabase admin -u root -p xxx
MongoDB shell version: 3.2.3
connecting to: 10.1.2.8 : 3717 /test
2016-05-31 T15: 50 : 18.623 + 0800 E QUERY
Error: 18 Authentication failed.
at DB._authOrThrow (src/mongo/shell/db.js: 1271 : 32 )
at (auth): 6 : 8
at (auth): 7 : 2 at src/mongo/shell/db.js: 1271
exception: login failed
可能的原因
1. 密码错误,可在控制台重置 root 密码
2. 连接的用户跟数据库不匹配,比如 root 用户是 admin 数据库下的用户,
则使用 root 连接时,必须指定鉴权数据库为 admin
3. 客户端版本过低, mongo shell 版本必须是 3.0+ ,其他语言客户端的版
本要求参考 Driver 兼容性文档
4
Q: 连接 Secondary 执行执行命令时,提示 slaveOk=false 错误?
$mongo --host dds-uf69ba5cf6e123442.mongodb.rds.aliyuncs.com: 3717
--authenticationDatabase admin -u root -p xxx
MongoDB shell version: 3.2.3
connecting to: 10.1.2.8 : 3717 /test
mongo -9551 :SECONDARY> show dbs
2016-05-31 T15: 54 : 13.527 + 0800 E QUERY
Error: listDatabases
failed:{ "ok" : 0 , "errmsg" : "not master and slaveOk=false" , "code" : 13435 }
at Error (<anonymous>)
at Mongo.getDBs (src/mongo/shell/mongo.js: 47 : 15 )
at shellHelper.show (src/mongo/shell/utils.js: 630 : 33 )
at shellHelper (src/mongo/shell/utils.js: 524 : 36 )
at (shellhelp2): 1 : 1 at src/mongo/shell/mongo.js: 47
默认情况下, MongoDB 的读写请求都必须到 Primary 节点, Secondary 默认是
不可读的,除非客户端显式的指定 Secondary 节点可读(通过设置
readPreference )。
mongoshell 连接时,可以执行 rs.slaveOk() 来指定备可读
$mongo --host dds-uf69ba5cf6e123442.mongodb.rds.aliyuncs.com: 3717
--authenticationDatabase admin -u system -p xxx
MongoDB shell version: 3.2.3
connecting to: 10.1.2.8 : 3717 /test
mongo -9551 :SECONDARY> rs.slaveOk()
mongo -9551 :SECONDARY> show dbs
admin 0.000 GB
hello 0.000 GB
local 0.000 GB
test 0.000 GB
如果想 mongo shell 一直连接到 Priamry 节点,可通过如下方式连接
5
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: 连接时提示 Connection reset by peers ?
$mongo --host dds-uf69ba5cf6e123442.mongodb.rds.aliyuncs.com:3717
--authenticationDatabase admin -u root -p xxx
MongoDB shell version: 3.2.3
connecting to : 10.1.2.8:3717/test
2016-05-31T16:25:58.940+0800 I NETWORK Socket recv() errno:54
Connection reset by peer ç
2016-05-31T16:25:58.940+0800 I NETWORK SocketException: remote:
10.1.2.8:3717 error: 9001 socket exception [RECV_ERROR] server
[10.1.2.8:3717]
2016-05-31T16:25:58.940+0800 I NETWORK DBClientCursor::init call()
failed
上述错误通常是实例的连接数已经达到上限,无法再建立更多的网络连接,可
在控制台查看实例连接数的使用情况确认。用户使用实例时应该合理的规划
并控制实例的连接数,避免因为连接数耗尽而无法连接实例,如果业务上的
6
确需要更多的网络连接,则需要升级实例的规格。连接数的管理请参考下面『连
接数问题』部分。
连接数问题
1. 登录阿里云控制台查看
2. 使用 mongo shell 连接实例,执行如下命令,其中 current 代表当前已建
立连接数, available 代表当前可用连接数, internal* 的连接用于内部管理,用
户可忽略。
3. mongo-test:PRIMARY> db.serverStatus().connections
4.
{
5.
"current" : 0,
6.
"available" : 2000,
7.
"internal_current" : 3,
8.
"internal_available" : 497,
9.
"totalCreated" : NumberLong ( 21 )
10.
}
Q: 如何查看当前连接主要来自哪些 ECS 机器?
mongoshell 或 DMS( 如果连接数已满,则只能通过 DMS 来登录查看 ) 连接实例,
执行 db.runCommand({currentOp: 1, $all: true}) ,就能输出所有跟该实例建立的
所有连接情况,其中 client 字段包含了 ECS 的 ip 地址信息。
> db.runCommand({ currentOp: 1 , $all: true })
7
Q: 如何查看当前连接数?
{
"inprog" : [
{
"desc" : "conn20" ,
"threadId" : "140353731274496" ,
"connectionId" : 20 ,
"client" : "10.1.2.7:28788" ,
"active" : false
},
...
有了上述结果,用户就可以根据来源 ip 做进一步的分析,得出各个 ECS 跟实例
分别建立了多少连接等信息。
Q: 生产环境连接数快满了,如何限制每个 ECS 到实例的连接数量?
MongoDB 基本所有的 driver 都支持通过 Connection String URI 来连接实例 ,
云数据库的连接 URI 已为用户在控制上生成好,加上密码信息就能直接使用。
如果采用 URI 来连接实例的,在 URI 末尾加上 &maxPoolSize=xx 来限制到实例
的连接数即可,比如你有 10 台 ECS 并发访问实例,实例的最大连接数为 1000 ,
那么每个 ECS 上的连接池的数量要控制在 100 以内。
不同语言的客户端 可能封装了不通的连接方式,但也一定有方法指定连接池的数
量限制,具体参考各语言客户端的 api 文档。
8
mongo shell 连接实例,执行 db.currentOp()
mongo-test :PRIMARY > db .currentOp ()
造成实例负载高的典型 case
1. 并发请求的量太大,超出当前规格的服务能力
2. 查询集合时,没有合理的建索引,导致全表扫描或排序
3. 正在跑一些计算量很大的 mapreduce 或者 aggregation 任务
正在执行的操作都包含一个 opid 字段,用户可以根据 opid 字段直接 kill 掉对应
的操作
mongo-test :PRIMARY > db .killOp ( opid )
仍然无法解决问题
请查看 FAQ 文档,或提交工单。
9
负载高问题
Q: CPU 利用率很高,想看看实例正在执行什么操作?
云数据库 MongoDB FAQ
MongoDB 功能定位是怎样的?
MongoDB 介于 Memcached 和关系型数据库之间,扩展性和性能上,
MongoDB 更接近于 Memcached ,功能上, MongoDB 更接近于关系型数据库。
MongoDB 部署模型是怎样的?
在生产环境中, MongoDB 经常会部署成一个三节点的复制集,或者一个分片集群。
1. 当 MongoDB 部署为一个复制集时,应用程序通过驱动,直接请求复制集中
的主节点,完成读写操作。 另外两个从节点,会自动和主节点同步,保持数据
的更新。
2. 当 MongoDB 被部署为一个分片集群时,应用程序通过驱动,访问路由节点,
也就是 Mongos 节点 Mongos 节点会根据读写操作中的片键值,把读写操作分
发的特定的分片执行,然后把分片的执行结果合并,返回给应用程序。
MongoDB 复制集主节点遇到故障会如何处理?
在集群运行的过程中,万一主节点遇到故障,两个从节点会在几秒的时间内选举
出新的主节点,继续支持应用的读写操作。
MongoDB 分片集群中集群数据是如何分布的?
元数据记录在 Config Server 中,这也是一个高可用的复制集。每个分片管理集
群中整体数据的一部分,也是一个高可用复制集。此外,路由节点,也就是
Mongos 节点在生产环境通常部署多个。这样,整个分片集群没有任何单点故障。
MongoDB 和关系型数据的有哪些概念可以对应?
10