Redis 自动化运维最佳实践|得物技术

0 阅读15分钟

一、背景介绍

随着业务规模与流量的持续高速增长,自建 Redis 集群面临着更高地性能与稳定性要求,对平台化、自动化运维能力也提出了新的挑战。为进一步提升资源利用效率、保障服务稳定运行,并更好地支撑业务快速发展,我们对 Redis 平台进行了自动化能力的建设与升级,通过系统化的平台能力优化,降低人工运维费力度,提升整体运维效率与服务质量。

Redis 使用现状

Redis 集群目前基于 ECS 进行部署,采用单机多实例、主从混合部署的架构模式,并将 Proxy 组件与数据节点混合部署,以提升 CPU 资源利用率与整体部署密度。当前集群已达到百 TB 级存储规模、数十万数据节点,支撑超大规模业务场景的稳定运行。

面临的挑战和问题

随着业务规模与流量的持续增长,平台在资源效能与运维效率方面面临着新的优化空间:资源池层面机器资源池的整体利用率仍有提升空间,需进一步优化资源调度与负载均衡策略。运维自动化层面告警自动化处理覆盖度有待提升,部分复杂运维场景仍需人工介入,流程效率可进一步优化。

集群架构

自建 Redis 由 ConfigServer、Redis-Proxy、Redis-Server 等核心组件构成。

自建 Redis 2.0(SDK标准版) 整体架构图如下所示:

一主一从,双区部署

ConfigServer

ConfigServer 是自建 Redis 系统中关键组件之一,跨多可用区多节点部署,采用 raft 协议实现 ConfigServer 组件高可用;ConfigServer 主要负责两方面职责:

  • 负责 Proxy 添加与删除、group 创建与删除、Redis-server 实例添加与删除、Redis-server 实例手动主从切换、水平扩容与数据迁移等功能操作。
  • 负责 Redis-server 实例故障检测与自动故障转移(主节点故障后自动主从切换)。

Redis-Proxy

Redis-Proxy 组件是自建 Redis 系统中的代理服务,负责接受客户端连接,然后转发客户端命令到后端相应的 Redis-server 实例,使得后端 Redis-server 集群部署架构对业务透明,Proxy 支持 Redis RESP 协议,业务访问 Proxy 就像访问一个单点 Redis 服务一样,业务可以把一个自建 Redis 集群当作一个容量无限大的单点 Redis 实例即可。

Redis-Server(Redis-Group)

Redis-server 组件为开源 Redis 版本基础上,增加槽 slot 同步迁移与异步迁移等相关功能;支持原生开源 Redis 的所有特性,比如支持 String、Hash、List、Set、ZSet 等常用数据结构,AOF 持久化、主从复制、Lua脚本等等。默认一主一从,可支持多从部署。

二、自动化运维能力

自动化运维

资源池自动化均衡调度

当前 Redis 资源池支持按内存使用率自动化均衡调度、按内存分配率自动化均衡调度、按 CPU 使用率均衡调度、支持指定机器凌晨迁移调度(隐患机器提前维护、凌晨资源池迁移优化下线等)等功能,核心流程为合理选择迁移节点。现在每天定时生成迁移计划,迁移任务默认每天凌晨定时执行。

资源池均衡任务管理

迁移 server 节点选择算法流程图

Redis 潮汐调度算法示意

选择 Server 节点原则

  1. 机器选择:
  2. 获取内存容量使用率超过指定百分比的机器。
  3. 获取分配率超过指定百分比的机器。
  4. 获取需要维护和迁移优化的机器。
  5. 优先节点数量多的实例节点:这样可以在资源均衡的同时,使得同一集群节点也更均衡,同一集群节点尽可能分散到不同的机器上。
  6. 优先实例等级为非 P0 的实例。
  7. 优先从节点:从节点迁移对大部分业务都没有任何影响。
  8. 分配率和内存容量一样,优先节点规格中等规格(1-4G)实例,再选择 1G-5G 规格实例,最后选择其他规格的节点。
  9. 最后汇总迁移任务节点:
  10. 优先处理需要维护和需要迁移优化的节点。
  11. 去掉同一个集群同一个分组的 master 节点,避免对同一 group 分组进行操作。
  12. 对于需要维护和迁移优化的机器上的 proxy:
  13. 获取原来 proxy 版本,资源标签等信息,判断是否是特殊作用 proxy,部署新 proxy。
  14. 调整旧 proxy:对于 sdk proxy 禁用 proxy,对于 slb 下 proxy,调整权重。

选择 server 迁移任务流程图

  • 节点选择后生成迁移任务,前端可展示、确认、取消;
  • 定时任务执行生成的迁移任务;
  • 添加从节点、同步数据;
  • 同步数据完成后如果迁移节点是从则删除节点;
  • 同步数据完成后如果迁移节点是主则进行主从切换;
  • 如果迁移节点是主进行主从切换后检查新主从关系,检查 proxy 拓扑更新等,如果有异常则告警迁移。

迁移 proxy 节点选择算法流程图

proxy 节点选择流程图

