Docker Redis Sentinel ip地址问题与docker堆栈部署
我正在尝试使用Docker(17.06.1-ce-win)设置一个基于哨兵的Redis集群,并且在使用IP地址时遇到了一个问题
docker stack deploy
这是我docker-compose.yml
(基于这个存储库 )
version: "3.2" services: redismaster: image: redis:3 ports: - 6381:6379 redisslave: image: redis:3 command: redis-server --slaveof redismaster 6379 ports: - 6382:6379 depends_on: - redismaster sentinel1: image: 127.0.0.1:5000/sentineldemo build: sentinel depends_on: - redismaster - redisslave ports: - 26379:26379 sentinel2: image: 127.0.0.1:5000/sentineldemo depends_on: - redismaster - redisslave ports: - 26380:26379 sentinel3: image: 127.0.0.1:5000/sentineldemo depends_on: - redismaster - redisslave ports: - 26381:26379
在调用docker stack deploy docker-compose.yml stackdemo
,我最终得到了包含5个容器的预期覆盖networking(1个主站,1个从站,3个哨兵)。检查networking时,我看到每个容器的IP地址为表单10.0.0.x,其中x是一个奇数。
说主人有IP 10.0.0.3。
问题从这一点开始(尽pipe一切看起来都是一成不变的):
- 当我从奴隶获得的信息,我看到奴隶看到ip 10.0.0.2为主(而不是在networking检查10.0.0.3)
- 当我从一个容器nslookup redismaster,我得到10.0.0.2结果
- 那么,如果我通过使主机睡眠10秒来触发故障切换:
redis-cli -p 6381 DEBUG SLEEP 10
,从机被提升为主机,正如所料。 但是我看到这个新主人有两个奴隶 ,ips是10.0.0.3和10.0.0.2 - 那么,如果我在这个升级的主
redis-cli -p 6382 DEBUG SLEEP 10
上再次触发故障转移:redis-cli -p 6382 DEBUG SLEEP 10
初始主节点作为master(ip 10.0.0.2)和slave(ip 10.0.0.3)出现在sentinels上,
这似乎会导致不稳定的行为,在一段时间内,我可以写在主人和奴隶上。
我对Docker非常陌生。 据我所知,在redismaster
– redismaster
指定的redismasterparsing为服务的虚拟IP,而在master和slave的redis自动发现过程中parsing的ip是容器(10.0.0.3)
我的问题:
- 这是预期的行为? 我在linux上遇到了与docker相同的行为
- 我对这个问题的理解是否正确?
- 我错过了一些明显的东西,我怎么能绕过这个问题呢?
请注意,使用docker-compose up -d时,我没有遇到任何问题