简介
云数据库 Redis(TencentDB for Redis)是由腾讯云提供的兼容 Redis 协议的缓存数据库,具备高可用、高可靠、高弹性等特征。云数据库 Redis 服务兼容 Redis 2.8、Redis 4.0、Redis 5.0 版本协议,提供标准和集群两大架构版本。最大支持 4TB 的存储容量,千万级的并发请求,可满足业务在缓存、存储、计算等不同场景中的需求。
云数据库 Redis 的优势:
- 主从热备:提供主从热备,宕机自动监测,自动容灾。
- 数据备份:标准和集群架构数据持久化存储,可提供每日冷备和自助回档。
- 弹性扩容:可弹性扩容实例的规格或缩容实例规格,支持节点数的扩容和缩容,以及副本的扩容和缩容。
- 网络防护:支持私有网络 VPC,提高缓存安全性。
- 分布式存储:用户的存储分布在多台物理机上,彻底摆脱单机容量和资源限制。
技术架构
云数据库 Redis 提供 0.25GB - 4TB 的容量规格选择,提供标准和集群两个架构版本。
01
云数据库 Redis 内存版(标准架构)
云数据库 Redis 内存版(标准架构)指支持 0 个或者多个副本的版本(副本是指非主节点的节点),是最通用的 Redis 版本,兼容 Redis 2.8、Redis 4.0、Redis 5.0 版本的协议和命令,提供数据持久化和备份,适用于对数据可靠性、可用性都有要求的场景。主节点提供日常服务访问,从节点提供 HA 高可用,当主节点发生故障,系统会自动切换至从节点,保证业务平稳运行。
02
云数据库 Redis 内存版(集群架构)
云数据库 Redis 内存版(集群架构)是腾讯云基于社区版 Redis Cluster 打造的全新版本,兼容 Redis 4.0 和 Redis 5.0 版本命令,采用分布式架构,支持分片和副本的扩缩容,拥有高度的灵活性、可用性和高达千万级 QPS 的高性能。Redis 内存版(集群架构)支持 3 分片 - 128 分片的水平方向扩展,1 个 - 5 个副本集的副本扩展,扩容、缩容、迁移过程业务几乎无感知,做到最大的系统可用性。
技术特征
01
读写分离
云数据库 Redis 支持开启和关闭读写分离功能,针对读多写少的业务场景,解决热点数据集中的读需求,副本数大于 1 时,Redis 提供数据主从实时热备,提供数据高可靠和高可用(同一可用区内,跨服务器高可用),HA 系统监测到节点故障后,会将请求切换到从节点,提供从节点只读功能。最大支持 1 主 5 从模式,提供最大 5 倍的读性能扩展能力。
- 读写分离原理:兼容 Redis 4.0 及以上的标准架构和集群架构,通过 Proxy 层实现自动读写分离。
- 读写分离权重:开启读写分离 Proxy 将按照主节点只写,从节点平均分配读请求的方式来提供访问。
02
故障切换机制(HA)
- 故障判断:Redis 标准架构和集群架构采用的是 Redis Cluster 原生的集群管理机制,依靠集群内节点之间的 Gossip 协议来进行节点状态的判断,节点故障判断的时效性取决于 cluster-node-timeout,默认值是 15ms。
- 主节点选举:相对原生的 Cluster Failover 机制,腾讯云 Redis 引入了主可用区优先切换的逻辑,以保障主可用区业务的访问时延,具体机制如下:
- 数据最新的节点优先选主。
- 数据相同,主可用区的副本优先选主。
03
数据持久化
04
数据备份
云数据库 Redis 支持自动备份和手动备份,自动备份允许自定义备份时间窗口。
- 自动备份:云数据库后台服务会定期对实例的数据进行备份,默认情况下会在每天的 02:00-08:00 期间进行一次全量数据备份,备份文件存储于腾讯云 COS 服务,备份列表会展示实例的所有备份文件以及备份文件的信息,云数据库 Redis 提供两个备份下载地址,公网下载地址允许在任意可以访问 Internet 网络的地方下载备份数据,内网下载地址允许在腾讯云内网下载,内网下载地址不支持跨 Region 下载,只能在 Redis 实例所在的 Region 下载。
- 手动备份:除系统后台定期的生成备份文件以外,还可以通过云数据库 Redis 控制台进行手动备份,以满足不同的需求,手动备份的文件将同样展示在控制台的备份列表中,可以通过备份列表中的备份类型【手动备份】来区分系统自动备份和手动备份。
作为云监控,我们在努力
Redis 这类敏感的纯内存、高并发和低延时的服务,如果没有完善的监控告警,从用户侧或 RD 的角度去发现问题、定位到排查将是非常耗时的。
- 完善的监控告警可以做到故障快速通知,快速定位,缩短故障的相应时间。
- 良好的监控数据能够实时的反映 Redis 对资源的利用占比,帮助用户做好 Redis 容量规划和性能管理。
- Redis 的性能监控,可以帮助用户及时发现性能瓶颈。
可见,对于 Redis 而言,监控告警是十分重要且必要的,而云监控为用户提供了统一监控云数据库 Redis 的平台,可以通过使用云监控全面了解云数据库 Redis 的资源使用、性能和运行状况。此外,云监控还提供了指标分类、预设常用告警指标、预设核心指标的 Dashboard 面板,帮助用户更轻松的理解云数据库 Redis 的指标,更方便、快捷的掌控云数据库 Redis 出现的突发情况,提升运维效率,减少运维成本。
01
监控指标及其分类
1. 监控实例分析
为进一步提升 Redis 的监控能力,云监控配合业务侧对 Redis 的监控进行了全面的升级,监控粒度从 1 分钟升级到 5 秒,监控数据延迟缩短到 20 秒以内,新增副本节点监控采集 & 告警,新增 Proxy 节点监控采集 & 告警,提供给用户更完善的监控告警和更良好的监控数据,并对云数据库 Redis 的每一部分进行相应指标的监控,并将指标进行分类,以便用户理解和使用,详细指标见附录。
架构说明:
LB(负载均衡):Redis 的标准架构和集群架构都有 Proxy,且 Proxy 的数量 >= 3,因此需要通过 LB 来均衡访问。
Proxy:每个实例至少有 3 个 Proxy,标准架构的 Proxy = 3 (副本数 - 1),集群架构的 Proxy = 分片数 * 副本数。
Master(Group):Redis 的主节点或是所有分片的主节点被称为 Master(Group)。
Slave(Group):Redis 的副本节点或是集群实例的多个分片中的一个副本组成的集合被称为副本或者副本组 Replica(Group),集群架构的副本组是将一个分片的多个副本分到不同的组,以便于将不同的副本组部署到不同的可用区。
指标分类:
CPU 监控:Redis 是单进程实例,默认只使用单个核心,当某个实例出现 CPU 性能瓶颈,会导致性能故障,因此除整体 CPU 使用率外,还应关注节点最大 CPU 使用率。
内存监控:Redis 是内存型数据库,因此对于内存的监控就尤为重要。一般内存满了之后会导致一系列的问题,比如逐出了不该逐出的 key、写不进数据、 超时阻塞等问题,因此需关注内存使用量、内存使用率、节点最大内存使用率、Key 总个数、Key 过期数、Key 驱逐数。
内存使用量:Redis 真实使用内存,不包含内存碎片。
- 内存使用率:已分配内存的百分比,对于 Redis 存储场景会比较关注,未设置淘汰策略的,达到限制则不能写入数据。
- Key 总个数:Redis 实例包含的键个数,单实例键个数过大,可能导致过期键的回收不及时。
- Key 过期数: 删除生存时间为 0 的键个数;包含主动删除和定期删除的个数。
- Key 驱逐数:因内存使用量达到最大可使用内存限制的键个数,并设置有淘汰策略的实例。
网络监控:网络吞吐量关系到 Redis 的整体服务质量。
需要关注连接数量和连接使用率,如果连接数过高,会影响 Redis 吞吐量。
时延监控:响应时间是衡量一个服务组件性能和质量的重要指标。使用 Redis 的服务通常对响应时间都十分敏感,比如要求 99% 的响应时间达 10ms 以内。
请求监控:通过此监控来度量 Redis 缓存的质量,如果未命中或错误次数次数较高,可能因热点数据已大于 Redis 的内存限制,导致请求落到后端存储组件,可能需要扩容 Redis 缓存集群的内存容量。
- 读请求命中:Redis 请求键被命中的次数。
- 读请求 Miss:Redis 请求键未被命中的次数;当命中率较高如 95%,如果请求量大,未命中次数也会很多。
- 读请求命中率:是度量 Redis 缓存服务质量的标准。
注:在 Proxy 层,会更加关注时延、请求、网络类监控,在节点层,会更加关注请求、内存类监控。
2. 预设专家建议核心告警指标
腾讯云监控与云数据库 Redis 业务侧经过讨论,根据多年运维经验,按照不同的策略(实例、Redis 节点、Proxy 节点)提供常用告警指标和阈值的专家建议。用户配置告警时,页面将默认显示预设的指标及阈值建议,支持修改,方便用户快速配置告警策略。
云数据库 - Redis - 内存版 (5 秒粒度)- 实例汇总
云数据库 - Redis - 内存版 (5 秒粒度)- Redis 节点
云数据库 - Redis - 内存版 (5 秒粒度)- Proxy 节点
(1)CPU 使用率 > 80%、节点最大分片 CPU 使用率 > 80%
如果 Redis 的 CPU 整体资源饱和,会导致 Redis 性能下降,请求堆积。而 Redis 是单进程实例,默认只使用单个核心,但当某个实例出现 CPU 性能瓶颈,会导致性能故障,所以 Redis 对 CPU 资源的监控还要监控到单个核心的资源使用率。建议设置 CPU 使用率 > 80%、节点最大分片 CPU 节点使用率 > 80%,当接收到告警后,及时处理高并发和时间复杂度高的指令,或者升级 Redis 规格。
(2)内存使用率 > 80%、节点最大分片内存使用率 > 80%
Redis 是纯内存系统,如果 Redis 使用的内存超出了可用的物理内存大小,那么 Redis 很可能系统会被 OOM killer 杀掉,所以必须要保证系统有足够的内存余量,以免出现 OOM 导致 Redis 进程被杀,同时 Redis 一旦使用 swap,会导致性能骤降。针对这一点,建议设置内存使用率 > 80%、节点最大分片内存使用率 > 80% 告警,当接收到告警后,建议清除一些没用的冷数据或者升级 Redis 规格。
(3)连接数使用率 > 80%
由于对 Redis 的访问通常由应用程序发起(用户通常不直接访问数据库),因此对于大多数场景,连接客户端的数量将有合理的上限和下限。连接数使用率如果达到 1,Redis 会开始拒绝新连接创建,影响业务程序运行。监控 Redis 的连接数使用率,如果它太高,大量的并发客户端连接可能会打垮服务器处理请求的能力,建议设置连接数利用率 > 80% 告警,当接收到告警时,及时处理,帮用户确保有足够的可用资源用于新客户端或管理会话。
(4)内网入流量使用率 > 80%、内网出流量使用率 > 80%
Redis 一般是单机多实例部署,当服务器网络流量增长很大,需快速定位是网络流量被哪个 Redis 实例所消耗了,另外 Redis 如果入流量过大,可能导致 slave 线程 “客户端输出缓冲区” 堆积,达到限制后被 Master 强制断开连接,出现复制中断故障。所以建议设置内网入流量使用率 > 80%,内网出流量使用率 > 80%。
02
预设核心指标 Dashboard 面板
为了让用户更快捷、更方便的监控云数据库 Redis 的资源使用、运行等状况,腾讯云监控将核心指标配置成预设 Dashboard 面板,用户可直接进入云监控的 Dashboard 页面,无需进行其他配置,即可看到如图所示的云数据库 Redis 的 Dashboard 预设面板。
当用户选择自己已有的实例后,便可自动展示预设的核心指标的监控 Dashboard,提升用户体验,降低使用成本。
- 监控 CPU 利用率、内存利用率等资源,配合告警,当监控值超过某一值时,要关注是否需要扩容。
- 监控连接数、连接使用率,如果数字偏离正常范围,这表示可能存在问题。如果它太低,表示客户端连接可能已经丢失,如果它太高,大量的并发客户端连接可能会打垮服务器处理请求的能力,需要根据实际情况定位问题,提前做好数据库的扩容和优化。
- 监控内网出、入流量及其使用率,配合告警,及时处理,避免复制中断故障。
附录:
云数据库 Redis 提供完整透明的监控服务,新版本(支持 5 秒监控粒度)监控提供了包括 Proxy 节点监控、Redis 节点监控和实例监控汇总,详情如下:
欢迎联系云监控小助手微信号,加群讨论:)