带有主节点的Docker Swarm Redis和Sentinel-从属复制IP解析客户端故障

sha*_*man 5 redis redis-sentinel spring-data-redis docker docker-swarm

我遇到了一个问题,不确定如何解决此问题。我的redis前哨生态系统如下:

3个哨兵集群->使用docker-compose管理1个主节点和2个从节点

我已经为生态系统创建了一个docker overlay网络,并使用docker stack deploy运行docker compose yml。每个节点上的redis-cli显示正确的INFO配置。但是,外部客户端遇到了问题。

当我向客户端应用程序提供哨兵地址(在我的情况下,这是一个Spring Redis应用程序)时,我正在获取主R​​edis的覆盖网络的内部IP地址。这是客户端无法识别的,并且失败。如何获得可以在外部解析的IP地址?其次,由于docker swarm管理覆盖网络上的IP地址,甚至有可能。这是正确的方法,即使用docker swarm吗?任何反馈将不胜感激。

version: '3'

services:
  redis-master:
    image: redis:latest
    volumes:
      - "/docker-service-data/master:/data"
      - /redis-docker/redis.conf:/etc/redis.conf
    command: redis-server /etc/redis.conf
    ports:
      - 6379:6379
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.role == manager]
    networks:
       - rev_proxy
  redis-slave:
    image: redis:latest
    volumes:
      - "/docker-service-data/slave:/data"
      - /redis-docker/redis.conf:/etc/redis.conf
    command: redis-server /etc/redis.conf --slaveof redis-master 6379 
    deploy:
      mode: replicated
      replicas: 2
      placement:
        constraints: [node.role == worker]
    networks:
       - rev_proxy
  sentinel_1:
    image: <private-registry>/redis-sentinel:1
    deploy:
      mode: replicated
      replicas: 3
    ports:
      - 26379:26379
    depends_on:
      - redis-master
    networks:
      - rev_proxy
networks:
  rev_proxy:
     external:
       name: rev_proxy_net
Run Code Online (Sandbox Code Playgroud)

redis.conf:

我已经评论了bind语句,以便副本侦听所有接口,保护模式为no。此时没有身份验证。

sentinel.conf:

sentinel monitor master redis-master 6379 2
sentinel down-after-milliseconds master 1000
sentinel parallel-syncs master 1
sentinel failover-timeout master 1000
Run Code Online (Sandbox Code Playgroud)

sMi*_*iLo 3

您可能需要version: '3.3'endpoint_mode: vip选择。请参阅此链接,https://docs.docker.com/compose/compose-file/#endpoint_mode