我一直在大量研究如何在kubernetes上部署具有高可用性的Redis。我在使用Redis集群模式时遇到一些问题当使用主从模式时,我们还需要部署哨兵以能够处理主故障
我一直在审查this很棒的文档,该文档解释了如何执行此操作,但我认为还缺少一些内容。
我已经部署了这里提到的内容,但是,我需要对哨兵容器进行一些更改,以使其在哨兵模式下运行,现在主要的redis-master pod清单具有主要的redis主人,哨兵看起来像这样。
# redis-master.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
name: redis
redis-sentinel: "true"
role: master
name: redis-master
spec:
containers:
- name: master
image: redis
env:
- name: MASTER
value: "true"
ports:
- containerPort: 6379
resources:
limits:
cpu: "0.1"
volumeMounts:
- mountPath: /redis-master-data
name: data
- name: sentinel
image: redis
command:
- redis-sentinel
- "/redis-master-data/redis.conf"
env:
- name: SENTINEL
value: "true"
ports:
- containerPort: 26379
volumeMounts:
- mountPath: /redis-master-data
name: data
- mountPath: /redis-master
name: config
initContainers:
- name: copy
image: redis
command: ["bash", "-c", "cp /redis-master/redis.conf /redis-master-data/"]
volumeMounts:
- mountPath: /redis-master
name: config
- mountPath: /redis-master-data
name: data
volumes:
- name: data
emptyDir: {}
- name: config
configMap:
name: example-redis-config
items:
- key: redis-config
path: redis.conf
现在毕竟我有2个问题
[首先,此文档仅为哨兵提供服务,所以我知道我应该为Redis提供服务,但我什至不确定他们是否都是大师。
第二个问题,假设一个是主机,另一个是从机,发生故障并且哨兵选出新的主机如何使新的主机属于redis主机的服务而不是从属服务(因为通常我们将创建2个服务,其中一个公开主机,而另一个供从属使用)
我希望我足够清楚如果您需要其他信息,请发表评论也
注意: 请阅读上面提到的文档,以更好地理解我的问题。
提前感谢
这可能很晚了,但据我了解,您本身并未运行Redis服务。您正在运行Redis前哨服务的复制,因此您的客户端可以连接到其中任何一个,以查询主Redis Pod的IP地址。
带有主控权的每个吊舱都有一个哨兵,与哨兵服务进行对话。学习有关其主人状态的更新。因此,每当发生故障转移时,哨兵都会更新哨兵服务,哨兵会选择一个新的主服务器,然后再次使用此信息来更新哨兵。因此,每当客户端再次查询哨兵时,它将获得新主人的IP地址。