在Kubernetes中创建redis sentinel集群,redis master无法获取slave origin



我使用K8s示例在Kubernetes上创建一个可靠的、可扩展的Redis。https://github.com/kubernetes/kubernetes/tree/master/examples/redis

Redis master需要获取slave的原始IP并注册到sentinel。当主机发生故障时,Sentinel将用于切换主机。

但是My docker在没有标志iptables=false的情况下启动(它将创建一个类似SNAT的iptables),因此redis从属源IP将是SNAT,而主将获得类似172.16.103.0的法兰绒0的IP。

我还添加了法兰绒网络到节点之间的容器连接。

因此,问题是"有没有任何方法可以在不删除iptables标志的情况下获得源IP,或者用另一种方法创建可靠的redis集群。"

EDIT:我已经找到了让这项工作发挥作用的神奇的标志组合。

1) 运行stop-docker&引导程序docker处理

systemctl stop docker && pkill -f "docker-bootstrap" && sleep 10  

2) 删除iptables规则:

iptables -F && iptables -t nat -F  

3) 使用ip-masq=false选项运行docker守护进程
4) 运行你的法兰绒与ip masq=true选项

对我来说,这使得所有三个pod->pod,pod->ext,&ext->service->pod完美工作。

希望这对你们其他人有效!


(保留描述症状的初始反应)

我对导游也有同样的问题。从机复制得很好,但主机无法正确检查从机状态,因为连接来自点零ip。

Proto Recv-Q Send-Q Local Address           Foreign Address         State      

从主视角来看的从机->主机连接示例(显示从机的错误IP):

tcp   0      0 redis-master:6379       10.1.37.0:51674         ESTABLISHED

示例从机->从机视角的主机连接(显示主机的右ip):

tcp   0      0 redis-03fdy:51674       10.1.90.2:6379          ESTABLISHED

以下是来自ps.的redis服务器命令

主:

root   12  0.1  0.2  26876  2352 ?   Sl   10:42   0:02 redis-server 10.1.90.2:6379

从属:

root   18  0.1  0.2  26876  2300 ?   Sl   10:48   0:00 redis-server 10.1.37.3:6379

我们通过在redis pod中设置hostNetworking: true来解决这个问题。这意味着redis服务器无法获得容器IP(172..),这无疑是一个解决方案,但解决了这个问题。

以下是如何在Kubernetes/Openshift OKD中设置Redis HA主从集群,而不使用Helm,并且sentinal不需要

基本上,您必须与VolumeClaims 协作使用configMap、StatefulSet

最新更新