Skip to content

缓存集群部署

**本文引用的文件** - [lemes-cloud/src/devops/k8s/service/base/redis.yaml](file://lemes-cloud/src/devops/k8s/service/base/redis.yaml) - [lemes-cloud/src/devops/console/k8s/template/redis.yaml](file://lemes-cloud/src/devops/console/k8s/template/redis.yaml) - [lemes-cloud/src/devops/k8s/service/base/redis-cluster.yaml](file://lemes-cloud/src/devops/k8s/service/base/redis-cluster.yaml) - [lemes-cloud/src/devops/docker-compose/alone.yml](file://lemes-cloud/src/devops/docker-compose/alone.yml) - [lemes-cloud/src/devops/docker-compose/base.yml](file://lemes-cloud/src/devops/docker-compose/base.yml)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考量
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件面向运维工程师,系统性说明 DeviceMate 项目的 Redis 缓存集群部署方案,覆盖以下主题:

  • 单机部署:内存设置、持久化、连接限制等关键配置
  • 哨兵模式(概念性说明):主从监控、故障检测与自动故障转移
  • 集群模式:节点分布、槽位分配、数据分片策略
  • 缓存策略:TTL 设置、内存淘汰策略、热数据缓存建议
  • 集群监控:性能指标、慢查询日志、内存使用监控
  • 实操指引:基于仓库中现有 K8s 与 Docker Compose 的部署与优化建议

说明:当前仓库未提供 Redis 哨兵模式的独立部署清单;本文在“哨兵模式”部分以通用实践进行说明,不直接映射到具体源码文件。

项目结构

本项目通过多种方式提供 Redis 部署能力:

  • Kubernetes(StatefulSet/Deployment + Service + ConfigMap)
  • Docker Compose(单机与集群示例)

图表来源

章节来源

核心组件

  • 单机 Redis(Kubernetes)
    • 使用 ConfigMap 提供 redis.conf,启用 AOF 持久化,设置密码,绑定 0.0.0.0 并暴露端口
    • 通过 NodePort 暴露服务,资源限制与探针配置明确
  • 单机 Redis(Docker Compose)
    • 使用 host 网络与卷挂载,命令行传入密码
  • Redis 集群(Kubernetes)
    • 使用 StatefulSet 部署 6 个副本,开启 cluster 模式,暴露客户端与 gossip 端口
    • 通过 ConfigMap 注入集群配置与节点 IP 替换脚本
  • Redis 集群(Docker Compose)
    • 两个服务分别监听不同端口,使用 host 网络,便于集群初始化与互联

章节来源

架构总览

下图展示三种部署形态的总体交互关系与数据流:

图表来源

详细组件分析

单机 Redis(Kubernetes)配置要点

  • 配置项来源:ConfigMap 中的 redis.conf
  • 关键点
    • AOF 持久化开启,确保数据可靠性
    • 绑定 0.0.0.0 并设置密码,便于网络访问与安全控制
    • NodePort 暴露 30379,便于外部直连
    • 资源请求与限制:CPU 1000m、内存 1024Mi
    • 存活/就绪探针:TCP Socket 探测,周期与阈值合理
  • 适用场景:开发测试、小规模生产或无高可用需求

图表来源

章节来源

单机 Redis(Console K8s 模板)配置要点

  • 配置项来源:ConfigMap 中的 redis.conf
  • 关键点
    • 启用 AOF,设置密码
    • 更高的 CPU/内存配额:CPU 4、内存 8Gi(适合更高负载)
    • 探针与容忍度配置,增强稳定性
  • 适用场景:对资源有更高要求的生产环境

图表来源

章节来源

Redis 集群(Kubernetes)配置要点

  • 配置项来源:ConfigMap 中的 redis.conf 与 update-node.sh
  • 关键点
    • 开启 cluster 模式,设置节点超时、配置文件路径
    • StatefulSet 副本数为 6,典型 3 主 3 从布局
    • 暴露客户端端口 6379 与 gossip 端口 16379
    • 通过 POD_IP 动态注入节点 IP,避免重建导致集群信息丢失
  • 适用场景:高可用、水平扩展、分片存储

图表来源

章节来源

Docker Compose 部署要点

  • 单机模式
    • 使用 host 网络与卷挂载,命令行传入密码
  • 集群模式
    • 两个服务分别监听不同端口,便于集群初始化
    • host 网络简化节点互联,注意端口冲突与防火墙

图表来源

章节来源

依赖关系分析

  • 应用侧未在仓库中直接提供 Redis 连接配置文件;部署完成后,应用需通过服务发现或环境变量获取 Redis 地址与认证信息
  • 集群模式依赖稳定的网络与节点命名规则(StatefulSet),以及正确的 ConfigMap 注入
  • Docker Compose 模式依赖 host 网络与端口规划,避免冲突

图表来源

性能考量

  • 内存设置
    • 单机模式:根据实际负载调整 CPU/内存配额;生产建议不低于仓库中的资源上限
    • 集群模式:确保每个节点具备足够内存,避免频繁触发内存淘汰
  • 持久化
    • 已启用 AOF;可结合 RDB 快照策略实现混合持久化,平衡写放大与恢复时间
  • 连接限制
    • 生产建议设置 maxmemory 与 maxclients,并结合连接池与超时策略
  • 慢查询日志
    • 建议开启 slowlog-log-slower-than 与 slowlog-max-len,定期导出分析
  • 内存淘汰策略
    • 根据业务特征选择合适策略(如 volatile-ttl、allkeys-lru 等),并配合 TTL 控制生命周期
  • 热数据缓存
    • 对热点键设置更短的 TTL 或使用 LFU/LRU 策略,结合预热与降级策略

[本节为通用性能建议,不直接分析具体文件]

故障排查指南

  • 无法连接
    • 检查 Service 类型与端口映射(NodePort/ClusterIP)、Pod 状态与探针结果
    • 确认密码配置一致
  • 集群初始化失败
    • 核对 ConfigMap 中 cluster 配置与节点超时设置
    • 确保 gossip 端口开放且无冲突
  • 持久化异常
    • 检查 AOF 文件权限与磁盘空间
    • 关注容器日志与挂载目录
  • 资源不足
    • 观察 CPU/内存使用率与 OOM 事件,适当提升 requests/limits

章节来源

结论

  • 单机部署适合开发与小规模生产;可通过 ConfigMap 与 Service 简洁地完成部署与暴露
  • 集群部署适合高可用与水平扩展;需关注节点命名、端口规划与动态 IP 注入
  • 建议在生产环境中结合慢查询日志、内存淘汰策略与 TTL 策略,持续优化性能与稳定性

[本节为总结性内容,不直接分析具体文件]

附录

哨兵模式(概念性说明)

  • 主从监控:通过多个 Sentinel 实例监控主从状态
  • 故障检测:基于超时与多数派投票机制判断主节点失效
  • 自动故障转移:当主节点不可用时,Sentinel 将一个从节点提升为主节点,并通知其他节点与客户端更新地址
  • 注意:本仓库未提供独立的 Redis 哨兵部署清单,以上为通用实践说明

[本节为概念性内容,不直接分析具体文件]

缓存策略配置清单(建议)

  • TTL 设置:热点数据短 TTL,静态数据长 TTL 或不过期
  • 内存淘汰策略:按业务选择 volatile-ttl、allkeys-lru 等
  • 热数据缓存:对高频读取键设置预热与双写一致性策略
  • 慢查询与监控:开启 slowlog,定期导出分析;监控内存使用率与命中率

[本节为通用建议,不直接分析具体文件]