主题
Redis 高可用部署(redis 命名空间)
架构
应用 ──写──► redis-master.redis:6379 (selector isMaster=true,始终指向当前主)
──读──► redis-read.redis:6379 (selector isMaster=false,负载到全部从库)
└─Sentinel 客户端─► redis.redis:26379
┌────────────┐ ┌────────────┐ ┌────────────┐
│ redis-node-0│ │ redis-node-1│ │ redis-node-2│ Redis 8.0.2
│ redis │ │ redis │ │ redis │ 每 Pod 3 容器:
│ sentinel │ │ sentinel │ │ sentinel │ redis+sentinel+labeler
│ labeler │ │ labeler │ │ labeler │
└────────────┘ └────────────┘ └────────────┘
│ 主从异步复制 + Sentinel 自动故障转移(quorum=2)
▼
NFS 192.168.122.1:/mnt/xfs/rancher/redis(StorageClass: nfs-redis)
备份: CronJob 每天 02:00(北京) redis-cli --rdb 拉取主库快照 → NFS,保留 7 天
补偿: redis-label-sync CronJob 每 5 分钟为丢失 isMaster 标签的 Pod 补打 false| 组件 | 副本 | 高可用措施 |
|---|---|---|
| redis-node(redis+sentinel+labeler) | 3(1主2从) | Sentinel 自动故障转移(实测主库 Pod 删除后 ~30s 完成选主) |
| redis-master / redis-read Service | — | 标签驱动,故障转移后自动指向新主/新从 |
| redis-nfs-provisioner | 1 | 仅供给 PVC 时工作 |
| redis-backup | CronJob | 0 18 * * * UTC = 北京 02:00,保留 7 天 |
| redis-label-sync | CronJob | */5 * * * *,补打丢失的 isMaster=false 标签 |
镜像与 Chart(全部来自内部 Harbor 192.168.122.156:30000)
| 内容 | 内部地址 | 来源(国内源同步) |
|---|---|---|
| Redis 镜像 | redis/redis:8.0.2-debian-12-r4 | docker.m.daocloud.io/bitnamilegacy/redis |
| Sentinel 镜像 | redis/redis-sentinel:8.0.2-debian-12-r2 | docker.m.daocloud.io/bitnamilegacy/redis-sentinel |
| labeler 镜像 | redis/kubectl:1.33.2-debian-12-r0 | docker.m.daocloud.io/bitnamilegacy/kubectl |
| Redis chart | oci://…/charts/redis:21.2.6 | oci://docker.m.daocloud.io/bitnamicharts/redis |
| NFS provisioner chart/镜像 | charts/nfs-subdir-external-provisioner:4.0.18 / sig-storage/…:v4.0.2 | Harbor 已有 |
连接信息
| 用途 | 地址 | 说明 |
|---|---|---|
| 写 | redis-master.redis.svc.cluster.local:6379 | 始终指向当前主库 |
| 读 | redis-read.redis.svc.cluster.local:6379 | 负载均衡到全部从库 |
| Sentinel | redis.redis.svc.cluster.local:26379 | Sentinel 感知客户端(masterSet: mymaster) |
密码:xxx .secrets.env(REDIS_PASSWORD)。
部署命令
bash
export KUBECONFIG=~/.kube/config-122.31
cd redis/
./deploy.sh # 一键部署 + 验证(sync / check 子命令见脚本头注释)已知限制
- 从库读存在毫秒级复制延迟,强一致读请走
redis-master - 从库 Pod 重建后丢失
isMaster=false标签(chart 固有限制), 已由redis-label-syncCronJob 每 5 分钟自动补偿 - RDB 备份是定时快照,故障可能丢失最近一天增量;如需更低 RPO 可开启 AOF 或缩短备份周期
密码
密码生成后保存在 .secrets.env(勿提交到公共仓库)。