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

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

Свой Redis Cluster из трёх мастеров

сложно~25 мин

Собери Redis Cluster из трёх мастер-узлов на этой машине:

  1. Запусти три экземпляра redis-server на портах 7000, 7001, 7002 в фоне с включённым режимом кластера. У каждого узла — свой рабочий каталог /root/cluster/<порт> (там будут его nodes.conf и данные).
  2. Объедини их в кластер из 3 мастеров без реплик — все 16384 слота должны быть распределены.
  3. Через кластер запиши ключ user:42 со значением alice — он должен оказаться на узле, которому принадлежит его слот, и читаться через любой узел.

Основной Redis на 6379 для задания не нужен.

Что потренируешь:
  • redis
  • Redis Cluster
  • шардирование
  • hash slots
  • redis-cli --cluster
  • MOVED

Разбор темы

Redis Cluster шардирует данные: пространство ключей разбито на 16384 hash-слота (CRC16(ключ) mod 16384), и каждый слот принадлежит одному мастеру. Узлы общаются по отдельной шине (порт +10000) и хранят свою картину кластера в nodes.conf — у каждого узла должен быть свой файл. Клиент, пришедший не на тот узел, получает редирект MOVED слот хост:порт; «умные» клиенты (и redis-cli -c) следуют ему и кешируют карту слотов. Кластер в состоянии ok, только когда покрыты все слоты. Без реплик падение любого мастера делает недоступной его треть данных — в проде к каждому мастеру добавляют реплику (--cluster-replicas 1).

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

  1. на 7000–7002 работают узлы в режиме кластера
  2. у каждого узла свой каталог /root/cluster/<порт> с конфигом кластера
  3. кластер ok: 3 мастера, все 16384 слота
  4. user:42 лежит на узле-владельце слота
  5. чужой узел отвечает MOVED, а с -c отдаёт user:42

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