Redis (Удаленный Сервер Словаря) – очень популярная и широко используемая открытая, быстрая, распределенная и эффективная серверная база данных/структура данных в памяти.
Он предлагает богатый набор функций, которые делают его эффективным для широкого спектра применений: как база данных, слой кэширования, брокер сообщений или очередь; применяется в веб-приложениях, чате и приложениях обмена сообщениями, играх, аналитике данных в реальном времени и многом другом.
Он поддерживает гибкие структуры данных, асинхронную репликацию мастер-слейв для масштабирования производительности чтения и защиты от потери данных, шардирование на стороне клиента для масштабирования производительности записи, две формы сохранения для записи данных в памяти на диск в компактном формате, кластеризацию и разделение. Он также имеет автоматическое восстановление после сбоев для развертывания с высокой доступностью через Redis Sentinel, Сценарии Lua, транзакции и многое другое.
Будучи НЕ SQL или нереляционной базой данных, Redis предлагает некоторые преимущества производительности перед традиционными системами управления базами данных (такими как MySQL/MariaDB, PostgreSQL и т. д.), потому что все его данные находятся или хранятся в памяти, что облегчает доступ к ним для приложения, в то время как традиционные базы данных должны записывать все данные на диск или читать их из него или из внешнего источника.
Redis стал все более распространенным выбором для кэширования, что позволяет повторно использовать кэшированные данные (хранящиеся в основной памяти приложения), а не всегда запрашивать базу данных для часто используемых данных. Таким образом, это отличный компаньон для RDMS (Систем управления реляционными базами данных), чтобы в конечном итоге улучшить производительность приложения.
В этой серии учебных пособий по Redis мы рассмотрим, как настроить и использовать некоторые ключевые функции Redis, такие как репликация, обеспечение высокой доступности с помощью Redis Sentinel и Redis Cluster, статьи:
Это руководство показывает, как настроить Репликацию Redis (с Отключенным режимом кластера) в Linux CentOS 8, включая установку Redis, настройку мастера и реплик, и тестирование репликации.
Важно: Кластер Redis (т.е. Кластер репликации) с отключенным режимом кластера имеет одну группу узлов (например, мастер и один или два репликанта), в то время как кластер Redis с включенным режимом кластера может состоять из двух или более групп узлов (например, три мастера, у каждого из которых есть репликанты или два).
Предварительные требования:
Настройка тестовой среды
Redis Master Server: 10.42.0.247 Redis Replica1/Slave1: 10.42.0.21 Redis Replica2/Slave2: 10.42.0.34

С установленной выше конфигурацией (которая имеет один основной узел для чтения/записи и 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

Шаг 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

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

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

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

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

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

23. Также проверьте статус репликации на репликах/слейвах, как показано ниже.
# redis-cli 127.0.0.1:6379> info replication


23. Теперь давайте проверим репликацию, установив ключ-значение в мастер-экземпляре и проверим, синхронизированы ли данные с репликами.
На мастере выполните следующее:
# redis-cli 127.0.0.1:6379> AUTH Securep@55Here 127.0.0.1:6379> set domain 'www.tecmint.com'

24. Затем проверьте, были ли данные синхронизированы с репликами, как показано.
# redis-cli 127.0.0.1:6379> get domain

Защита мастер-экземпляра от риска потери некоторых записей
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

Вы можете найти больше параметров в остальной части файла конфигурации /etc/redis.conf, а для более подробной информации о репликации ознакомьтесь с документацией Redis.
В следующей статье мы рассмотрим, как настроить Redis для обеспечения высокой доступности с помощью Sentinel в CentOS 8. До тех пор, оставайтесь на связи, и не забудьте поделиться своими мыслями и вопросами, используя нашу форму комментариев ниже, мы всегда готовы помочь.
Source:
https://www.tecmint.com/setup-redis-replication-in-centos-8/