Как настроить репликацию Redis (с отключенным режимом кластера) в CentOS 8 – Часть 1

Redis (Удаленный Сервер Словаря) – очень популярная и широко используемая открытая, быстрая, распределенная и эффективная серверная база данных/структура данных в памяти.

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

Он поддерживает гибкие структуры данных, асинхронную репликацию мастер-слейв для масштабирования производительности чтения и защиты от потери данных, шардирование на стороне клиента для масштабирования производительности записи, две формы сохранения для записи данных в памяти на диск в компактном формате, кластеризацию и разделение. Он также имеет автоматическое восстановление после сбоев для развертывания с высокой доступностью через Redis Sentinel, Сценарии Lua, транзакции и многое другое.

Будучи НЕ SQL или нереляционной базой данных, Redis предлагает некоторые преимущества производительности перед традиционными системами управления базами данных (такими как MySQL/MariaDB, PostgreSQL и т. д.), потому что все его данные находятся или хранятся в памяти, что облегчает доступ к ним для приложения, в то время как традиционные базы данных должны записывать все данные на диск или читать их из него или из внешнего источника.

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

В этой серии учебных пособий по Redis мы рассмотрим, как настроить и использовать некоторые ключевые функции Redis, такие как репликация, обеспечение высокой доступности с помощью Redis Sentinel и Redis Cluster, статьи:

Part 1: How To Setup Redis Replication(with Cluster-Mode Disabled) in CentOS 8

Это руководство показывает, как настроить Репликацию RedisОтключенным режимом кластера) в Linux CentOS 8, включая установку Redis, настройку мастера и реплик, и тестирование репликации.

Важно: Кластер Redis (т.е. Кластер репликации) с отключенным режимом кластера имеет одну группу узлов (например, мастер и один или два репликанта), в то время как кластер Redis с включенным режимом кластера может состоять из двух или более групп узлов (например, три мастера, у каждого из которых есть репликанты или два).

Предварительные требования:

  1. Серверы с установленным CentOS 8

Настройка тестовой среды

Redis Master Server: 10.42.0.247
Redis Replica1/Slave1: 10.42.0.21
Redis Replica2/Slave2: 10.42.0.34
Logical Representation of Redis Replication Diagram

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

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

Шаг 1: Установка Redis на CentOS 8

1. В первую очередь войдите во все узлы CentOS 8 по SSH, затем установите пакет Redis на всех узлах (мастер и реплики) с использованием менеджера пакетов DNF, как показано ниже.

# dnf install @redis

2. По завершении установки пакета Redis запустите службу Redis, включите ее для автоматического запуска при каждой загрузке системы и проверьте, что она запущена, как показано ниже.

# systemctl start redis
# systemctl enable redis
# systemctl status redis

3. Вы также можете подтвердить, что сервер Redis запущен и работает, проверив слушающие порты с помощью команды ss, как показано ниже.

# ss -ltpn | grep redis-server
Confirm Redis Server Ports

Шаг 2: Настройка мастер-сервера Redis

4. Redis настраивается с использованием файла конфигурации /etc/redis.conf, являющегося самодокументированным примером файла конфигурации. Сначала создайте резервную копию оригинального файла, затем откройте его для редактирования с помощью выбранного вами редактора командной строки.

# cp /etc/redis.conf /etc/redis.conf.org
# vi /etc/redis.conf

5. По умолчанию экземпляр Redis настроен на прослушивание и принятие подключений на интерфейсе петли обратной связи, используя директиву bind. Для связи с репликами мастер должен быть настроен на прослушивание на IPv4 адресе петли обратной связи и его LAN IP-адресе, т. е. 10.42.0.247.

bind 127.0.0.1 10.42.0.247

6. Затем установите параметр protected-mode в no, чтобы разрешить связь с репликами, как показано ниже.

protected-mode no

Также Redis прослушивает порт 6379, который устанавливается с помощью директивы port. Это порт данных для связи с API приложений или клиентами CLI.

port 6379
Configuring Redis Master Server

7. Для необязательного обеспечения безопасности связи мастер-реплика мы можем защитить мастер, используя директиву requirepass, чтобы клиенты/реплики должны были отправить пароль аутентификации перед выполнением любых команд или запуском процесса синхронизации репликации, в противном случае мастер откажет в запросе клиента/реплики (не забудьте установить безопасный пароль).

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

requirepass  Securep@55Here
Set Authentication Password

8. Логи Redis хранятся в файле /var/log/redis/redis.log, это устанавливается с помощью директивы logfile, а уровень краткости сервера по умолчанию – notice, определяется с помощью параметра loglevel.

loglevel  notice
logfile  /var/log/redis/redis.log
Set Redis Log File and Log Level

9. Поскольку systemd является системой и менеджером службы по умолчанию в CentOS 8, вы можете настроить Redis для взаимодействия с деревом наблюдения systemd, установив параметр supervised на systemd.

supervised systemd
Set Redis Supervisor to Systemd

10. После выполнения всех необходимых конфигураций сохраните файл и закройте его. Затем перезапустите службу Redis, чтобы применить новые изменения.

# systemctl daemon-reload
# systemctl restart redis

11. Для доступа к серверу Redis необходимо использовать redis-cli (интерфейс командной строки к redis-server). По умолчанию он подключается к серверу на localhost (на 127.0.0.1 порт 6379). Обратите внимание, что поскольку сервер защищен от клиентов с использованием пароля, выполнение команды до аутентификации должно завершиться неудачей.

