我使用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集群。"
答案 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