Конфигурация аварийного переключения Redis sentinel в Docker Swarm

Описание


Я пытаюсь создать кластер Redis в рое докеров. Я использую образ bitnami-redis-docker для создания своих контейнеров. Просматривая документацию по битнам, они всегда предлагают использовать 1 главный узел, а не читать документацию Redis, в которой говорится, что должно быть как минимум 3 главных узла, поэтому я не понимаю, какой из них правильный. Учитывая, что все ведомые устройства битнами по умолчанию доступны только для чтения, если я установлю только один ведущий узел в одном из узлов-лидеров роя, и если он потерпит неудачу, я считаю, что дозорный попытается продвинуть другой ведомый экземпляр redis в качестве ведущего, но с учетом того, что он доступен только для чтения, все операции записи завершатся ошибкой. Если я изменю это, чтобы сделать главный экземпляр redis как global, что означает, что он будет создан на всех узлах, доступных в рое, в этом случае мне вообще потребуется дозорная? Также, если приведенная ниже настройка хороша, есть ли причина для введения балансировщика нагрузки?

Настраивать


+------------------+ +------------------+ +------------------+ +------------------+
| Node-1           | | Node-2           | | Node-3           | | Node-4           |     
| Leader           | | Worker           | | Leader           | | Worker           |
+------------------+ +------------------+ +------------------+ +------------------+
|  M1              | | M2               | | M3               | | M4               |
|  R1              | | R2               | | R3               | | R4               |
|  S1              | | S2               | | S3               | | S4               |
|                  | |                  | |                  | |                  |
+------------------+ +------------------+ +------------------+ +------------------+

Легенды -

  • Мастера называются M1, M2, M3, ..., Mn.
  • Подчиненные устройства называются R1, R2, R3, ..., Rn (R означает реплика).
  • Стражи называются S1, S2, S3, ..., Sn.

Докер


version: '3'

services:
  redis-master:
    image: 'bitnami/redis:latest'
    ports:
      - '6379:6379'
    environment:
      - REDIS_REPLICATION_MODE=master
      - REDIS_PASSWORD=laSQL2019
      - REDIS_EXTRA_FLAGS=--maxmemory 100mb
    volumes:
      - 'redis-master-volume:/bitnami'
    deploy:
      mode: global

  redis-slave:
    image: 'bitnami/redis:latest'
    ports:
      - '6379'
    depends_on:
      - redis-master
    volumes:
      - 'redis-slave-volume:/bitnami'
    environment:
      - REDIS_REPLICATION_MODE=slave
      - REDIS_MASTER_HOST=redis-master
      - REDIS_MASTER_PORT_NUMBER=6379
      - REDIS_MASTER_PASSWORD=laSQL2019
      - REDIS_PASSWORD=laSQL2019
      - REDIS_EXTRA_FLAGS=--maxmemory 100mb
    deploy:
      mode: replicated
      replicas: 4
      
  redis-sentinel:
    image: 'bitnami/redis:latest'
    ports:
      - '16379'
    depends_on:
      - redis-master
      - redis-slave
    volumes:
      - 'redis-sentinel-volume:/bitnami'
    entrypoint: |
      bash -c 'bash -s <<EOF
      "/bin/bash" -c "cat <<EOF > /opt/bitnami/redis/etc/sentinel.conf
      port 16379
      dir /tmp
      sentinel monitor master-node redis-master 6379 2
      sentinel down-after-milliseconds master-node 5000
      sentinel parallel-syncs master-node 1
      sentinel failover-timeout master-node 5000
      sentinel auth-pass master-node laSQL2019
      sentinel announce-ip redis-sentinel
      sentinel announce-port 16379
      EOF"     
      "/bin/bash" -c "redis-sentinel /opt/bitnami/redis/etc/sentinel.conf"    
      EOF'
    deploy:
      mode: global
                     
volumes:
  redis-master-volume:
    driver: local
  redis-slave-volume:
    driver: local
  redis-sentinel-volume:
    driver: local

person Soham Dasgupta    schedule 09.05.2018    source источник


Ответы (1)


Решение Bitnami - это решение для аварийного переключения, поэтому оно имеет один главный узел.

Sentinel - это решение высокой доступности, то есть автоматическое переключение при отказе. Но он не обеспечивает масштабируемости с точки зрения распределения данных по множеству узлов. Вам нужно будет настроить кластеризацию, если вы хотите «сегментирование» в дополнение к «HA».

person Srini Sydney    schedule 29.05.2018