Redis Sentinel 不会自动发现新的从属实例

问题描述 投票:0回答:1

我已经在启用了 Sentinel 的 k8s 上部署了 redis helm chart

我用Sentineltopology设置了Master-Replicas,就是一主两从。每个 Pod 都成功运行 Redis 和 Sentinel 容器:

NAME             READY   STATUS    RESTARTS   AGE     IP             NODE
my-redis-pod-0   2/2     Running   0          5d22h   10.244.0.173   node-pool-u
my-redis-pod-1   2/2     Running   0          5d22h   10.244.1.96    node-pool-j
my-redis-pod-2   2/2     Running   0          3d23h   10.244.1.145   node-pool-e

现在,我有一个 python 脚本,它连接到 redis 并通过向其传递 pod 的 ip 来发现 master。

sentinel = Sentinel([('10.244.0.173', 26379),
                     ('10.244.1.96',26379),
                     ('10.244.1.145',26379)],
                  sentinel_kwargs={'password': 'redispswd'})

host, port = sentinel.discover_master('mymaster')
redis_client = StrictRedis(
            host=host,
            port=port,
            password='redispswd')

假设主节点位于 my-redis-pod-0 上,当我执行

kubectl delete pod
来模拟导致我丢失 pod 的问题时,Sentinel 会将其他从节点之一提升为主节点,并且 kubernetes 会给出我有一个带有 redis 和 Sentinel 的新 pod。

NAME             READY   STATUS    RESTARTS   AGE     IP             NODE
my-redis-pod-0   2/2     Running   0          3m      10.244.0.27    node-pool-u
my-redis-pod-1   2/2     Running   0          5d22h   10.244.1.96    node-pool-j
my-redis-pod-2   2/2     Running   0          3d23h   10.244.1.145   node-pool-e

问题是,我该如何告诉 Sentinel 自动添加这个新 IP 到列表中(无需更改代码)?

谢谢!

kubernetes redis redis-sentinel
1个回答
1
投票

您可以使用 DNS 条目来实现无头服务,而不是使用 IP。

无头服务是通过显式指定来创建的

ClusterIP: None

然后您将能够使用如下所示的 dns 条目,其中 redis-0 将成为 master

#syntax
pod_name.service_name.namespace.svc.cluster.local

#Example
redis-0.redis.redis.svc.cluster.local
redis-1.redis.redis.svc.cluster.local
redis-2.redis.redis.svc.cluster.local

参考资料: 什么是无头服务,它做什么/完成什么,以及它的一些合法用例是什么?

https://www.containiq.com/post/deploy-redis-cluster-on-kubernetes

© www.soinside.com 2019 - 2024. All rights reserved.