在Kubernetes中创建一个redis sentinel集群,redis master无法获得从属IP

时间:2016-05-10 07:21:26

标签: kubernetes redis-sentinel

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

Redis主机需要获得原始IP的奴隶并注册到哨兵。当主站发生故障时,Sentinel将用于切换主站。

但是我的docker在没有标志iptables = false的情况下启动(它将创建一个像SNAT一样的iptables),因此redis从属源IP将是SNAT,而master将获得flannel0的IP,如172.16.103.0。

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

所以问题是"是否可以在不删除iptables标志的情况下获取源IP,或者以其他方式创建可靠的redis集群。"

3 个答案:

答案 0 :(得分:2)

编辑:我已经找到了标志的神奇组合,以使其发挥作用。

1)run stop docker&引导程序泊坞程序进程

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

2)删除iptables规则:

iptables -F && iptables -t nat -F  

3)使用ip-masq = false选项运行你的docker-daemon 4)使用ip-masq = true选项运行你的flanneld

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

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

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

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

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

示例slave->主视角的主连接(显示从站的IP错误):

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

示例slave->从slave透视的主连接(显示master的右侧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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

Here是如何在Kubernetes / Openshift OKD中设置Redis HA Master Slave Cluster的方法,而无需使用Helm,并且无需使用警戒线

基本上,您必须与VolumeClaims配合使用configMap,StatefulSet