我使用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