Руководство по настройке репликации Redis «основной-реплика»
Репликация Redis — это фундаментальный паттерн для достижения высокой доступности, избыточности данных и масштабируемости операций чтения. Настраивая основной (ранее называемый мастер) и одну или несколько реплик (ранее называемых слейвами), вы гарантируете, что данные, записанные в основной экземпляр, автоматически копируются на все подключенные реплики.
Это руководство предоставляет подробное пошаговое описание настройки репликации Redis «основной-реплика». Мы рассмотрим основные директивы конфигурации, методы динамической настройки и критически важные шаги мониторинга, необходимые для создания надежного и отказоустойчивого развертывания Redis.
1. Понимание основ репликации Redis
Репликация Redis является асинхронной (что означает, что основной экземпляр не ожидает подтверждения записи от реплики), что позволяет достичь высокой производительности. Она работает в основном в двух фазах: начальная синхронизация и непрерывная синхронизация.
Полная синхронизация (SYNC)
Когда реплика впервые подключается к основному экземпляру или после сбоя сети, который препятствует частичной ресинхронизации, происходит полная синхронизация:
- Реплика отправляет команду
PSYNCосновному экземпляру. - Основной экземпляр запускает фоновый процесс сохранения для генерации файла моментального снимка RDB (
.rdb). - Основной экземпляр буферизует все новые команды записи, полученные во время создания RDB.
- После завершения файла RDB основной экземпляр отправляет его реплике.
- Реплика загружает файл RDB в память.
- Наконец, основной экземпляр отправляет все буферизованные команды записи реплике, чтобы наверстать упущенное.
Частичная ресинхронизация (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), если это требуется для стабильности основного экземпляра.
Важные настройки основного экземпляра:
- Привязка (Binding): Убедитесь, что основной экземпляр привязан к общедоступному IP-адресу или
0.0.0.0, если работает на нескольких машинах. Если используются межсетевые экраны, убедитесь, что порт 6379 открыт для IP-адресов реплик. - Персистентность: Хотя это не строго обязательно для самой репликации, включение 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. Она указывает экземпляру, с каким основным экземпляром он должен синхронизировать свои данные.
Важные настройки экземпляра реплики:
- Порт: Используйте другой порт, если запускаете на той же машине.
- Директива репликации: Используйте
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.
-
Подключитесь к экземпляру, который вы хотите преобразовать в реплику (работающему на порту 6380 в нашем примере):
bash redis-cli -p 6380 -
Выполните команду репликации:
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 может быть медленным. Учитывайте следующие факторы:
- Пропускная способность сети: Убедитесь в наличии достаточной пропускной способности между основным экземпляром и репликами для передачи RDB.
- Генерация RDB: Основному экземпляру требуются ресурсы ЦП и дискового ввода-вывода для генерации файла RDB. Убедитесь, что сервер имеет доступные ресурсы во время синхронизации.
- Отключение дисковой персистентности на репликах (опционально): Если основной экземпляр обрабатывает всю персистентность, а реплика предназначена только для масштабирования чтения, установка
save ""на реплике позволяет избежать накладных расходов на дисковый ввод-вывод при записи RDB-файлов, ускоряя перезапуски.
5.3 Безопасность и сетевая конфигурация
Крайне важно, чтобы основной экземпляр не раскрывал публично свой порт репликации (6379 или другой) в Интернет. Настройте правила межсетевого экрана, чтобы разрешать трафик репликации только с указанных IP-адресов серверов реплик.
5.4 Использование реплик для масштабирования чтения
Основное преимущество репликации — распределение нагрузки чтения. Направляйте приложения, которые преимущественно выполняют операции чтения, на экземпляры реплик, оставляя основной экземпляр для операций записи, повышая общую пропускную способность системы.
Заключение
Настройка репликации Redis «основной-реплика» необходима для создания отказоустойчивых, высокопроизводительных приложений. Правильно настроив директиву replicaof и регулярно отслеживая состояние связи с помощью INFO replication, вы создадите основу для высокой доступности и эффективного масштабирования чтения.
Хотя это руководство сосредоточено на базовой настройке, производственные среды часто интегрируют дополнительные уровни автоматизации, такие как Redis Sentinel для автоматического повышения основного экземпляра и обнаружения сбоев, или Redis Cluster для автоматического секционирования и распределения данных между несколькими узлами.