Поиск по сайту:

Как настроить кластер Redis в CentOS 8 — часть 3


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

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

Согласно документации кластера Redis, «минимальный кластер», который работает должным образом, должен содержать как минимум 3 главных узла. Но наиболее подходящая конфигурация для обеспечения высокой доступности должна иметь как минимум 6 узлов с тремя ведущими и тремя подчиненными узлами, причем у каждого ведущего есть подчиненное устройство.

Важно: Redis Cluster также имеет некоторые ограничения, а именно отсутствие поддержки сред с NAT, а также тех, для которых переназначаются IP-адреса или TCP-порты. экземпляр в разделе Docker. Кроме того, не каждая клиентская библиотека поддерживает его.

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

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

Предпосылки:

  1. Серверы с установкой CentOS 8

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

Redis Master1: 10.42.0.247
Redis Master2: 10.42.0.197
Redis Master3: 10.42.0.132

Redis Slave1: 10.42.0.200
Redis Slave2: 10.42.0.21
Redis Slave3: 10.42.0.34

Наша установка имеет 3 главных узла чтения/записи и 3 узла реплик только для чтения, каждый из которых имеет одну реплику, поэтому три сегмента содержат все данные кластера в каждом узле. Клиент приложения API или CLI может писать только на главные узлы, но читать с любого узла в кластере.

Шаг 1. Установка Redis на всех узлах

1. Войдите во все экземпляры через SSH, затем выполните следующую команду, чтобы установить модуль Redis с помощью диспетчера пакетов DNF, как показано.

dnf module install redis

2. Затем запустите службу Redis, включите ее автоматический запуск при загрузке системы и проверьте ее статус, чтобы убедиться, что она работает (проверьте службу на всех 6 экземплярах). ):

systemctl start redis
systemctl enable redis
systemctl status redis

Шаг 2. Настройка экземпляров Redis на всех узлах

3. В этом разделе описывается настройка узлов кластера Redis. Не забудьте выполнить настройки здесь на всех узлах.

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

cp /etc/redis.conf /etc/redis.conf.orig
vi /etc/redis.conf

4. Затем найдите следующие параметры конфигурации и измените их значения, как показано. Параметр bind задает интерфейс прослушиваемого сервера Redis, установите его значение на IP-адрес локальной сети экземпляра. Удалите 127.0.0.1, поскольку мы поняли, что оставление его там замедляет процесс создания кластера, особенно этап присоединения к кластеру.

bind  10.42.0.247

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

protected-mode no

Параметр порта определяет порт, который сервер Redis будет прослушивать для соединений. Значение по умолчанию — 6379. Это порт данных для связи с клиентами.

port 6379

5. Следующий набор параметров включит режим кластера и установит некоторые его полезные функции. Параметр cluster-enabled, если для него установлено значение yes, активирует режим кластера.

cluster-enabled yes

Затем параметр cluster-config-file задает имя файла конфигурации кластера узла кластера (например, nodes-6379.conf). Файл создается в рабочем каталоге (по умолчанию — /var/lib/redis, определяемом с помощью параметра dir) и недоступен для редактирования пользователем.

cluster-config-file nodes-6379.conf

Следующий полезный параметр кластера — cluster-node-timeout. Он используется для установки максимального времени в миллисекундах, в течение которого экземпляр может быть недоступен, чтобы его можно было считать в состоянии сбоя. Значение 15000 эквивалентно 15 секундам.

cluster-node-timeout 15000

6. Нам также необходимо включить сохранение Redis на диске. Мы можем использовать один из режимов сохранения, а именно Добавить только файл (AOF): он регистрируется (в созданном файле appendonly.aof). в рабочем каталоге) каждая операция записи, успешно полученная сервером. Данные будут воспроизводиться во время запуска сервера для восстановления исходного набора данных.

Чтобы включить его, установите для параметра appendonly значение yes.

appendonly yes

