ELMA365 On-Premises > Подготовка инфраструктуры > Базы данных > Отказоустойчивая инфраструктура / Кластер Redis

Кластер Redis

Для корректной работы системы требуется Redis версии 5 или 6.2. В статье описана установка Redis 6.2.12 для ОС Ubuntu Linux 20.04 и 22.04. Вы также можете ознакомиться с руководством в официальной документации Redis.

Установка состоит из пяти этапов:

  1. Подготовка нод (серверов).
  2. Установка Redis и Sentinel.
  3. Настройка Redis.
  4. Настройка Sentinel.
  5. Подключение к Redis.

Шаг 1: Подготовка нод (серверов)

начало внимание

Минимальное количество серверов для организации кластера — три.

конец внимание

  1. Создайте три ноды (сервера) с последовательно пронумерованными именами хостов:
  • redis-server1.your_domain;
  • redis-server2.your_domain;
  • redis-server3.your_domain.
  1. Создайте необходимые сопоставления имён хостов в DNS. Если такой возможности нет, внесите нужные записи в /etc/hosts.

Шаг 2: Установка Redis и Sentinel

  1. Установите необходимые пакеты:

sudo apt install lsb-release curl gpg

  1. Импортируйте необходимые ключи и добавьте репозиторий Redis:

curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list

  1. Обновите кэш пакетов:

sudo apt-get update

  1. Установите Redis:

sudo apt-get -y install redis=6:6.2.12-1rl1~$(lsb_release -cs)1 redis-server=6:6.2.12-1rl1~$(lsb_release -cs)1 redis-tools=6:6.2.12-1rl1~$(lsb_release -cs)1 redis-sentinel=6:6.2.12-1rl1~$(lsb_release -cs)1

Шаг 3: Настройка Redis

Начало внимание

Для пароля разрешается применять следующие символы:

  • Заглавные латинские буквы: от A до Z;
  • Строчные латинские буквы: от a до z;
  • Цифры от 0 до 9;
  • Символы:  -_.

Зарезервированные (недопустимые) символы:

! * ' ( ) ; : @ & = + $ , / ? % # [ ]

конец внимание

Для настройки необходимо отредактировать файл /etc/redis/redis.conf на каждом из серверов:

sudo nano /etc/redis/redis.conf

  1. Сделайте сервера доступными для всех ip-адресов данного сервера. Это делает доступным сервис Redis со всех внешних адресов:

bind 0.0.0.0 

  1. Увеличьте максимальное количество клиентов, изменив значение параметра maxclients на 20000. Раскомментируйте строку, убрав знак решетки #:

maxclients 20000

  1. Задайте политику вытеснения ключей, изменив значение параметра maxmemory-policy на allkeys-lfu. Раскомментируйте строку, убрав знак решетки #:

maxmemory-policy allkeys-lfu

  1. Отключите создание snapshots, изменив значение параметра save на "". Раскомментируйте строку, убрав знак решетки #:

save ""

  1. Отключите AOF (сохранение базы данных Redis в файл). Для этого замените значение параметра appendonly на no. Раскомментируйте строку, убрав знак решетки #:

appendonly no

  1. Укажите пароль к Мастеру:

masterauth SecretPassword

  1. Укажите домен (FQDN) для представления ноды в кластере:
  • на ноде redis-server1.your_domain:

replica-announce-ip redis-server1.your_domain

  • на ноде redis-server2.your_domain:

replica-announce-ip redis-server2.your_domain

  • на ноде redis-server3.your_domain:

replica-announce-ip redis-server3.your_domain

  1. Укажите пароль для доступа:

requirepass SecretPassword

  1. На нодах redis-server2.your_domain и redis-server3.your_domain укажите домен (FQDN) и порт для подключения к ноде Мастера (redis-server1.your_domain):

replicaof redis-server1.your_domain 6379

  1. Перезапустите все сервера (сначала Мастер, затем Слэйвы):

sudo systemctl restart redis-server
sudo systemctl enable redis-server

  1. Проверьте статус репликации на ноде redis-server1.your_domain:

sudo redis-cli -a SecretPassword info replication

Настройка включения TLS/SSL в Redis

Шаг 4: Настройка Sentinel

Чтобы настроить Sentinel, необходимо отредактировать файл /etc/redis/sentinel.conf на каждом из серверов.

Начало внимание 

Для корректной работы соблюдайте указанный порядок записей в файле /etc/redis/sentinel.conf.

Конец внимание

  1. Сделайте сервера доступные для всех ip-адресов данного сервера:

bind 0.0.0.0 

В данном случае это делает доступным сервис Sentinel со всех внешних адресов.

  1. Укажите домен (FQDN) для представления нод Sentinel:
  • на ноде redis-server1.your_domain:

sentinel announce-ip redis-server1.your_domain

  • на ноде redis-server2.your_domain:

sentinel announce-ip redis-server2.your_domain

  • на ноде redis-server3.your_domain:

sentinel announce-ip redis-server3.your_domain

  1. Укажите домен (FQDN) и порт Мастера, а также значение для достижения кворума:

sentinel monitor mymaster redis-server1.your_domain 6379 2

  1. Укажите пароль для доступа к Мастеру:

sentinel auth-pass mymaster SecretPassword

  1. Укажите время, после которого мастер будет считаться упавшим:

sentinel down-after-milliseconds mymaster 3000

  1. Укажите время ожидания после смены ролей слейва на мастер в случае, если мастер вышел из строя:

sentinel failover-timeout mymaster 6000

  1. Включите поддержку разрешения-имён хостов:

sentinel resolve-hostnames yes
sentinel announce-hostnames yes

  1. После этого перезапустите все сервера:

sudo systemctl restart redis-sentinel
sudo systemctl enable redis-sentinel

  1. Проверьте статус Sentinel и состояние кворума на ноде redis-server1.your_domain:

sudo redis-cli -p 26379 info sentinel
sudo redis-cli -p 26379 sentinel ckquorum mymaster

Настройка включения TLS/SSL вSentinel

Шаг 5: Подключение к Redis

Строка для подключения к Redis:

redis://:SecretPassword@redis-server1.your_domain:26379,redis-server2.your_domain:26379,redis-server3.your_domain:26379/0?masterName=mymaster

Строка для подключения к Redis c TLS/SSL:

rediss://:SecretPassword@redis-server1.your_domain:26379,redis-server2.your_domain:26379,redis-server3.your_domain:26379/0?masterName=mymaster