选择 Proxy 节点原则

  1. 优先机器 CPU 负载峰值高的机器上 Proxy 节点;均衡调度阈值支持可配置,后续均衡后继续调整。
  2. 需要先采集到 proxy 24 小时 CPU 峰值,排序后优先迁移机器上 CPU 峰值最高的,直到机器 CPU 峰值降到均衡调度阈值。
  3. 每台机器每天只迁移 1 个 proxy。
  4. 判断 proxy CPU 峰值高的个数(如果只有一个就不处理,如果大于等于 3 个 proxy CPU 峰值高则处理一个(超过配置的均衡调度阈值算高 CPU 使用率))。

Proxy 迁移任务流程图:

  • 节点选择后生成迁移任务,前端可展示、确认、取消;
  • 定时任务执行生成的迁移任务;
  • 获取原来 proxy 版本,资源标签等信息,判断是否是特殊作用 proxy,部署新 proxy;
  • 新 proxy 绑定 LB;
  • 调整旧 proxy:对于 sdk proxy 禁用 proxy,对于 slb 下 proxy,调整权重。

收益

  • 提升资源池内存与 CPU 利用率,优化整体资源使用效率。
  • 合理管控资源超卖率,降低自动扩容失败率与告警发生率。
  • 基于机器维护窗口,在凌晨低峰期执行调度与实例迁移,高效支撑隐患机器前置治理、资源池离线优化及节点下线等运维需求。

资源池分级维护和管理

对 ECS 机器资源和 LB 资源进行打标,根据特殊业务需要做不同资源池的隔离调度。

可对资源进行多维度筛选:比如按资源标签、CPU、可用区、是否重保等维度筛选。

可对机器上部署的节点信息进行迁移操作和查看机器详细监控等。

物理资源隔离:自建 Redis 通过对 ECS 机器资源打标,实现重保集群隔离,支持集群物理隔离,减少集群相互影响,支持资源分级维护和灰度测试验证,减少大面积变更影响,使用相对保守的资源水位阈值来减少重保集群的运维频次和任务调度。

Redis 资源池隔离方案示意

不同资源池资源阈值项设置:

资源池分配阈值

集群生命周期自动化管理

集群自动化部署

当前 Redis 支持自动化集群部署,集群交付时间缩短至分钟级。

当业务提交集群申请工单审批通过后,判断是否支持自建,如符合自建则自动化进行集群部署和部署结果校验,校验集群可用性后自动给业务交付集群信息,整个过程高效快速。集群部署成功或者失败都会发送消息通知。

部署结果成功通知

部署结果失败通知

集群垂直扩缩容自动化

当前 Redis 支持 server 垂直扩缩容,ecs-proxy、docker-proxy 扩容等工单自动化操作。

扩容方案

集群 server 垂直扩缩容,ecs-proxy、docker-proxy 扩容等场景在业务提单时给出扩缩容方案和校验,实现工单自动化操作。

集群水平扩缩容自动化

当前 Redis 支持 server 自动扩容分片,以支持更高的请求和负载。

Server 水平扩缩容任务管理

水平扩缩容执行任务详情

集群下线支持回收和重建

当前 Redis下线回收,支持立即销毁和重建恢复。

集群自动下线流程

  • 工单审批通过后立即下线接入层:检测 proxy(ecs-proxy 和 docker-proxy)连接和 qps 请求,都没有则调整权重,下线接入层(ecs-proxy 和 docker-proxy)。
  • 7 天内如有反馈问题,需要继续访问,则重建恢复集群正常访问。
  • 7 天后无反馈下线集群所有资源(包括数据层数据,这里下线后不再支持回收重建)。

集群回收站管理

大 key 删除支持产品化可回滚

支持自建 Redis 和云 Redis 多 db 大 key 删除可回滚。支持控制台大 key 删除任务管理(立即执行删除、定时删除、回滚等)。

进行中的任务

历史删除任务

版本升级自动化

  • 对有需要的集群支持将指定集群在指定时间进行滚动升级到指定版本。
  • 自动化版本升级收敛,通过自动化任务在凌晨低峰期进行同版型系列滚动升级。
  • 支持升级任务管理、修改时间、查看任务详情、升级进度,取消任务等。

版本升级任务

版本升级记录

工单自动化

当前所有运维工单都已完成工单自动化,如 Biz 申请、创建实例、密码申请、权限申请、实例升降配、实例架构升级、Server 版本升级、Server 水平扩容、删除 key、下线实例等均完成工单自动化。业务提单审批通过后自动校验执行,执行完成后自动发送工单执行结果通知。

总结:除了需求描述性(云 Redis 需求)的工单,其他均实现操作工单化标准化,工单自动化。

查询自动化

集群控制台支持命令查询、Key 模糊查询、Key 随机采样等,查询结果也支持 json 格式化、复制等功能。

支持查询历史缓存,查询耗时记录等。

告警自动化处理

