Redis Cluster 模式
虽然 Redis Sentinel 集群提供了出色的故障转移支持,但其本身不提供数据分片,所有数据仍然驻留在单个 Redis 实例上,并受到该实例的内存和性能限制,因此可能会影响系统在处理大型数据集和高读/写操作时的水平扩展能力。
KubeBlocks 现已支持 Redis Cluster 模式。该模式不仅允许更大的内存分布,还支持并行处理,从而显著地提高了数据密集型操作的性能。本文档将简要介绍 Redis Cluster 模式及其基本操作。
什么是 Redis Cluster 模式
Redis Cluster 是 Redis 数据库的一种分布式部署模式,用于在多个节点上水平扩展数据存储和提高系统的可用性。
在 Redis Cluster 中,集群通过分片(sharding)模式来对数据进行管理,并具备分片间数据复制、故障转移和流量调度的能力。这种分片机制允许将大量数据分散存储在不同的节点上,从而实现数据的横向扩展和负载均衡。
Redis Cluster 采用主从复制的方式保证数据的高可用性。每个主节点可以有一个或多个从节点,从节点复制主节点的数据并提供读取服务。当主节点发生故障时,从节点可以自动接管主节点的功能,并继续提供服务,从而实现故障转移和容错性。
Redis Cluster 还提供集群的节点间通信和数据迁移机制。当集群中的节点发生变更(如新增节点、节点故障、节点移除)时,Redis Cluster 会自动进行数据迁移和重新分片,以保持数据的平衡和可用性。
基本运维操作
下面简单介绍 Redis Cluster 的基本运维操作。
开始之前
-
安装 KubeBlocks,可通过 kbcli 或 Helm 安装。
- KubeBlocks 及 Addon 的版本都需要 0.9 版本以上。
-
确保 Redis 引擎已启用。
-
查看可用于创建集群的数据库类型和版本。
查看 redis 组件定义是否可用。组件定义用于描述和定义数据库集群的组件,通常呈现诸如名称、类型、版本、状态等基本信息。
kubectl get componentdefinition redis-cluster-7.0
>
NAME SERVICE SERVICE-VERSION STATUS AGE
redis-cluster-7.0 redis-cluster 7.0.6 Available 33m -
为了保持隔离,本文档中创建一个名为 demo 的独立命名空间。
kubectl create namespace demo
>
namespace/demo created
创建集群
因为 Redis Cluster 是基于最新的 ShardingSpec API 创建的,目前只支持通过 helm 或者 kubectl apply yaml 创建。
Redis Cluster 至少需要三个分片,所以分片数量不能小于 3。
- Helm
- YAML
# 示例一:生产一个具有三个分片,每个分片一个副本(一主一备)的 Redis Cluster 集群
helm install redisc xxxxx(chart remote address) --set mode=cluster --set redisCluster.shardCount=3 --set replicas=2 -n demo
# 示例二:生产一个具有三个分片,每个分片一个副本(一主一备), 并开启 NodePort 访问的 Redis cluster 集群
helm install redisc xxxxx(chart remote address) --set mode=cluster --set nodePortEnabled=true --set redisCluster.shardCount=3 --set replicas=2 -n demo
kubectl apply -f redis-cluster-example.yaml
示例 1: 未开启 NodePort 的 Redis Cluster
apiVersion: apps.kubeblocks.io/v1alpha1
kind: Cluster
metadata:
name: redisc
namespace: demo
spec:
affinity:
podAntiAffinity: Preferred
topologyKeys:
- kubernetes.io/hostname
clusterVersionRef: redis-7.0.6
shardingSpecs:
- name: shard
# 指定分片数量,不能小于3
shards: 3
template:
componentDef: redis-cluster-7
name: redis
replicas: 2
# 指定单个分片的资源
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 500m
memory: 512Mi
serviceVersion: 7.0.6
volumeClaimTemplates:
- name: data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
terminationPolicy: Delete