我遇到了一个问题,我不知道如何解决这个问题。 我的redis sentinel生态系统如下:
3个哨兵群 - >使用docker-compose管理1个主服务器和2个服务器
我为eco系统创建了一个docker overlay网络,并使用docker stack deploy来运行docker compose yml。每个节点上的redis-cli显示正确的INFO配置。但是外部客户遇到了问题。
当我向客户端应用程序提供转发地址时(在我的情况下,它是一个Spring redis应用程序),我将获得覆盖网络的主redis的内部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
redis.conf:
我评论了bind语句,以便副本侦听所有接口 保护模式是否定的 此时没有身份验证。
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
答案 0 :(得分:2)
您可能需要version: '3.3'
和endpoint_mode: vip
选项。
请参阅此链接https://docs.docker.com/compose/compose-file/#endpoint_mode