4

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

Redis master 需要获取 slave 的 origin IP 并注册到 sentinel。当主控失败时,哨兵将使用切换主控。

但是我的docker启动时没有iptables=false这个标志(它会创建一个类似SNAT的iptables),所以redis的slave源IP会是SNAT,而master会得到flannel0的IP,比如172.16.103.0。

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

所以问题是“是否有任何方法可以在不删除 iptables 标志的情况下获取源 IP,或者另一种方法来创建 Reliable redis 集群。”

4

3 回答 3

2

编辑:我已经找到了标志的神奇组合来让它工作。

1) 运行 stop docker & bootstrap 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      

从主机的角度示例从机-> 主机连接(显示错误的从机 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
于 2016-05-24T11:15:22.880 回答
0

是在 Kubernetes/Openshift OKD 中设置 Redis HA 主从集群的方法,无需使用 Helm,并且不需要哨兵

基本上你必须使用 configMap、StatefulSet 与 VolumeClaims 合作

于 2020-10-02T07:56:40.790 回答
0

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

于 2016-05-31T13:28:07.600 回答