Appearance
缓存集群部署
**本文引用的文件** - [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)目录
简介
本文件面向运维工程师,系统性说明 DeviceMate 项目的 Redis 缓存集群部署方案,覆盖以下主题:
- 单机部署:内存设置、持久化、连接限制等关键配置
- 哨兵模式(概念性说明):主从监控、故障检测与自动故障转移
- 集群模式:节点分布、槽位分配、数据分片策略
- 缓存策略:TTL 设置、内存淘汰策略、热数据缓存建议
- 集群监控:性能指标、慢查询日志、内存使用监控
- 实操指引:基于仓库中现有 K8s 与 Docker Compose 的部署与优化建议
说明:当前仓库未提供 Redis 哨兵模式的独立部署清单;本文在“哨兵模式”部分以通用实践进行说明,不直接映射到具体源码文件。
项目结构
本项目通过多种方式提供 Redis 部署能力:
- Kubernetes(StatefulSet/Deployment + Service + ConfigMap)
- Docker Compose(单机与集群示例)
图表来源
- lemes-cloud/src/devops/k8s/service/base/redis.yaml:1-87
- lemes-cloud/src/devops/console/k8s/template/redis.yaml:1-105
- lemes-cloud/src/devops/docker-compose/alone.yml:1-108
- lemes-cloud/src/devops/docker-compose/base.yml:1-70
章节来源
- lemes-cloud/src/devops/k8s/service/base/redis.yaml:1-87
- lemes-cloud/src/devops/console/k8s/template/redis.yaml:1-105
- lemes-cloud/src/devops/docker-compose/alone.yml:1-108
- lemes-cloud/src/devops/docker-compose/base.yml:1-70
核心组件
- 单机 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 网络,便于集群初始化与互联
章节来源
- lemes-cloud/src/devops/k8s/service/base/redis.yaml:1-87
- lemes-cloud/src/devops/console/k8s/template/redis.yaml:1-105
- lemes-cloud/src/devops/k8s/service/base/redis-cluster.yaml:1-95
- lemes-cloud/src/devops/docker-compose/alone.yml:1-108
- lemes-cloud/src/devops/docker-compose/base.yml:1-70
架构总览
下图展示三种部署形态的总体交互关系与数据流:
图表来源
- lemes-cloud/src/devops/k8s/service/base/redis.yaml:1-87
- lemes-cloud/src/devops/k8s/service/base/redis-cluster.yaml:1-95
- lemes-cloud/src/devops/docker-compose/alone.yml:1-108
- lemes-cloud/src/devops/docker-compose/base.yml:1-70
详细组件分析
单机 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 网络简化节点互联,注意端口冲突与防火墙
图表来源
- lemes-cloud/src/devops/docker-compose/alone.yml:1-108
- lemes-cloud/src/devops/docker-compose/base.yml:1-70
章节来源
- lemes-cloud/src/devops/docker-compose/alone.yml:1-108
- lemes-cloud/src/devops/docker-compose/base.yml:1-70
依赖关系分析
- 应用侧未在仓库中直接提供 Redis 连接配置文件;部署完成后,应用需通过服务发现或环境变量获取 Redis 地址与认证信息
- 集群模式依赖稳定的网络与节点命名规则(StatefulSet),以及正确的 ConfigMap 注入
- Docker Compose 模式依赖 host 网络与端口规划,避免冲突
图表来源
- lemes-cloud/src/devops/k8s/service/base/redis.yaml:1-87
- lemes-cloud/src/devops/k8s/service/base/redis-cluster.yaml:1-95
- lemes-cloud/src/devops/docker-compose/alone.yml:1-108
- lemes-cloud/src/devops/docker-compose/base.yml:1-70
性能考量
- 内存设置
- 单机模式:根据实际负载调整 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
章节来源
- lemes-cloud/src/devops/k8s/service/base/redis.yaml:1-87
- lemes-cloud/src/devops/console/k8s/template/redis.yaml:1-105
- lemes-cloud/src/devops/k8s/service/base/redis-cluster.yaml:1-95
- lemes-cloud/src/devops/docker-compose/alone.yml:1-108
- lemes-cloud/src/devops/docker-compose/base.yml:1-70
结论
- 单机部署适合开发与小规模生产;可通过 ConfigMap 与 Service 简洁地完成部署与暴露
- 集群部署适合高可用与水平扩展;需关注节点命名、端口规划与动态 IP 注入
- 建议在生产环境中结合慢查询日志、内存淘汰策略与 TTL 策略,持续优化性能与稳定性
[本节为总结性内容,不直接分析具体文件]
附录
哨兵模式(概念性说明)
- 主从监控:通过多个 Sentinel 实例监控主从状态
- 故障检测:基于超时与多数派投票机制判断主节点失效
- 自动故障转移:当主节点不可用时,Sentinel 将一个从节点提升为主节点,并通知其他节点与客户端更新地址
- 注意:本仓库未提供独立的 Redis 哨兵部署清单,以上为通用实践说明
[本节为概念性内容,不直接分析具体文件]
缓存策略配置清单(建议)
- TTL 设置:热点数据短 TTL,静态数据长 TTL 或不过期
- 内存淘汰策略:按业务选择 volatile-ttl、allkeys-lru 等
- 热数据缓存:对高频读取键设置预热与双写一致性策略
- 慢查询与监控:开启 slowlog,定期导出分析;监控内存使用率与命中率
[本节为通用建议,不直接分析具体文件]