Для корректной работы системы требуется Redis версии 6.2.12. В статье описана установка Redis 6.2.12 для ОС Ubuntu Linux 20.04 и 22.04. Вы также можете ознакомиться с руководством в официальной документации Redis.
Установка состоит из пяти этапов:
- Подготовка нод (серверов)
- Установка Redis и Sentinel
- Настройка Redis
- Настройка Sentinel
- Подключение к Redis
Минимальное количество серверов для организации кластера — три.
-
Создайте три ноды (сервера) с последовательно пронумерованными именами хостов:
- redis-server1.your_domain
- redis-server2.your_domain
- redis-server3.your_domain
-
Создайте необходимые сопоставления имен хостов в DNS. Если такой возможности нет, внесите нужные записи в
/etc/hosts.
-
Установите необходимые пакеты:
sudo apt install lsb-release curl gpg -
Импортируйте необходимые ключи и добавьте репозиторий Redis:
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpgecho "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 -
Обновите кеш пакетов:
sudo apt-get update -
Установите 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
Для пароля разрешается применять следующие символы:
- заглавные латинские буквы: от A до Z
- строчные латинские буквы: от a до z
- цифры от 0 до 9
- символы: -_.
Зарезервированные (недопустимые) символы: ! * ' ( ) ; : @ & = + $ , / ? % # [ ]
Для настройки необходимо отредактировать файл /etc/redis/redis.conf на каждом из серверов:
sudo nano /etc/redis/redis.conf
-
Сделайте сервера доступными для всех IP-адресов данного сервера. Это делает сервис Redis доступным со всех внешних адресов:
bind 0.0.0.0 -
Увеличьте максимальное количество клиентов, изменив значение параметра maxclients на 20000. Раскомментируйте строку, убрав знак решетки #:
maxclients 20000 -
Задайте политику вытеснения ключей, изменив значение параметра maxmemory-policy на allkeys-lfu. Раскомментируйте строку, убрав знак решетки #:
maxmemory-policy allkeys-lfu -
Отключите создание snapshots, изменив значение параметра save на "". Раскомментируйте строку, убрав знак решетки #:
save "" -
Отключите AOF (сохранение базы данных Redis в файл). Для этого замените значение параметра appendonly на no. Раскомментируйте строку, убрав знак решетки #:
appendonly no -
Укажите пароль к Мастеру:
masterauth SecretPassword -
Укажите домен (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 - на ноде
-
Укажите пароль для доступа:
requirepass SecretPassword -
На нодах
redis-server2.your_domainиredis-server3.your_domainукажите домен (FQDN) и порт для подключения к ноде Мастера (redis-server1.your_domain):replicaof redis-server1.your_domain 6379 -
Перезапустите все сервера (сначала Мастер, затем Слэйвы):
sudo systemctl restart redis-serversudo systemctl enable redis-server -
Проверьте статус репликации на ноде
redis-server1.your_domain:sudo redis-cli -a SecretPassword info replication
Чтобы настроить Sentinel, необходимо отредактировать файл /etc/redis/sentinel.conf на каждом из серверов.
Для корректной работы соблюдайте указанный порядок записей в файле /etc/redis/sentinel.conf.
-
Сделайте сервера доступные для всех IP-адресов данного сервера. Это делает сервис Sentinel доступным со всех внешних адресов:
bind 0.0.0.0 -
Укажите домен (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 - на ноде
-
Укажите домен (FQDN) и порт Мастера, а также значение для достижения кворума:
sentinel monitor mymaster redis-server1.your_domain 6379 2 -
Укажите пароль для доступа к Мастеру:
sentinel auth-pass mymaster SecretPassword -
Укажите время, после которого мастер будет считаться упавшим:
sentinel down-after-milliseconds mymaster 3000 -
Укажите время ожидания после смены ролей слейва на мастер в случае, если мастер вышел из строя:
sentinel failover-timeout mymaster 6000 -
Включите поддержку разрешения имен хостов:
sentinel resolve-hostnames yessentinel announce-hostnames yes -
Для повышения безопасности настройте для пользователя
defaultдоступ к Sentinel только по паролю:user default on >SecretPassword sanitize-payload ~* &* +@all -
После этого перезапустите все сервера:
sudo systemctl restart redis-sentinelsudo systemctl enable redis-sentinel -
Проверьте статус Sentinel и состояние кворума на ноде redis-server1.your_domain, используя разные команды в зависимости от использования TLS/SSL и настройки Sentinel:
-
без TLS/SSL, если доступ к Sentinel по паролю не включен:
sudo redis-cli -p 26379 info sentinelsudo redis-cli -p 26379 sentinel ckquorum mymaster -
без TLS/SSL, если настроен доступ к Sentinel только по паролю:
sudo redis-cli -p 26379 -a SecretPassword info sentinelsudo 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 sentinelsudo 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 sentinelsudo 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
-
Подключитесь к 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 только по паролю:
redis://:SecretPassword@redis-server1.your_domain:26379,redis-server2.your_domain:26379,redis-server3.your_domain:26379/0?masterName=mymaster&sentinelUsername=default&sentinelPassword=SecretPassword
Технический писатель: Белова Ирина