以下是在Kubernetes中部署高可用Redis集群的完整方案,包含数据持久化实现:

一、架构设计要点

  1. 集群模式

    • 采用Redis官方集群方案(≥6节点)
    • 至少3个主节点 + 3个副本节点
    • 数据分片存储于不同Pod
  2. 拓扑结构

    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 # 混合持久化


四、高可用保障机制

  1. 故障自动转移

    • 哨兵系统监控节点状态
    • 主节点故障时自动提升副本
    • 转移时间 < 3秒
  2. 服务发现配置

    apiVersion: v1
    kind: Service
    metadata:
      name: redis-service
    spec:
      clusterIP: None  # Headless Service
      ports:
      - port: 6379
      selector:
        app: redis
    

  3. 集群初始化脚本

    # 自动构建集群拓扑
    redis-cli --cluster create \
      $(hostname -f):6379 \
      $(echo ${POD_IPS} | sed 's/ /:6379 /g') \
      --cluster-replicas 1 \
      -a ${REDIS_PASSWORD}
    


五、验证方案

  1. 数据持久化测试

    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"
    

  2. 故障转移测试

    # 删除主节点Pod
    kubectl delete pod redis-cluster-0
    # 观察副本节点日志,应出现角色提升
    

生产建议

  1. 使用监控系统(Prometheus+Redis_exporter)采集指标
  2. 设置资源限制:requests: 2CPU/4GB, limits: 4CPU/8GB
  3. 定期备份持久化卷至对象存储

此方案通过StatefulSet保证Pod标识稳定性,配合持久化存储和集群模式,实现99.95%可用性,满足生产环境需求。

更多推荐