0

如题所述,使用docker来测试部署redis的哨兵模式,哨兵发现不了从机。主从架构是没有问题的,从机能正确的从主节点同步数据,主界面也能看到当前有多少从节点。

启动了一个主节点,两个从节点,没有配置密码,可以正常运行

docker run -d -p  6379:6379 --name_master redis -v /usr/local/redis:/etc/redis redis redis-server /etc/redis/redis.conf
docker run -d -p  6380:6379 --name redis_slave1 -v /usr/local/redis:/etc/redis redis redis-server /etc/redis/redis.conf
docker run -d -p  6381:6379 --name redis_slave1 -v /usr/local/redis:/etc/redis redis redis-server /etc/redis/redis.conf

然后分别进入两个从节点指定主节点的ip和端口

这样就完成了主从架构


然后启动哨兵

docker run -d -p 26379:26379 --name redis_sentinel1 -v /usr/local/redis:/etc/redis redis redis-sentinel /etc/redis/sentinel.conf

配置文件内容如下:

protected-mode no
bind 0.0.0.0
port 26379
daemonize no

pidfile "/var/run/redis-sentinel.pid"
logfile ""
dir "/tmp"

sentinel monitor mymaster 192.168.99.100 6379 1
sentinel down-after-milliseconds mymaster 5000

sentinel failover-timeout mymaster 180000

192.168.99.100 是我的 docker 虚拟机的ip地址,我是windows 10系统。 整个配置就是这样,哨兵可以正常启动,但是在redis_sentinel1中使用命令行执行info命令,查看结果如下:

clipboard.png

只显示一个从节点,而且这个从节点还不是之前启动的两个从节点中的任何一个。

clipboard.png

整了一个晚上都没搞好,哪位大神知道什么地方有问题,不胜感激

11月12日提问
1 个回答
0

已采纳

找到原因了,因为集群不仅需要开放redis端口还需要开放集群总线端口,
例如:redis端口为6379,则集群总线端口为16379
redis端口为6380,则集群总线端口为16380

所以在创建docker容器的时候同时开放集群总线端口就好了。如果是在一台机器部署,则可以修改redis端口,例如redis master的端口是6379,则修改从机端口为6380,这样就OK了

撰写答案

推广链接