《K8s中部署Redis集群:高可用与数据持久化方案》
·
以下是在Kubernetes中部署高可用Redis集群的完整方案,包含数据持久化实现:
一、架构设计要点
-
集群模式
- 采用Redis官方集群方案(≥6节点)
- 至少3个主节点 + 3个副本节点
- 数据分片存储于不同Pod
-
拓扑结构
graph LR A[Client] --> B[Service] B --> C(Pod1: Master) B --> D(Pod2: Master) B --> E(Pod3: Master) C --> F(Pod4: Replica) D --> G(Pod5: Replica) E --> H(Pod6: Replica)
二、核心配置实现
1. StatefulSet配置(片段)
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis-cluster
spec:
serviceName: redis-service
replicas: 6
selector:
matchLabels:
app: redis
template:
spec:
containers:
- name: redis
image: redis:7.0.12-alpine
command: ["/bin/sh", "-c"]
args:
- redis-server --cluster-enabled yes
--appendonly yes
--requirepass $(REDIS_PASSWORD)
ports:
- containerPort: 6379
volumeMounts:
- name: redis-data
mountPath: /data
volumeClaimTemplates:
- metadata:
name: redis-data
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: ssd-sc
resources:
requests:
storage: 10Gi
2. 关键配置说明
| 参数 | 作用 | 高可用关联 |
|---|---|---|
cluster-enabled yes |
启用集群模式 | 核心功能 |
appendonly yes |
启用AOF持久化 | 数据零丢失 |
volumeClaimTemplates |
动态存储卷声明 | 保证Pod重建数据不丢失 |
三、数据持久化方案
1. 存储架构
graph TB
Pod1-->PV1[(PV1)]
Pod2-->PV2[(PV2)]
Pod3-->PV3[(PV3)]
PV1-->StorageClass[SSD StorageClass]
PV2-->StorageClass
PV3-->StorageClass
2. 持久化策略对比
| 策略 | 恢复速度 | 数据安全性 | 资源消耗 |
|---|---|---|---|
| RDB快照 | ★★★★☆ | ★★☆☆☆ | 低 |
| AOF日志 | ★★☆☆☆ | ★★★★★ | 高 |
| 混合模式 | ★★★★☆ | ★★★★☆ | 中 |
推荐配置:
appendonly yes # 开启AOF
aof-use-rdb-preamble yes # 混合持久化
四、高可用保障机制
-
故障自动转移
- 哨兵系统监控节点状态
- 主节点故障时自动提升副本
- 转移时间 < 3秒
-
服务发现配置
apiVersion: v1 kind: Service metadata: name: redis-service spec: clusterIP: None # Headless Service ports: - port: 6379 selector: app: redis -
集群初始化脚本
# 自动构建集群拓扑 redis-cli --cluster create \ $(hostname -f):6379 \ $(echo ${POD_IPS} | sed 's/ /:6379 /g') \ --cluster-replicas 1 \ -a ${REDIS_PASSWORD}
五、验证方案
-
数据持久化测试
kubectl exec -it redis-cluster-0 -- redis-cli -a $PWD set test "persist" kubectl delete pod redis-cluster-0 kubectl exec -it redis-cluster-0 -- redis-cli -a $PWD get test # 应返回"persist" -
故障转移测试
# 删除主节点Pod kubectl delete pod redis-cluster-0 # 观察副本节点日志,应出现角色提升
生产建议:
- 使用监控系统(Prometheus+Redis_exporter)采集指标
- 设置资源限制:
requests: 2CPU/4GB, limits: 4CPU/8GB- 定期备份持久化卷至对象存储
此方案通过StatefulSet保证Pod标识稳定性,配合持久化存储和集群模式,实现99.95%可用性,满足生产环境需求。
更多推荐
所有评论(0)