Практическое задание

Эта задача — шаг 11 курса «Redis в проде»

Sentinel и ручной failover

сложно~25 мин

Работает пара: мастер на 6379 с данными и реплика на 6380, которая его реплицирует. Мастер нужно вывести на обслуживание — переключи роли через Sentinel, чтобы клиенты, которые спрашивают у него адрес мастера, ушли на новый.

  1. Настрой Sentinel в /etc/redis/sentinel.conf: порт 26379, наблюдает за мастером mymaster = 127.0.0.1:6379 с кворумом 1 (Sentinel у нас один), down-after-milliseconds для mymaster — не больше 10000.
  2. Запусти Sentinel в фоне и убедись, что он нашёл реплику.
  3. Выполни ручной failover средствами Sentinel.

Итог: Sentinel сообщает мастер 127.0.0.1:6380, экземпляр 6380 — мастер, бывший мастер 6379 стал его репликой, данные не потеряны. Не переключай роли руками через REPLICAOF — это должен сделать Sentinel.

Что потренируешь:
  • redis
  • Sentinel
  • failover
  • высокая доступность
  • репликация
  • кворум

Разбор темы

Redis Sentinel — отдельный процесс, который следит за мастером и его репликами, сам находит реплики через INFO мастера и при падении мастера проводит автоматический failover: выбирает реплику, делает её мастером (REPLICAOF NO ONE), перенастраивает остальные и сообщает клиентам новый адрес через SENTINEL GET-MASTER-ADDR-BY-NAME. Мастер считается упавшим, когда он не отвечает дольше down-after-milliseconds и с этим согласны quorum сентинелов; в проде их минимум три на разных машинах, чтобы не было split-brain. SENTINEL FAILOVER <имя> запускает переключение вручную без согласования — так мастер выводят на обслуживание без простоя для клиентов, которые берут адрес у Sentinel.

Что проверяется

  1. Sentinel на 26379 следит за mymaster (кворум 1, быстрый down-after)
  2. Sentinel сообщает мастер 127.0.0.1:6380
  3. 6380 стал мастером
  4. бывший мастер 6379 — реплика 6380
  5. данные на новом мастере целы

Как это выглядит