【发布时间】:2019-09-17 03:27:21
【问题描述】:
我一直在寻找如何在 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
毕竟我有两个问题
首先这个文档只为哨兵提供服务,所以我知道我应该为 redis 提供服务,但我什至不确定它们是否都是主人。
第二个问题假设一个是master,另一个是slave,当发生故障并且哨兵选择一个新的master时 如何使新的主服务器属于 redis 主服务器的服务而不是从服务(因为通常我们会创建 2 个服务,一个暴露主服务器,另一个用于从服务器)
注意: 请查看上述文档以更好地理解我的问题。
【问题讨论】:
-
我建议你使用redis操作符github.com/spotahome/redis-operator。我在哨兵模式和集群模式下都遇到了很多故障转移问题。 Redis 使用 ip 地址在哨兵和主/从节点之间进行通信。一旦发生 ip 更改,该节点将丢失,直到您手动重置哨兵集群并且 pod 的 ip 地址是临时的。
标签: kubernetes redis high-availability fault-tolerance