告警入库收敛优化

  • 告警触发后收敛至集群维度入库;
  • 判断告警是否沉默中:如内存容量告警,部分特殊集群可以写满按淘汰策略淘汰,不用扩容,这种告警需要沉默;
  • 判断告警是否超频:因为集群分片很多,同一集群同一指标不同分片每次触发阈值都会触发告警;
  • 将告警信息按集群所属发送到对应的业务域:同一集群可能存在多个业务方使用,根据业务域纬度增加业务域大群告警通知,提高告警业务感知能力。

Server 分片内存容量告警自动扩容

自建 Redis 支持业务配置自动扩容,当集群容量超过预警水位线 80% 时,可自动进行垂直扩容,不需要人工介入运维,对业务无感,自动扩容在夜间无人值守的场景下,大大降低了集群容量激增带来的风险。

Redis 自动扩容开关

Server 自动扩容流程图:

Redis 自动扩容流程图

  • 管控周期性任务获取监控平台 Redis 内存使用率超过 80% 的监控信息。
  • 节点告警信息收敛到集群维度处理。
  • 判断集群是否开启自动扩容:集群申请时会让业务填是否开启自动扩容,页面也可配置开启或者关闭自动扩容。
  • 判断节点是否超过集群设置的 80% 扩容阈值。
  • 判断最近一天是否扩容次数大于 3 次:如果 24 小时内扩容多次,说明可能增长异常,需要让告警发出。
  • 判断扩容后容量是否大于设置的最大阈值(8G):这里单个节点最大值为 8G,方便维护。
  • 预检查扩容后分配是否大于机器内存:自动扩容后分配容量不能大于机器容量。如果大于机器容量则记录扩容失败信息,如果小于则可执行扩容操作,扩容操作后再持久化参数到 Redis 配置文件,然后记录节点扩容成功。

宕机场景告警收敛与自动化处理

机器维度的告警收敛,减少告警。

  • 订阅机器宕机事件入库;
  • Redis server 和 proxy Down 告警信息入库;
  • Redis server 和 proxy Down 告警触发后判断所属机器是否有宕机事件;
  • 如果告警所属机器没有机器宕机事件,则直接发送电话告警和飞书告警消息通知;
  • 如果告警所属机器有机器宕机事件,则判断告警时间是否超过 5 分钟,如果 5 分钟后告警还没恢复则当前节点自动拉起失败,发送电话告警和飞书告警消息通知。如果节点自动拉起成功,则不会再触发告警。

宕机节点自动重启流程图:

针对夜间 Redis 实例机器宕机,引入自动化巡检和自动重启机制,减少夜间运维成本,提高夜间故障集群主备完整性恢复效率。

Redis 宕机自动恢复示意图

  • 订阅机器宕机事件入库;
  • 周期性任务查询宕机信息;
  • 机器宕机加入事件队列,判断是否事件重复,重复则不加;
  • 重启宕机上的节点,如果返回失败加入事件队列,支持重试 3 次;
  • 发送重启结果消息通知。

收益

  • 将告警信息按集群所属发送到对应的业务域,降低了告警后不断找人拉群的运维工作量。告警自动实时同步给业务,提高了业务告警实时性和告警感知能力。
  • 通过告警入库收敛优化、宕机场景告警收敛优化和告警自动化处理,降低告警噪音 90% 以上。
  • 通过 Server 分片内存容量告警自动扩容、机器宕机节点自动重启,极大降低运维成本和提高告警恢复效率。

自动化巡检推送

黑名单管理

对集群大 key、集群热 key、集群混用情况、集群成本等进行巡检,针对特殊场景的 key 支持集群维度、key 维度和 key 前缀维度的黑名单配置。

黑名单管理

大 key 巡检日报

每日按业务域维度巡检集群存量大key,推送巡检信息到对应业务域大群,大 key 巡检支持黑名单管理。点击实例 ID 可跳转查看 key 分析详情。

大 key 巡检日报

key 分析详情

热 key 巡检

实时将集群热 key 信息,推送巡检信息到对应业务域大群,热 key 支持黑名单设置。

集群热 key 实时巡检

实时热 key 分析

三、总结

通过持续构建与完善平台自动化运维体系,我们实现了 Redis 集群全生命周期运维的规范化、标准化与自动化,覆盖集群部署、垂直扩缩容、分片水平扩容、版本升级、集群生命周期管理、资源池多维度智能调度、自动化告警处理及常态化巡检等核心场景。整体运维流程实现少人化、无人化执行,大幅降低运维复杂度和人工运维费力度。依托运维工单化、流程自动化的建设思路,平台整体运维效率得到显著提升,为 Redis 服务长期高稳定、高可靠、高性能运行提供了坚实保障。

往期回顾

1.Claude在得物App数仓的深度集成与效能演进

2.Claude Code + OpenSpec 正在加速 AICoding 落地:从模型博弈到工程化的范式转移|得物技术 

3.大禹平台:流批一体离线Dump平台的设计与应用|得物技术

4.基于 Cursor Agent 的流水线 AI CR 实践|得物技术

5.从IDE到Terminal:适合后端宝宝体质的Claude Code工作流|得物技术

文 /陌叶

关注得物技术,每周一、三更新技术干货

要是觉得文章对你有帮助的话,欢迎评论转发点赞~

未经得物技术许可严禁转载,否则依法追究法律责任。