Назад | Перейти на главную страницу

Redis Sentinel не соблюдает параметр объявления-ip

Я пытаюсь создать кластер redis-sentinel с помощью docker-compose в моей системе и сделать его видимым для хост-машины (это делается для того, чтобы попытаться воспроизвести приложение, которое будет использовать redis-sentinel локально).

Я создал следующие docker-compose.yaml файл для настройки как часового, так и самого 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 (это внутренний IP-адрес, который докер использует в сети)

Это sentinel.conf файл, который используется в образе докера

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

Кто-нибудь знает, что может быть причиной этого?

дозорный анонс-ip 127.0.0.1

Эта строка относится к Sentinel, а не к redis-server. Это IP-адрес, который Sentinel объявляет другим Sentinel (они автоматически обнаруживают друг друга). Видеть соответствующие документы.

Если вы хотите, чтобы redis слушал только 127.0.0.1, я думаю, что включение этого в конфигурацию redis должно работать:

привязать 127.0.0.1

По умолчанию redis связывает все сетевые интерфейсы.