史上最全腾讯云数据库(MongoDB)监控最佳实践

2020-11-12 20:51:32 浏览数 (1)

作者:朱丹阳,腾讯云监控开发工程师

前言

文章旨在通过对 MongoDB 监控指标的梳理和架构的分解,帮助广大的腾讯云 MongoDB 用户更好的通过监控告警及时发现业务异常,实时监控数据趋势。内容将会包括三个部分:

1. 介绍 MongoDB 的产品特性、技术特征;

2. 通过内部专业团队提供的指标及告警阈值建议;

3. 云监控控制台监控 MongoDB 的最佳实践;

腾讯云 MongoDB 简介

云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于开源非关系型数据库 MongoDB 专业打造的高性能、分布式数据存储服务,完全兼容 MongoDB 协议,适用于面向非关系型数据库的场景。

1. 提供云存储服务

云存储服务是腾讯云平台面向互联网应用的数据存储服务。 2.  完全兼容 MongoDB 协议

既适用于传统表结构的场景,也适用于缓存、非关系型数据以及利用 MapReduce 进行大规模数据集的并行运算的场景。 3.  提供高性能、可靠、易用、便捷的 MongoDB 集群服务

每一个实例都是至少一主一从的副本集或者是包含多个副本集的分片集群。 4.  支持整合备份、扩容等功能

尽可能的保证用户数据安全以及动态伸缩能力。

MongoDB 技术特征

1. 分片集群

  • 每个副本集就是一个分片。
  • 数据写入会根据片经过一定的 hash 算法写入不同的片中,不需要应用程序根据需要去指定读写库表。
  • 存储量扩容只需要添加分片即可。

2. 自动容灾

  • 当发生意外导致主节点不可达时, 集群内部会自动选举出主节点。
  • 如果挂掉的是主节点,重新拉起时,那么它就会变身成一个从节点;如果拉起失败会补充新节点进入集群以达到用户所选择的集群规模。
  • 同样的当任何一个节点不可达时,也会尝试拉起节点或者补充新节点。

3. 在线扩容

  • 在 WEB 控制台或者 API 发起扩容操作。
  • 系统根据需要按新规格创建对应数量的 Secondary 节点。
  • 依次把新创建的 Secondary 节点加入集群实例内部,同步数据。
  • 待最后一个 Secondary 节点数据同步完成以后,开始一个一个剔除原节点,剔除的顺序按先从 (Secondary) 后主 (Primary)。
  • 当集群内部没有主节点时,会选举出新的主节点。

4. 完整的备份机制

  • MongoDB 支持全量备份和增量备份两种备份方式
  • 回档功能支持实例回档和库表级别的细粒度回档,极大的减少了海量数据库实例的管理难度。

5. 灵活的读写分离策略

  • 基于 Secondary 的读写分离策略。连接参数中设置 readrefence=secondary 指定从库读。
  • 基于只读实例的读写分离策略。通过购买 MongoDB 主实例的一个或多个只读实例来实现读写分离需求,通过只读实例读操作来满足大量读应用需求,减轻主库的压力。

6. 提供库表回档

细粒度快速处理错误。

可回档至 7 天内的任意时刻。

MongoDB 架构 & 监控指标

1. 架构图 & 指标

2. 全量监控指标 

因为篇幅问题,放至文末供大家查阅,也可登录云监控官网查阅:

https://cloud.tencent.com/document/product/248/45104

3. 告警核心指标 & 建议阈值

以下指标均为专家建议数据库监控需要覆盖的核心指标,以及需要引起关注的阈值,避免面对一片指标无从下手:

最佳实践

①.配置告警的核心指标及建议阈值

1. MongoDB 实例

磁盘使用率 > 80%

注:代表集群容量使用率,集群容量使用率达到 100% 会被写封禁,影响用户写入,所以需要用户注意提前扩容。

时延在 100 毫秒以上请求次数 > 5000

注:时延在 100 毫秒以上请求在 MongoDB 中可以理解为慢查询,是性能问题排查的重要指标。

集群连接数百分比 > 80%

注:预防集群连接数过多,导致 MongoDB 服务端无法建立更多连接造成客户端无法访问 MongoDB 集群。

2. MongoDB 副本集

磁盘使用率 > 80%

注:代码副本集容量使用率,副本集容量使用率达到 100% 会被写封禁,影响用户写入,所以需要用户注意提前扩容。

3. MongoDB 节点

CPU 使用率 > 80%

注:CPU 使用率过高会影响在服务器正常运行程序等系统层面问题。

内存使用率 > 80%

注:内存使用率过高容易引起服务响应速度变慢,服务器登录不上等系统层面问题。

Qr>100,Qw>100,Ar>100,Aw>100

注:

1. Qr|Qw 为等待读/写的队列长度, Ar|Aw 为执行读/写操作客户端数量,都为0的话表示MongoDB毫无压力。

2. MongoDB负载高时,命令来不及处理,MongoDB将命令放入队列。高并发时,一般队列值会升高。

3. Qr|Qw ,Ar|Aw如果一直0说明很健康,如果过高的话那就说明MongoDB处理起来很慢了,有可能有慢查询,锁表排队等现象(Ar|Aw 表示引擎层当前时刻获取“ticket令牌”执行读写操作的请求数。如果请求处理的很快,这个值会很低。如果请求处理很慢,一直占用“ticket令牌”,这个值会很高,需要关注。)

②.如何在云监控中配置 Dashboard 和告警,高效发现问题?

1. 配置告警

https://console.cloud.tencent.com/monitor/overview 进入腾讯云监控,选择告警配置下告警策略,并新建告警策略。

设置 MongoDB 告警

1. 输入策略名称

2. 输入备注

3. 选择策略类型

4. 选择 MongoDB 实例

5. 设置告警指标及触发条件

6. 选择告警渠道,包括接收对象,接收渠道,有效时段,接收语言

7. 保存

配置的 MongoDB 节点告警总览

2. 配置 Dashboard

腾讯云监控 Dashboard 提供了云数据库 MongoDB 的预设面板,无需添加任何指标,即可在预设面板内直接查看专家建议指标详情

https://console.cloud.tencent.com/monitor/overview 进入腾讯云监控,选择 Dashboard,点击进入【云数据库 MongoDB 预设面板】后可选择实例,副本集,节点,自动展示出预设的 Dashboard。

云数据库 MongoDB 预设面板总览:

附录:监控指标

欢迎联系云监控小助手微信号,加群讨论:)

0 人点赞