数据库运维

2023年12月2807:27:09发布者:小杰 33 views 举报
总字数:约110558字
第1页
1/229页

第2页
2/229页

第3页
3/229页

第4页
4/229页

第5页
5/229页

第6页
6/229页

第7页
7/229页

第8页
8/229页

第9页
9/229页

第10页
10/229页

目录

常见问题 ........................................................................................................................ 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

总页数:229
提示:下载前请核对题目。客服微信:diandahome
下载的文档都包含参考答案
特别声明:以上内容(如有图片或文件亦包括在内)为“电大之家”用户上传并发布,仅代表该用户观点,本平台仅提供信息发布。