关于docker 构建redis 主从/哨兵/集群网络问题

关于docker 构建redis 主从/哨兵/集群网络问题

问题分析

最近在使用docker构建redis集群时,遇到了一个问题:基于docker所构建的redis集群在docker容器内是能够访问的,但是在容器外或者两个无关联的容器间,是无法访问的。经过查阅官方文档,发现了原来是redis与的docker网络模式不兼容的原因。

我们知道docker在运行容器时,容器内部有一个独立的网络(默认情况下),通过docker设置的虚拟网桥与外部通信。并且我们可以使用-p参数来映射docker容器的端口。docker使用的是一种类似端口映射的技术,这导致容器内外的ip和端口可能是不一样。而redis主从节点间通信时,是基于INFO命令的信息来自动发现从节点的ip和端口信息。当集群运行的容器里时,redis获取的信息的容器内部的ip和端口。
运行info 命令,可以看到节点的ip和端口是容器内部ip。
从节点ip和端口

解决方案

这个问题,在主从模式,哨兵模式,集群模式下都会遇到。redis官方提供了3个解决方案:

1.主动配置

redis提供了2个参数(redis.conf),可以强制slave向master声明任意IP和端口对:

replica-announce-ip 5.5.5.5
replica-announce-port 1234

使用这两个参数后,从节点发送给主节点的ip和端口信息就是这里设定好了。<

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值