Кластер Redis
Для корректной работы системы требуется Redis версии 6.2.12. В статье описана установка Redis 6.2.12 для ОС Ubuntu Linux 20.04 и 22.04. Вы также можете ознакомиться с руководством в официальной документации Redis.
Установка состоит из пяти этапов:
- Подготовка нод (серверов)
- Установка Redis и Sentinel
- Настройка Redis
- Настройка Sentinel
- Подключение к Redis
Шаг 1. Подготовка нод (серверов)
Минимальное количество серверов для организации кластера — три.
-
Создайте три ноды (сервера) с последовательно пронумерованными именами хостов:
- redis-server1.your_domain
- redis-server2.your_domain
- redis-server3.your_domain
-
Создайте необходимые сопоставления имён хостов в DNS. Если такой возможности нет, внесите нужные записи в
/etc/hosts.
Шаг 2. Установка Redis и Sentinel
-
Установите необходимые пакеты:
-
Импортируйте необходимые ключи и добавьте репозиторий Redis:
-
Обновите кеш пакетов:
-
Установите Redis:
Шаг 3. Настройка Redis
Для пароля разрешается применять следующие символы:
- заглавные латинские буквы: от A до Z
- строчные латинские буквы: от a до z
- цифры от 0 до 9
- символы: -_.
Зарезервированные (недопустимые) символы: ! * ' ( ) ; : @ & = + $ , / ? % # [ ]
Для настройки необходимо отредактировать файл /etc/redis/redis.conf на каждом из серверов:
-
Сделайте сервера доступными для всех IP-адресов данного сервера. Это делает сервис Redis доступным со всех внешних адресов:
-
Увеличьте максимальное количество клиентов, изменив значение параметра maxclients на 20000. Раскомментируйте строку, убрав знак решетки #:
-
Задайте политику вытеснения ключей, изменив значение параметра maxmemory-policy на allkeys-lfu. Раскомментируйте строку, убрав знак решетки #:
-
Отключите создание snapshots, изменив значение параметра save на "". Раскомментируйте строку, убрав знак решетки #:
-
Отключите AOF (сохранение базы данных Redis в файл). Для этого замените значение параметра appendonly на no. Раскомментируйте строку, убрав знак решетки #:
-
Укажите пароль к Мастеру:
-
Укажите домен (FQDN) для представления ноды в кластере:
- на ноде
redis-server1.your_domain:
- на ноде
redis-server2.your_domain:
- на ноде
redis-server3.your_domain:
- на ноде
-
Укажите пароль для доступа:
-
На нодах
redis-server2.your_domainиredis-server3.your_domainукажите домен (FQDN) и порт для подключения к ноде Мастера (redis-server1.your_domain): -
Перезапустите все сервера (сначала Мастер, затем Слэйвы):
-
Проверьте статус репликации на ноде
redis-server1.your_domain:
Шаг 4. Настройка Sentinel
Чтобы настроить Sentinel, необходимо отредактировать файл /etc/redis/sentinel.conf на каждом из серверов.
Для корректной работы соблюдайте указанный порядок записей в файле /etc/redis/sentinel.conf.
-
Сделайте сервера доступные для всех IP-адресов данного сервера. Это делает сервис Sentinel доступным со всех внешних адресов:
-
Укажите домен (FQDN) для представления нод Sentinel:
- на ноде
redis-server1.your_domain:
- на ноде
redis-server2.your_domain:
- на ноде
redis-server3.your_domain:
- на ноде
-
Укажите домен (FQDN) и порт Мастера, а также значение для достижения кворума:
-
Укажите пароль для доступа к Мастеру:
-
Укажите время, после которого мастер будет считаться упавшим:
-
Укажите время ожидания после смены ролей слейва на мастер в случае, если мастер вышел из строя:
-
Включите поддержку разрешения имён хостов:
-
Для повышения безопасности настройте для пользователя
defaultдоступ к Sentinel только по паролю: -
После этого перезапустите все сервера:
-
Проверьте статус Sentinel и состояние кворума на ноде redis-server1.your_domain, используя разные команды в зависимости от использования TLS/SSL и настройки Sentinel:
- без TLS/SSL, если доступ к Sentinel по паролю не включён:
- без TLS/SSL, если настроен доступ к Sentinel только по паролю:
sudo redis-cli -p 26379 -a SecretPassword info sentinel sudo redis-cli -p 26379 -a SecretPassword sentinel ckquorum mymaster- с TLS/SSL, если доступ к Sentinel по паролю не включён:
sudo redis-cli -p 26379 -h redis-server1.your_domain --tls --cacert /path/to/ca.crt --cert /path/to/redis.crt --key /path/to/redis.key info sentinel sudo redis-cli -p 26379 -h redis-server1.your_domain --tls --cacert /path/to/ca.crt --cert /path/to/redis.crt --key /path/to/redis.key sentinel ckquorum mymaster- с TLS/SSL, если настроен доступ к Sentinel только по паролю:
sudo redis-cli -p 26379 -a SecretPassword -h redis-server1.your_domain --tls --cacert /path/to/ca.crt --cert /path/to/redis.crt --key /path/to/redis.key info sentinel sudo redis-cli -p 26379 -a SecretPassword -h redis-server1.your_domain --tls --cacert /path/to/ca.crt --cert /path/to/redis.crt --key /path/to/redis.key sentinel ckquorum mymaster
Шаг 5. Подключение к Redis
Подключитесь к Redis. Строка подключения зависит от использования TLS/SSL и настройки Sentinel:
- без TLS/SSL, если доступ к Sentinel только по паролю не включён:
redis://:SecretPassword@redis-server1.your_domain:26379,redis-server2.your_domain:26379,redis-server3.your_domain:26379/0?masterName=mymaster
- без TLS/SSL, если настроен доступ к Sentinel только по паролю:
redis://:SecretPassword@redis-server1.your_domain:26379,redis-server2.your_domain:26379,redis-server3.your_domain:26379/0?masterName=mymaster&sentinelUsername=default&sentinelPassword=SecretPassword
- с TLS/SSL, если доступ к Sentinel по паролю не включён:
redis://:SecretPassword@redis-server1.your_domain:26379,redis-server2.your_domain:26379,redis-server3.your_domain:26379/0?masterName=mymaster
- с TLS/SSL, если настроен доступ к Sentinel только по паролю: