高可用
KubeBlocks 集成 Redis Sentinel 官方解决方案以实现高可用性,并采用 Noop 作为切换策略。
Redis Sentinel 是 Redis 官方推荐的主备集群高可用性解决方案,在社区中备受欢迎。
在 KubeBlocks 提供的 Redis 主备集群中,Sentinel 是一个独立的组件。
开始之前
检查切换策略和角色探测参数。
检查切换策略是否为
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
步骤
查看 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
变成了主节点。