Для корректной работы системы требуется Redis версии 5 или 6.2. В статье описана установка 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
- Установите необходимые пакеты:
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.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
- Обновите кэш пакетов:
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
Шаг 3: Настройка Redis
Начало внимание
Для пароля разрешается применять следующие символы:
- Заглавные латинские буквы: от 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-server
sudo systemctl enable redis-server
- Проверьте статус репликации на ноде
redis-server1.your_domain
:
sudo redis-cli -a SecretPassword info replication
Настройка включения TLS/SSL в Redis
Для включения поддержки TLS/SSL в Redis необходимо в файле конфигурации
port 0
sudo systemctl restart redis-server
sudo redis-cli -p 6379 -h redis-server1.your_domain --tls --cacert /path/to/ca.crt --cert /path/to/redis.crt --key /path/to/redis.key -a SecretPassword info replication Подробнее о настройке TLS/SSL в Redis читайте в официальной документации Redis. |
Шаг 4: Настройка Sentinel
Чтобы настроить Sentinel, необходимо отредактировать файл /etc/redis/sentinel.conf
на каждом из серверов.
Начало внимание
Для корректной работы соблюдайте указанный порядок записей в файле /etc/redis/sentinel.conf
.
Конец внимание
- Сделайте сервера доступные для всех ip-адресов данного сервера:
bind 0.0.0.0
В данном случае это делает доступным сервис Sentinel со всех внешних адресов.
- Укажите домен (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 yes
sentinel announce-hostnames yes
- После этого перезапустите все сервера:
sudo systemctl restart redis-sentinel
sudo systemctl enable redis-sentinel
- Проверьте статус Sentinel и состояние кворума на ноде redis-server1.your_domain:
sudo redis-cli -p 26379 info sentinel
sudo redis-cli -p 26379 sentinel ckquorum mymaster
Настройка включения TLS/SSL вSentinel
Для включения поддержки TLS/SSL в Sentinel необходимо в файле конфигурации
port 0
sudo systemctl restart redis-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 Подробнее о настройке TLS/SSL в Sentinel читайте в официальной документации Redis. |
Шаг 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