Руководство по настройке репликации Redis «Основной-Реплика».

Это экспертное руководство предлагает подробное пошаговое руководство по настройке репликации Redis «Основной-Реплика» для обеспечения высокой доступности и масштабируемости чтения. Узнайте, как Redis управляет полной и частичной синхронизацией, реализуйте важнейшую директиву `replicaof` через файлы конфигурации или динамически, и эффективно отслеживайте состояние синхронизации с помощью команды `INFO replication`. Мы подробно описываем лучшие практики для производственных сред, включая настройки безопасности и советы по оптимизации для больших наборов данных.

34 просмотров

Руководство по настройке репликации Redis «основной-реплика»

Репликация Redis — это фундаментальный паттерн для достижения высокой доступности, избыточности данных и масштабируемости операций чтения. Настраивая основной (ранее называемый мастер) и одну или несколько реплик (ранее называемых слейвами), вы гарантируете, что данные, записанные в основной экземпляр, автоматически копируются на все подключенные реплики.

Это руководство предоставляет подробное пошаговое описание настройки репликации Redis «основной-реплика». Мы рассмотрим основные директивы конфигурации, методы динамической настройки и критически важные шаги мониторинга, необходимые для создания надежного и отказоустойчивого развертывания Redis.


1. Понимание основ репликации Redis

Репликация Redis является асинхронной (что означает, что основной экземпляр не ожидает подтверждения записи от реплики), что позволяет достичь высокой производительности. Она работает в основном в двух фазах: начальная синхронизация и непрерывная синхронизация.

Полная синхронизация (SYNC)

Когда реплика впервые подключается к основному экземпляру или после сбоя сети, который препятствует частичной ресинхронизации, происходит полная синхронизация:

  1. Реплика отправляет команду PSYNC основному экземпляру.
  2. Основной экземпляр запускает фоновый процесс сохранения для генерации файла моментального снимка RDB (.rdb).
  3. Основной экземпляр буферизует все новые команды записи, полученные во время создания RDB.
  4. После завершения файла RDB основной экземпляр отправляет его реплике.
  5. Реплика загружает файл RDB в память.
  6. Наконец, основной экземпляр отправляет все буферизованные команды записи реплике, чтобы наверстать упущенное.

Частичная ресинхронизация (PSYNC)

Redis 2.8+ поддерживает частичную ресинхронизацию. Если связь между основным экземпляром и репликой кратковременно прерывается, реплика может запросить только пропущенные команды с момента разрыва связи, используя буфер отставания репликации (настраиваемый циклический буфер на основном экземпляре).

2. Предварительные условия и настройка

Перед настройкой репликации убедитесь, что у вас запущены как минимум два отдельных экземпляра Redis (или отдельные конфигурации, работающие на разных портах на одном сервере для тестирования).

Для этого руководства мы предполагаем следующую настройку:

Экземпляр Роль IP-адрес Порт Файл конфигурации
Primary Основной 192.168.1.100 6379 redis-primary.conf
Replica 1 Реплика 192.168.1.101 6380 redis-replica-1.conf

Шаг 2.1: Настройка основного экземпляра

Убедитесь, что ваш основной экземпляр готов принимать соединения от реплик и настроен на управление персистентностью (RDB или AOF), если это требуется для стабильности основного экземпляра.

Важные настройки основного экземпляра:

  1. Привязка (Binding): Убедитесь, что основной экземпляр привязан к общедоступному IP-адресу или 0.0.0.0, если работает на нескольких машинах. Если используются межсетевые экраны, убедитесь, что порт 6379 открыт для IP-адресов реплик.
  2. Персистентность: Хотя это не строго обязательно для самой репликации, включение RDB/AOF настоятельно рекомендуется для обеспечения персистентности данных основного экземпляра.
# redis-primary.conf
port 6379
bind 0.0.0.0 # Привязка ко всем интерфейсам (необходимо для внешних реплик)
# Включение персистентности RDB
save 900 1
save 300 10
save 60 10000

Шаг 2.2: Настройка экземпляра реплики

Основа настройки реплики заключается в директиве replicaof. Она указывает экземпляру, с каким основным экземпляром он должен синхронизировать свои данные.

Важные настройки экземпляра реплики:

  1. Порт: Используйте другой порт, если запускаете на той же машине.
  2. Директива репликации: Используйте replicaof или slaveof (устаревшее название).
# redis-replica-1.conf
port 6380

# *** Основная конфигурация репликации ***
replicaof 192.168.1.100 6379

# Убедитесь, что реплики доступны только для чтения (по умолчанию с Redis 5)
replica-read-only yes

# Рекомендуется отключать персистентность на репликах, если HA обрабатывается Sentinel/Cluster
# Если персистентность необходима для быстрого перезапуска, оставьте ее включенной.
save ""

Примечание: Если основной экземпляр защищен паролем (с помощью requirepass), реплика должна быть настроена с masterauth <password> для успешной аутентификации.

3. Методы реализации

Вы можете реализовать конфигурацию репликации либо путем редактирования файла конфигурации (redis.conf) и перезапуска сервера, либо динамически с помощью команды CONFIG SET.

