Redis Sentinel 不遵守 advertise-ip 选项

Redis Sentinel 不遵守 advertise-ip 选项

我正在尝试在我的系统上使用 docker-compose 创建一个 redis-sentinel 集群并使其在主机上可见(这是为了尝试复制将在本地使用 redis-sentinel 的应用程序)。

我创建了以下docker-compose.yaml文件来设置 sentinel 和 redis 本身

version: '2'

networks:
  app-tier:
    driver: bridge

services:
  redis-sentinel:
    image: s7anley/redis-sentinel-docker
    environment:
      - ANNOUNCE_IP=127.0.0.1
      - ANNOUNCE_PORT=26379
      - MASTER_NAME=mymaster
      - MASTER=redis
    networks:
      - app-tier
    ports:
      - '26379:26379'
  redis:
    image: bitnami/redis:latest
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
    networks:
      - app-tier
    ports:
      - '6379:6379'
volumes:
  redis_data:
    driver: local

哨兵设法启动并正确找到 redis 主服务器,但是它似乎不尊重该announce-ip选项,事实上它似乎完全忽略了它。

即当我redis-cli在主机上启动并询问主机地址时,我得到了这个

redis-cli -p 26379
127.0.0.1:26379> SENTINEL get-master-addr-by-name mymaster
1) "192.168.32.2"
2) "6379"
127.0.0.1:26379>

报告的ip应该是127.0.0.1而不是192.168.32.2(这是docker在网络中使用的内部ip)

这是sentinel.confdocker 镜像中使用的文件

port 26379
sentinel announce-ip 127.0.0.1
sentinel announce-port 26379
sentinel monitor mymaster redis 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster

这是 redis-sentinel 启动后重写配置文件的样子

port 26379
sentinel myid 4e7786e55f2b4ec31bdd36c1c3af6e2d3f2569e3
sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 192.168.32.2 6379 2
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel current-epoch 0
# Generated by CONFIG REWRITE
dir "/data"
sentinel announce-ip "127.0.0.1"
sentinel announce-port 26379

有人知道这可能是什么原因造成的吗?

答案1

sentinel 宣布-ip 127.0.0.1

该行适用于 Sentinel,而不适用于 redis-server。它是 Sentinel 将向其他 Sentinel 通告的 IP 地址(它们会自动发现彼此)。请参阅相关文件

如果你希望 redis 仅在 127.0.0.1 上监听,我认为将其放入 redis 配置中应该可行:

绑定 127.0.0.1

默认情况下,redis 绑定所有网络接口。

相关内容