7. После внесения всех изменений перезапустите службу Redis на всех узлах, чтобы применить последние изменения.

systemctl restart redis

8. На этом этапе каждый узел кластера теперь должен иметь ID. Вы можете проверить это в файле журнала, расположенном по адресу /var/log/redis/redis.log.

cat /var/log/redis/redis.log

9. Затем откройте порты 6397 и 16379 на всех экземплярах. Последний порт используется для шины кластера (канал связи межузел с использованием двоичного протокола). Это основное требование для TCP-соединений кластера Redis.

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

Шаг 3. Создание кластера Redis

10. Чтобы создать кластер, используйте клиент redis-cli командной строки следующим образом. --cluster create включает создание кластера, а --cluster-replicas 1 означает создание одной реплики для каждого мастера.

Для нашей установки с 6 узлами у нас будет 3 главных и 3 ведомых.

Обратите внимание, что первые 6 узлов будут считаться главными (M), а следующие три будут считаться подчиненными (S). Первое ведомое устройство, т. е. 10.42.0.200:6379, копирует первое ведущее устройство, т. е. 10.42.0.247:6379, второе ведомое устройство реплицирует второго ведущего устройства в указанном порядке.

Следующая команда отформатирована таким образом, что результат будет представлять нашу логическую установку, описанную выше.

redis-cli --cluster create 10.42.0.247:6379 10.42.0.197:6379 10.42.0.132:6379 10.42.0.200:6379 10.42.0.21:6379 10.42.0.34:6379 --cluster-replicas 1

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

redis-cli -h 10.42.0.247 -p 6379 cluster nodes

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

Различные поля расположены в следующем порядке: идентификатор узла, IP-адрес:порт, флаги, последний отправленный пинг, последний полученный пинг, эпоха конфигурации, состояние канала, слоты (для мастеров).

Шаг 4. Тестирование аварийного переключения кластера Redis

12. В этом разделе мы покажем, как протестировать отработку отказа кластера. Для начала отметим мастеров.

redis-cli -h 10.42.0.247 -p 6379 cluster nodes  | grep master

Также обратите внимание на подчиненные устройства Redis.

redis-cli -h 10.42.0.247 -p 6379 cluster nodes  | grep slave

13. Далее давайте остановим службу Redis на одном из главных узлов, например 10.42.0.197, и проверим все главные узлы в кластере.

systemctl stop redis
redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep master

На следующем снимке экрана видно, что узел 10.42.0.197:6367 находится в состоянии сбоя, а его подчиненный узел 10.42.0.21:6379 переведен в статус ведущего.

14. Теперь еще раз запустим службу Redis на вышедшем из строя узле и проверим все мастера в кластере.

systemctl start redis
redis-cli -h 10.42.0.247 -p 6379 cluster nodes  | grep master

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

redis-cli -h 10.42.0.247 -p 6379 cluster nodes  | grep slave

Шаг 5. Тестирование репликации данных в кластере Redis

15. В последнем разделе объясняется, как проверить репликацию данных кластера. Мы создадим ключ и значение на одном из мастеров, а затем попытаемся прочитать его со всех узлов кластера следующим образом. Используйте переключатель -c, чтобы включить поддержку кластера с помощью утилиты redis-cli и получить доступ к данным в режиме кластера.

redis-cli -c -h 10.42.0.247 -p 6379 set name 'TecMint.com'
redis-cli -c -h 10.42.0.247 -p 6379 get name
redis-cli -c -h 10.42.0.21 -p 6379 get name
redis-cli -c -h 10.42.0.132 -p 6379 get name
redis-cli -c -h 10.42.0.200 -p 6379 get name
redis-cli -c -h 10.42.0.197 -p 6379 get name
redis-cli -c -h 10.42.0.34 -p 6379 get name

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

Это подводит нас к концу серии руководств по Redis, состоящей из трех частей. Форму обратной связи ниже можно использовать для отправки вопросов или комментариев.