gpt4 book ai didi

kubernetes - Kubernetes 上的 Redis 哨兵 HA

转载 作者:行者123 更新时间:2023-12-04 07:32:14 33 4
gpt4 key购买 nike

我试图让 1 个 redis master 和 2 个 redis 副本绑定(bind)到 Kubernetes 上的 3 Quorum Sentinel。我对 Kubernetes 很陌生。
我最初的计划是让主节点在与 1 个 Kubernetes SVC 绑定(bind)的 Pod 上运行,2 个副本在它们自己的 Pod 上运行,并与另一个 Kubernetes SVC 绑定(bind)。最后,3 个 Sentinel pod 将绑定(bind)到它们自己的 SVC。副本将绑定(bind)到主 SVC(因为没有 svc,ip 会改变)。哨兵也将被配置并绑定(bind)到主 SVC 和副本 SVC。但我不确定这是否可行,因为当主 pod 崩溃时,其中一个副本 pod 将如何移动到主 SVC 并成为主?那可能吗?
我采用的第二种方法是将 redis pod 包装在复制 Controller 中,对于哨兵也是如此。但是,我不确定如何使用复制 Controller 使其中一个 pod 成为 master 和其他副本。
这两种方法中的任何一种都行得通吗?如果没有,我可以采用更好的设计吗?任何线索将不胜感激。

最佳答案

您可以使用 Helm 部署 Redis Sentinel包管理器和 Redis Helm Chart .
如果您没有 Helm3还没安装,可以用这个documentation安装它。
我将提供一些解释来说明它是如何工作的。

首先我们需要得到 values.yaml来自 Redis Helm Chart 的文件来自定义我们的安装:

$ wget https://raw.githubusercontent.com/bitnami/charts/master/bitnami/redis/values.yaml
我们可以在 values.yaml中配置很多参数file ,但出于演示目的,我只启用了 Sentinel 并设置了 redis 密码:
注意:有关可以在安装期间配置的参数列表,请参阅 Redis Helm Chart Parameters文档。
# values.yaml

global:
redis:
password: redispassword
...
replica:
replicaCount: 3
...
sentinel:
enabled: true
...
然后我们可以使用 values.yaml 中的配置部署 Redis文件:
注意:它将部署一个由 StatefulSets 管理的三个 Pod 集群(一个主和两个从)。与 sentinel在每个 Pod 内运行的容器。
$ helm install redis-sentinel bitnami/redis --values values.yaml
请务必仔细阅读 备注 图表安装输出部分。它包含许多有用的信息(例如,如何从集群外部连接到您的数据库)
安装后查看redis StatefulSet , PodsServices ( headless service 可用于内部访问):
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP
redis-sentinel-node-0 2/2 Running 0 2m13s 10.4.2.21
redis-sentinel-node-1 2/2 Running 0 86s 10.4.0.10
redis-sentinel-node-2 2/2 Running 0 47s 10.4.1.10


$ kubectl get sts
NAME READY AGE
redis-sentinel-node 3/3 2m41s

$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
redis-sentinel ClusterIP 10.8.15.252 <none> 6379/TCP,26379/TCP 2m
redis-sentinel-headless ClusterIP None <none> 6379/TCP,26379/TCP 2m
如您所见,每个 redis-sentinel-node Pod 包含 redissentinel容器:
$ kubectl get pods redis-sentinel-node-0 -o jsonpath={.spec.containers[*].name}
redis sentinel
我们可以查看 sentinel容器日志以找出 redis-sentinel-node是主人:
$ kubectl logs -f redis-sentinel-node-0 sentinel
...
1:X 09 Jun 2021 09:52:01.017 # Configuration loaded
1:X 09 Jun 2021 09:52:01.019 * monotonic clock: POSIX clock_gettime
1:X 09 Jun 2021 09:52:01.019 * Running mode=sentinel, port=26379.
1:X 09 Jun 2021 09:52:01.026 # Sentinel ID is 1bad9439401e44e749e2bf5868ad9ec7787e914e
1:X 09 Jun 2021 09:52:01.026 # +monitor master mymaster 10.4.2.21 6379 quorum 2
...
1:X 09 Jun 2021 09:53:21.429 * +slave slave 10.4.0.10:6379 10.4.0.10 6379 @ mymaster 10.4.2.21 6379
1:X 09 Jun 2021 09:53:21.435 * +slave slave 10.4.1.10:6379 10.4.1.10 6379 @ mymaster 10.4.2.21 6379
...
从上面的日志可以看出, redis-sentinel-node-0 Pod 是主人, redis-sentinel-node-1 & redis-sentinel-node-2 pod 是奴隶。
为了测试,让我们删除 master 并检查 sentinel 是否会将 master 角色切换为 slave 之一:
    $ kubectl delete pod redis-sentinel-node-0
pod "redis-sentinel-node-0" deleted

$ kubectl logs -f redis-sentinel-node-1 sentinel
...
1:X 09 Jun 2021 09:55:20.902 # Executing user requested FAILOVER of 'mymaster'
...
1:X 09 Jun 2021 09:55:22.666 # +switch-master mymaster 10.4.2.21 6379 10.4.1.10 6379
...
1:X 09 Jun 2021 09:55:50.626 * +slave slave 10.4.0.10:6379 10.4.0.10 6379 @ mymaster 10.4.1.10 6379
1:X 09 Jun 2021 09:55:50.632 * +slave slave 10.4.2.22:6379 10.4.2.22 6379 @ mymaster 10.4.1.10 6379
一个新的主人( redis-sentinel-node-2 10.4.1.10 )已被选中,所以一切都按预期工作。
此外,我们可以通过连接到 Redis 节点之一来显示更多信息:
$ kubectl run --namespace default redis-client --restart='Never' --env REDIS_PASSWORD=redispassword --image docker.io/bitnami/redis:6.2.1-debian-10-r47 --command -- sleep infinity
pod/redis-client created
$ kubectl exec --tty -i redis-client --namespace default -- bash
I have no name!@redis-client:/$ redis-cli -h redis-sentinel-node-1.redis-sentinel-headless -p 6379 -a $REDIS_PASSWORD
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
redis-sentinel-node-1.redis-sentinel-headless:6379> info replication
# Replication
role:slave
master_host:10.4.1.10
master_port:6379
master_link_status:up
...

关于kubernetes - Kubernetes 上的 Redis 哨兵 HA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67886898/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com