Метод 3.1: Файл конфигурации (рекомендуется для продакшена)

После обновления redis-replica-1.conf, как показано выше, запустите оба экземпляра:

# Запуск основного экземпляра
redis-server redis-primary.conf

# Запуск реплики 1
redis-server redis-replica-1.conf

При запуске Реплика 1 немедленно попытается подключиться к основному экземпляру по адресу 192.168.1.100:6379 и начнет процесс синхронизации.

Метод 3.2: Динамическая конфигурация

Если экземпляр Redis уже запущен, и вы хотите настроить его как реплику без перезапуска, используйте CONFIG SET через redis-cli.

  1. Подключитесь к экземпляру, который вы хотите преобразовать в реплику (работающему на порту 6380 в нашем примере):

    bash redis-cli -p 6380

  2. Выполните команду репликации:

    bash 127.0.0.1:6380> replicaof 192.168.1.100 6379 OK

Экземпляр на порту 6380 отбросит все предыдущие данные и инициирует полную синхронизацию (SYNC) с новым основным экземпляром.

⚠️ Предупреждение: Отключение репликации

Чтобы превратить реплику обратно в автономный основной экземпляр, выполните replicaof no one на этом экземпляре.

4. Мониторинг состояния репликации

Мониторинг состояния соединения жизненно важен для обеспечения согласованности данных. Используйте команду INFO replication через redis-cli как на основном экземпляре, так и на реплике.

4.1 Проверка состояния основного экземпляра

Подключитесь к основному экземпляру (6379) и проверьте, сколько реплик подключено и их статус:

redis-cli -p 6379 INFO replication

Ожидаемый фрагмент вывода (основной экземпляр):

# Replication
role:master
connected_slaves:1
slave0:ip=192.168.1.101,port=6380,state=online,offset=2048,lag=0
master_replid:a9b1c2...
master_replid2:000000...
master_repl_offset:2048
  • role:master подтверждает его роль.
  • connected_slaves:1 подтверждает, что реплика видна.
  • state=online — это желаемое стабильное состояние.
  • lag=0 (или очень низкое число) указывает на успешную производительность синхронной передачи данных.

4.2 Проверка состояния реплики

Подключитесь к реплике (6380) и проверьте состояние связи с основным экземпляром:

redis-cli -p 6380 INFO replication

Ожидаемый фрагмент вывода (реплика):

# Replication
role:slave
master_host:192.168.1.100
master_port:6379
master_link_status:up
master_sync_in_progress:0
slave_priority:100
slave_read_only:1
  • role:slave подтверждает ее роль.
  • master_link_status:up подтверждает, что соединение активно и работоспособно.
  • master_sync_in_progress:0 означает, что начальная синхронизация завершена.

5. Рекомендации и оптимизация репликации

5.1 Режим «только для чтения» для реплики

По умолчанию реплики доступны только для чтения (replica-read-only yes). Это критически важный механизм безопасности. Попытка записи в реплику приведет к ошибке, обеспечивая согласованность данных во всем кластере.

Если вы отключите режим только для чтения, любые записи в реплику будут локальными и будут перезаписаны, если связь репликации прервется и произойдет полная синхронизация.

5.2 Оптимизация времени синхронизации

Если ваш набор данных очень велик, начальный процесс SYNC может быть медленным. Учитывайте следующие факторы:

  1. Пропускная способность сети: Убедитесь в наличии достаточной пропускной способности между основным экземпляром и репликами для передачи RDB.
  2. Генерация RDB: Основному экземпляру требуются ресурсы ЦП и дискового ввода-вывода для генерации файла RDB. Убедитесь, что сервер имеет доступные ресурсы во время синхронизации.
  3. Отключение дисковой персистентности на репликах (опционально): Если основной экземпляр обрабатывает всю персистентность, а реплика предназначена только для масштабирования чтения, установка save "" на реплике позволяет избежать накладных расходов на дисковый ввод-вывод при записи RDB-файлов, ускоряя перезапуски.

5.3 Безопасность и сетевая конфигурация

Крайне важно, чтобы основной экземпляр не раскрывал публично свой порт репликации (6379 или другой) в Интернет. Настройте правила межсетевого экрана, чтобы разрешать трафик репликации только с указанных IP-адресов серверов реплик.

5.4 Использование реплик для масштабирования чтения

Основное преимущество репликации — распределение нагрузки чтения. Направляйте приложения, которые преимущественно выполняют операции чтения, на экземпляры реплик, оставляя основной экземпляр для операций записи, повышая общую пропускную способность системы.

Заключение

Настройка репликации Redis «основной-реплика» необходима для создания отказоустойчивых, высокопроизводительных приложений. Правильно настроив директиву replicaof и регулярно отслеживая состояние связи с помощью INFO replication, вы создадите основу для высокой доступности и эффективного масштабирования чтения.

Хотя это руководство сосредоточено на базовой настройке, производственные среды часто интегрируют дополнительные уровни автоматизации, такие как Redis Sentinel для автоматического повышения основного экземпляра и обнаружения сбоев, или Redis Cluster для автоматического секционирования и распределения данных между несколькими узлами.