Используйте команду auth для предоставления пароля аутентификации, как показано на следующем скриншоте.

# redis-cli
127.0.0.1:6379> client list
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379> client list
Access Redis Server via Redis CLI

12. Для подключения к реплике (после их настройки, как описано в следующем разделе), используйте параметры -h и -p, чтобы указать IP-адрес/имя хоста реплики и порт соответственно (обратите внимание, что порт 6379 должен быть открыт в брандмауэре реплики).

# redis-cli -h 10.42.0.21 -p 6379

13. Затем откройте порт данных сервера Redis в брандмауэре, чтобы разрешить входящие соединения к мастеру, а затем перезагрузите правила брандмауэра, используя команду firewall-cmd, как показано.

# firewall-cmd --zone=public --permanent --add-port=6379/tcp 
# firewall-cmd --reload

Шаг 3: Настройка реплики/вторичных серверов Redis

14. Чтобы быстро установить экземпляр Redis в качестве реплики “на лету”, используйте утилиту redis-cli и вызовите команду REPLICAOF, как показано.

# redis-cli replicaof 10.42.0.247 6379
OR
# redis-cli
127.0.0.1:6379> REPLICAOF 10.42.0.247 6379
Connect to a Master Redis Instance

15. Чтобы сделать соединение репликации постоянным, вам необходимо внести следующие изменения в файл конфигурации. Начните с резервного копирования оригинального файла, затем откройте его для редактирования.

# cp /etc/redis.conf /etc/redis.conf.org
# vi /etc/redis.conf

16. Чтобы разрешить клиентам подключаться к реплике для чтения данных, добавьте IP-адрес реплики в директиву bind.

# replica1
bind 127.0.0.1 10.42.0.21

# replica2
bind 127.0.0.1 10.42.0.34

Настройка экземпляра Redis в качестве реплики

17. Чтобы настроить экземпляр Redis в качестве реплики, используйте параметр replicaof и укажите IP-адрес (или имя хоста) и порт мастер-узла в качестве значений.

replicaof 10.42.0.247 6379

Настройка реплики для аутентификации на мастере

18. Затем, поскольку наш мастер-экземпляр защищен паролем, нам нужно установить пароль в конфигурации реплики, чтобы включить аутентификацию на мастере, используя параметр masterauth.

masterauth Securep@55Here

19. Кроме того, когда реплика теряет соединение с мастером или когда происходит репликация, реплика настроена на ответ на запросы клиентов, возможно, с данными “устаревшими“. Но если это первая синхронизация, то набор данных может быть просто пустым. Это поведение контролируется параметром replica-serve-stale-data.

И с Redis 2.6 по умолчанию реплики доступны только для чтения, это контролируется параметром replica-read-only. Вы можете вносить другие настройки реплики для соответствия потребностям вашего приложения.

20. После того, как вы внесли все необходимые изменения, перезапустите службу Redis на всех репликах.

# systemctl restart redis

21. Также откройте порт 6379 в брандмауэре, чтобы разрешить соединения от мастера и клиентов к репликам, и перезагрузите правила брандмауэра.

# firewall-cmd --zone=public --permanenent --add-port=6379/tcp
# firewall-cmd --reload

Шаг 4: Проверьте статус репликации мастер-реплика

22. После завершения конфигурации мастер-реплика мы можем проверить, работает ли настройка правильно, как показано ниже.

На мастере выполните следующие команды.

# redis-cli
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379> info replication
Check Redis Relocation Info on Master

23. Также проверьте статус репликации на репликах/слейвах, как показано ниже.

# redis-cli
127.0.0.1:6379> info replication
Check Redis Replication Info on Redis Replica 1
Check Redis Replication Info on Redis Replica 2

23. Теперь давайте проверим репликацию, установив ключ-значение в мастер-экземпляре и проверим, синхронизированы ли данные с репликами.

На мастере выполните следующее:

# redis-cli
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379> set domain 'www.tecmint.com'
Set Key Value in Master Instance

24. Затем проверьте, были ли данные синхронизированы с репликами, как показано.

# redis-cli
127.0.0.1:6379> get domain
Check Data Sync Status on Replicas

Защита мастер-экземпляра от риска потери некоторых записей

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

Это означает, что мастер может перестать принимать записи, если подключено менее N реплик, имеющих задержку менее или равную M секунд, управляемую опциями min-replicas-to-write и min-replicas-max-lag соответственно.

Чтобы установить их, раскомментируйте и установите значения в соответствии с требованиями вашей настройки в /etc/redis.conf, как показано на следующем скриншоте. Эта конфигурация означает, что после последнего пинга к репликам, через 10 секунд, если онлайн менее 2 реплик, мастер перестанет принимать записи.

min-replicas-to-write 2
min-replicas-max-lag 10
Protecting the Redis Master Against Loss of Write

Вы можете найти больше параметров в остальной части файла конфигурации /etc/redis.conf, а для более подробной информации о репликации ознакомьтесь с документацией Redis.

В следующей статье мы рассмотрим, как настроить Redis для обеспечения высокой доступности с помощью Sentinel в CentOS 8. До тех пор, оставайтесь на связи, и не забудьте поделиться своими мыслями и вопросами, используя нашу форму комментариев ниже, мы всегда готовы помочь.

Source:
https://www.tecmint.com/setup-redis-replication-in-centos-8/