﻿# Кластер Valkey

> [HTML Version](valkey-cluster.html)

Valkey — высокопроизводительная NoSQL СУБД, разработанная на основе Redis для современных облачных и распределённых систем.

В статье приведена установка Valkey 8.1.1 для ОС Ubuntu Linux 22.04 и 24.04. Вы можете найти установочные файлы Valkey для вашей операционной системы в следующих ресурсах:

- [официальный репозиторий Valkey](https://github.com/valkey-io/valkey/releases);

- [сайт сервиса Repology](https://repology.org/project/valkey/versions).

Ознакомиться с дополнительной информацией о Valkey можно также в источниках:

- [«Системные требования ELMA365 On-Premises»](elma365-enterprise-on-premises.md#valkey) — поддерживаемые версии Valkey для корректной работы системы;

- [«Переход с кластера Redis на кластер Valkey»](cluster-redis-to-valkey.md) — как заменить кластер Redis на кластер Valkey;

- [официальная документация Valkey](https://valkey.io/topics/quickstart/) — подробнее о работе с СУБД.

Развёртывание кластера Valkey включает этапы:

1. [Подготовка нод (серверов)](#prepare-servers).

2. [Установка Valkey](#install-valkey).

3. [Настройка Valkey](#configure-valkey).

4. [Настройка Sentinel](#sentinel).

5. [Подключение к Valkey](#connect-valkey).

## Шаг 1. Подготовка нод (серверов)

````
начало внимание

````
Минимальное количество серверов для организации кластера — три.

````
конец внимание

1. ````
Создайте три ноды (сервера) с последовательно пронумерованными именами хостов:

- **valkey-server1.your\_domain**;

- **valkey-server2.your\_domain**;

- **valkey-server3.your\_domain**.

2. Создайте необходимые сопоставления имён хостов в DNS. Если такой возможности нет, внесите нужные записи в папке \[OBJECT\].

## Шаг 2. Установка Valkey

1. Установите пакеты:

````
sudo apt install -y apt-transport-https ca-certificates curl

2. ````
Импортируйте ключи:

````
sudo curl -fsSL https://repo.elma365.tech/deb/elma365-keyring.gpg | gpg --dearmor > /etc/apt/trusted.gpg.d/elma365-keyring.gpg

3. ````
Добавьте репозиторий ELMA365:

````
echo "deb \[arch=amd64\] https://repo.elma365.tech/deb \$(lsb\_release -cs) stable" | sudo tee /etc/apt/sources.list.d/elma365.list  
sudo apt update

4. ````
Установите Valkey:

````
sudo apt install elma365-valkey-server

## ````
Шаг 3. Настройка Valkey

````
начало примечание

````
**Примечание**

Для пароля разрешается применять следующие символы:

- заглавные латинские буквы: от A до Z;

- строчные латинские буквы: от a до z;

- цифры от 0 до 9;

- символы:  -\_.

Зарезервированные (недопустимые) символы:

\! \* ' ( ) ; : @ \& = + \$ , / ? % # \[ \]

````
конец примечание

````
Задайте настройки для установленной СУБД:

1. Отредактируйте файл \[OBJECT\] на каждом из серверов:

````
sudo nano /etc/valkey/valkey.conf

2. ````
Чтобы разрешить подключение к Valkey со всех сетевых интерфейсов сервера, укажите:

````
bind 0.0.0.0 

3. ````
Увеличьте максимальное количество клиентов, изменив значение параметра \[OBJECT\] на \[OBJECT\]. Раскомментируйте строку, убрав знак \[OBJECT\]:

````
maxclients 20000

4. ````
Задайте политику вытеснения ключей, изменив значение параметра \[OBJECT\] на \[OBJECT\]. Раскомментируйте строку, убрав знак \[OBJECT\]:

````
maxmemory-policy allkeys-lfu

5. ````
Отключите создание **snapshots**, изменив значение параметра \[OBJECT\] на пустую** **строку. Раскомментируйте строку, убрав знак \[OBJECT\]:

````
save ""

6. ````
Отключите **AOF** (**Append Only File)**,** **чтобы данные Valkey не сохранялись в файл. Для этого замените значение параметра \[OBJECT\] на \[OBJECT\]. Раскомментируйте строку, убрав знак \[OBJECT\]:

````
appendonly no

7. ````
Укажите пароль к master-ноде:

````
masterauth SecretPassword

8. ````
Задайте домен (FQDN) для представления ноды в кластере:

- на ноде **valkey-server1.your\_domain**:

````
replica-announce-ip valkey-server1.your\_domain

- ````
на ноде **valkey-server2.your\_domain**:

````
replica-announce-ip valkey-server2.your\_domain

- ````
на ноде **valkey-server3.your\_domain**:

````
replica-announce-ip valkey-server3.your\_domain

9. ````
Добавьте пароль для доступа:

````
requirepass SecretPassword

10. ````
Отключите защищённый режим, если используется параметр \[OBJECT\] или отсутствует настройка \[OBJECT\]:

````
protected-mode no

11. ````
На нодах **valkey-server2.your\_domain** и **valkey-server3.your\_domain** укажите домен (FQDN) и порт для подключения к master-ноде **valkey-server1.your\_domain**:

````
replicaof valkey-server1.your\_domain 6379

12. ````
Перезапустите все сервера. Начните с master-ноды, а затем перейдите к slave-нодам:

````
sudo systemctl restart valkey-server  
sudo systemctl enable valkey-server

13. ````
Проверьте статус репликации на ноде **valkey-server1.your\_domain**:

````
sudo valkey-cli -a SecretPassword info replication

````
Настройка включения TLS в Valkey

  
Чтобы включить поддержку TLS в Valkey, в файле конфигурации \[OBJECT\]:

1. Отключите незащищённые подключения, выставив в параметре \[OBJECT\]** **значение \[OBJECT\].

2. Задайте порт для TLS‑подключений и раскомментируйте параметр \[OBJECT\].

3. В параметре \[OBJECT\] укажите путь к файлу сертификата сервера.

4. В параметре \[OBJECT\] укажите путь к файлу закрытого ключа.

5. В параметре \[OBJECT\] укажите путь к файлу корневого CA.

````
port 0  
tls-port 6379  
tls-cert-file /path/to/valkey.crt  
tls-key-file /path/to/valkey.key  
tls-ca-cert-file /path/to/ca.crt

6. ````
Перезапустите все сервера. Начните с master-ноды, а затем перейдите к slave-нодам:

````
sudo systemctl restart valkey-server  
sudo systemctl enable valkey-server

7. ````
Проверьте статус репликации на ноде **valkey-server1.your\_domain**:

````
sudo valkey-cli -p 6379 -h valkey-server1.your\_domain --tls --cacert /path/to/ca.crt --cert /path/to/valkey.crt --key /path/to/valkey.key -a SecretPassword info replication

````
  
Подробнее о настройке TLS в Valkey читайте в [официальной документации Valkey](https://valkey.io/topics/encryption/).

## Шаг 4. Настройка Sentinel

Чтобы настроить Sentinel, отредактируйте файл \[OBJECT\] на каждом из серверов.

````
начало внимание

````
Для корректной работы соблюдайте указанный порядок записей в файле \[OBJECT\].

````
конец внимание

1. ````
Укажите домен (FQDN) для представления нод Sentinel:

- на ноде **valkey-server1.your\_domain**:

````
sentinel announce-ip valkey-server1.your\_domain

- ````
на ноде **valkey-server2.your\_domain**:

````
sentinel announce-ip valkey-server2.your\_domain

- ````
на ноде **valkey-server3.your\_domain**:

````
sentinel announce-ip valkey-server3.your\_domain

2. ````
Настройте домен (FQDN) и порт master-ноды, а также значение для достижения кворума:

````
sentinel monitor mymaster valkey-server1.your\_domain 6379 2

3. ````
Задайте пароль для доступа к master-ноде:

````
sentinel auth-pass mymaster SecretPassword

4. ````
Установите время, после которого master-нода будет считаться вышедшей из строя:

````
sentinel down-after-milliseconds mymaster 3000

5. ````
Укажите время ожидания после смены ролей slave-ноды на master-ноду, если master-нода вышла из строя:

````
sentinel failover-timeout mymaster 6000

6. ````
Разрешите использовать имена хостов:

````
sentinel resolve-hostnames yes  
sentinel announce-hostnames yes

7. ````
Опционально: включите доступ только по паролю для пользователя \[OBJECT\]:

````
user default on >SecretPassword sanitize-payload ~\* \&\* +@all

8. ````
Перезапустите все сервера:

````
sudo systemctl restart valkey-sentinel  
sudo systemctl enable valkey-sentinel

9. ````
Проверьте статус Sentinel и состояние кворума на ноде **valkey-server1.your\_domain**:

- для подключения без TLS:

````
sudo valkey-cli -p 26379 info sentinel  
sudo valkey-cli -p 26379 sentinel ckquorum mymaster

- ````
для подключения без TLS, если включён доступ только по паролю:

````
sudo valkey-cli -p 26379 -a SecretPassword info sentinel  
sudo valkey-cli -p 26379 -a SecretPassword sentinel ckquorum mymaster

- ````
для подключения с TLS:

````
sudo valkey-cli -p 26379 -h valkey-server1.your\_domain --tls --cacert /path/to/ca.crt --cert /path/to/valkey.crt --key /path/to/valkey.key info sentinel  
sudo valkey-cli -p 26379 -h valkey-server1.your\_domain --tls --cacert /path/to/ca.crt --cert /path/to/valkey.crt --key /path/to/valkey.key sentinel ckquorum mymaster

- ````
для подключения с TLS, если включён доступ только по паролю:

````
sudo valkey-cli -p 26379 -a SecretPassword -h valkey-server1.your\_domain --tls --cacert /path/to/ca.crt --cert /path/to/valkey.crt --key /path/to/valkey.key info sentinel  
sudo valkey-cli -p 26379 -a SecretPassword -h valkey-server1.your\_domain --tls --cacert /path/to/ca.crt --cert /path/to/valkey.crt --key /path/to/valkey.key sentinel ckquorum mymaster

````
Настройка включения TLS в Sentinel

  
Чтобы включить поддержку TLS в Sentinel, в файле конфигурации \[OBJECT\]:

1. Отключите незащищённые подключения, выставив в параметре \[OBJECT\]** **значение \[OBJECT\].

2. Задайте порт для TLS‑подключений, добавив параметр \[OBJECT\].

3. Добавьте параметр \[OBJECT\] и укажите в нём путь к файлу сертификата сервера.

4. Добавьте параметр \[OBJECT\] и укажите в нём путь к файлу закрытого ключа.

5. Добавьте параметр \[OBJECT\] и укажите в нём путь к файлу корневого CA.

6. Добавьте параметр \[OBJECT\] и включите в нём поддержку TLS, указав значение \[OBJECT\].

````
port 0  
tls-port 26379  
tls-cert-file /path/to/valkey.crt  
tls-key-file /path/to/valkey.key  
tls-ca-cert-file /path/to/ca.crt  
tls-replication yes

````
  
Подробнее о настройке TLS в Sentinel читайте в [официальной документации Valkey](https://valkey.io/topics/sentinel-clients/).

## Шаг 5. Подключение к Valkey

Строка для подключения к Valkey:

````
redis://:SecretPassword@valkey-server1.your\_domain:26379,valkey-server2.your\_domain:26379,valkey-server3.your\_domain:26379/0?masterName=mymaster

````
Строка для подключения к Valkey, если включён доступ только по паролю:

````
redis://:SecretPassword@valkey-server1.your\_domain:26379,valkey-server2.your\_domain:26379,valkey-server3.your\_domain:26379/0?masterName=mymaster\&sentinelUsername=default\&sentinelPassword=SecretPassword

````
Строка для подключения к Valkey c TLS:

````
rediss://:SecretPassword@valkey-server1.your\_domain:26379,valkey-server2.your\_domain:26379,valkey-server3.your\_domain:26379/0?\&masterName=mymaster

````
Строка для подключения к Valkey c TLS, если включён доступ только по паролю:

````
rediss://:SecretPassword@valkey-server1.your\_domain:26379,valkey-server2.your\_domain:26379,valkey-server3.your\_domain:26379/0?masterName=mymaster\&sentinelUsername=default\&sentinelPassword=SecretPassword

````
