高可用
KubeBlocks 集成 Redis Sentinel 官方解决方案以实现高可用性,并采用 Noop 作为切 换策略。
Redis Sentinel 是 Redis 官方推荐的主备集群高可用性解决方案,在社区中备受欢迎。
在 KubeBlocks 提供的 Redis 主备集群中,Sentinel 是一个独立的组件。
开始之前
- 安装 KubeBlocks。
- 创建 Redis 主备版集群。
- 检查切换策略和角色探测参数。
-
检查切换策略是否为
Noop。kubectl get cluster redis-cluster -o yaml
>
spec:
componentSpecs:
- name: redis
componentDefRef: redis
switchPolicy:
type: Noop -
检查角色探测参数,验证角色探测是否已启用。
kubectl get cd redis -o yaml
>
probes:
roleProbe:
failureThreshold: 2
periodSeconds: 2
timeoutSeconds:1
-
步骤
- kubectl
- kbcli
-
查看 Redis 集群的初始状态。
kubectl get pods -l kubeblocks.io/role=primary -n demo
>
NAME READY STATUS RESTARTS AGE
mycluster-redis-0 3/3 Running 0 24m
kubectl get pods -l kubeblocks.io/role=secondary -n demo
>
NAME READY STATUS RESTARTS AGE
mycluster-redis-1 3/3 Running 1 (24m ago) 24m当前
mycluster-redis-0是主节点,mycluster-redis-1是从节点。备注如需更完整的输出,您可使用
-o参数。kubectl get pods -o custom-columns=NAME:.metadata.name,ROLE_LABEL:.metadata.labels."kubeblocks\.io/role" -
模拟主节点异常。
# 进入主节点
kubectl exec -ti -n demo mycluster-redis-0 -- bash
# 执行 debug sleep 命令,模拟主节点异常
root@mycluster-redis-0:/# redis-cli debug sleep 30 -
打开 Redis Sentinel 日志,查看故障切换情况。
kubectl logs mycluster-redis-sentinel-0 -n demo在日志中可以看到高可用切换发生的时间。
1:X 18 Apr 2023 06:13:17.072 # +switch-master mycluster-redis-sentinel mycluster-redis-0.mycluster-redis-headless.default.svc 6379 mycluster-redis-1.mycluster-redis-headless.default.svc 6379
1:X 18 Apr 2023 06:13:17.074 * +slave slave mycluster-redis-0.mycluster-redis-headless.default.svc:6379 mycluster-redis-0.mycluster-redis-headless.default.svc 6379 @ mycluster-redis-sentinel mycluster-redis-1.mycluster-redis-headless.default.svc 6379
1:X 18 Apr 2023 06:13:17.077 * Sentinel new configuration saved on disk -
连接到 Redis 集群,查看异常发生后的主节点信息。
127.0.0.1:6379> info replication从输出可以看到,
mycluster-redis-1是主节点。 -
查看集群,检查实例角色。
kubectl get pods -l kubeblocks.io/role=primary -n demo
kubectl get pods -l kubeblocks.io/role=secondary -n demo故障切换后,
mycluster-redis-0变成了从节点,mycluster-redis-1变成了主节点。
-
查看 Redis 集群的初始状态。
kbcli cluster describe redis-cluster
当前
redis-cluster-redis-0是主节点,redis-cluster-redis-1是从节点。 -
模拟主节点异常。
# 进入主节点
kubectl exec -it redis-cluster-redis-0 -- bash
# 执行 debug sleep 命令,模拟主节点异常
root@redis-redis-0:/# redis-cli debug sleep 30 -
打开 Redis Sentinel 日志,查看故障切换情况。
kubectl logs redis-cluster-redis-sentinel-0在日志中可以看到高可用性切换发生的时间。
1:X 18 Apr 2023 06:13:17.072 # +switch-master redis-cluster-redis-sentinel redis-cluster-redis-0.redis-cluster-redis-headless.default.svc 6379 redis-cluster-redis-1.redis-cluster-redis-headless.default.svc 6379
1:X 18 Apr 2023 06:13:17.074 * +slave slave redis-cluster-redis-0.redis-cluster-redis-headless.default.svc:6379 redis-cluster-redis-0.redis-cluster-redis-headless.default.svc 6379 @ redis-cluster-redis-sentinel redis-cluster-redis-1.redis-cluster-redis-headless.default.svc 6379
1:X 18 Apr 2023 06:13:17.077 * Sentinel new configuration saved on disk -
连接到 Redis 集群,查看异常发生后的主节点信息。
kbcli cluster connect redis-cluster# 查看当前的主节点
127.0.0.1:6379> info replication
从输出可以看到,
redis-cluster-redis-1是主节点。 -
查看集群,检查实例角色。
kbcli cluster describe redis-cluster
故障切换后,
redis-cluster-redis-0变成了从节点,redis-cluster-redis-1变成了主节点。