Продукты Р7
Корпоративный сервер 2024
Корпоративный сервер 2024
Сервер документов
Сервер документов
Редакторы
Редакторы
Корпоративный сервер 2019
Корпоративный сервер 2019
Графика
Графика
Команда
Команда
Мобильные редакторы
Мобильные редакторы
Облачный офис
Облачный офис
Почта
Почта
Органайзер
Органайзер
Дополнительно
Часто задаваемые вопросы
Разработчикам
Интеграции
Новые возможности

Пример развертки кластеров Pgsql, RabbitMQ, Redis

Обновлено: 25.12.25

Кластер БД postgresql

1.1. Описание

  1. Patroni: Patroni — это инструмент для управления высокодоступным кластером PostgreSQL. Он обеспечивает автоматизированное управление основным/резервным сервером, мониторинг состояния серверов, выбора основного сервера (leader), решения конфликтов и так далее. Patroni помогает обеспечить высокую доступность и отказоустойчивость для кластера PostgreSQL.
  2. etcd: etcd — это распределенное хранилище ключей-значений, используемое Patroni для хранения конфигурации и состояния кластера. Он обеспечивает централизованное хранение данных, нужных для согласованности и синхронизации между серверами кластера PostgreSQL. etcd также используется для обнаружения и выбора основного сервера. Для работы кластера необходимо , чтобы как минимум два хоста etcd были доступны

1.2. Установка кластера postgresql

1.2.1 Настройка хостов

Мы будем использовать три хоста (минимальный набор для организации кластера) для кластера postgresql и один хост для haproxy:

  • psql1: 192.168.27.239 ( etcd + patroni + postgresql )
  • psql2: 192.168.27.219 ( etcd + patroni + postgresql )
  • psql3: 192.168.27.108 ( etcd + patroni + postgresql )
  • haproxy: 192.168.27.83 (haproxy)
Важно

При включенной службе firewalld необходимо добавить в исключения порты 2380, 2379, 5432, 8008 и выполнить настройку для pgsql.

1.2.1.1 Переименуйте все хосты кластера postgresql и добавьте в файл hosts (в нашем случаи мы будем использовать имя psql)
1.2.1.1.1. На первом хосте
192.168.27.239:

hostnamectl set-hostname psql1

systemctl restart systemd-hostnamed
1.2.1.1.2. На втором хосте
192.168.27.219:

hostnamectl set-hostname psql2

systemctl restart systemd-hostnamed
1.2.1.1.3. На третьем хосте
192.168.27.108:

hostnamectl set-hostname psql3

systemctl restart systemd-hostnamed
1.2.1.2. Добавьте данные о хостах в файл /etc/hosts на ВСЕХ хостах
192.168.27.239 psql1
192.168.27.219 psql2
192.168.27.108 psql3

1.2.2. Установка ETCD ( на хостах psql1, psql2, psql3 )

1.2.2.1. Обновляем систему, устанавливаем etcd, останавливаем сервис etcd
dnf update -y

yum install etcd -y

systemctl stop etcd
1.2.2.2. Создаем конфигурацию /etc/etcd/etcd.conf:
1.2.2.2.1. На первом хосте 192.168.27.239 psql1:
ETCD_NAME="psql1"
ETCD_DATA_DIR="/var/lib/etcd/"
ETCD_HEARTBEAT="1000"
ETCD_ELECTION_TIMEOUT="5000"
ETCD_LISTEN_PEER_URLS="http://192.168.27.239:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.27.239:2379,http://localhost:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.27.239:2380"
ETCD_INITIAL_CLUSTER="psql1=http://192.168.27.239:2380,psql2=http://192.168.27.219:2380,psql3=http://192.168.27.108:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-postgres-cluster"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.27.239:2379"
ETCD_ENABLE_V2="true"
1.2.2.2.2. На втором хосте 192.168.27.219 psql2:
ETCD_NAME="psql2"
ETCD_DATA_DIR="/var/lib/etcd/"
ETCD_HEARTBEAT="1000"
ETCD_ELECTION_TIMEOUT="5000"
ETCD_LISTEN_PEER_URLS="http://192.168.27.219:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.27.219:2379,http://localhost:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.27.219:2380"
ETCD_INITIAL_CLUSTER="psql1=http://192.168.27.239:2380,psql2=http://192.168.27.219:2380,psql3=http://192.168.27.108:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-postgres-cluster"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.27.219:2379"
ETCD_ENABLE_V2="true
1.2.2.2.3. На третьем хосте 192.168.27.108 psql3:
ETCD_NAME="psql3"
ETCD_DATA_DIR="/var/lib/etcd/"
ETCD_HEARTBEAT="1000"
ETCD_ELECTION_TIMEOUT="5000"
ETCD_LISTEN_PEER_URLS="http://192.168.27.108:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.27.108:2379,http://localhost:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.27.108:2380"
ETCD_INITIAL_CLUSTER="psql1=http://192.168.27.239:2380,psql2=http://192.168.27.219:2380,psql3=http://192.168.27.108:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-postgres-cluster"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.27.108:2379"
ETCD_ENABLE_V2="true"
  • ETCD_NAME —  имя хоста на котором производится настройка
  • ETCD_LISTEN_CLIENT_URLS — url для прослушивания клиентских запросов. ( можно указать 0.0.0.0:2379 в этом случаи хост будет слушать все )
  • ETCD_ADVERTISE_CLIENT_URLS — url для клиентских запросов ( указываем ip хоста, на котором производится настройка )
  • ETCD_INITIAL_ADVERTISE_PEER_URLS — url для запросов от других узлов etcd  ( указываем ip хоста, на котором производится настройка )
  • ETCD_INITIAL_CLUSTER_TOKEN — токен для идентификации кластера ( должен совпадать на каждом хоста postgresql )
  • ETCD_INITIAL_CLUSTER — все узлы и их url. Конструкция выглядит следующим образом
    host_name_1=http://ip_iddress:2380,host_name_2=http://ip_iddress:2380,host_name_3=http://ip_iddress:2380
  • ETCD_INITIAL_CLUSTER_STATE — начальное состояние кластера
  • ETCD_DATA_DIR —  директорию, где хранятся данные ETCD
  • ETCD_ELECTION_TIMEOUT — таймаут выборов в миллисекундах
  • ETCD_HEARTBEAT — интервал между отправкой heatbeat сигналов в миллисекундах
1.2.2.3. Перезапустите службы и проверьте работу etcd
systemctl daemon-reload

systemctl enable etcd

systemctl start etcd

В случае если были ошибки в конфигурациях и служба корректно не запускалась, потребуется удалить каталог и перезапустить службы на всех нодах:

rm -rf /var/lib/etcd/* - каталог назначения данных

systemctl restart etcd

Для проверки работы:

etcdctl member list

etcdctl endpoint status --write-out=table --endpoints=psql1:2379,psql2:2379,psql3:2379

1.2.3. Установка PostgreSQL ( на хостах psql1,psql2,psql3 )

1.2.3.1. Установите БД на всех нодах
dnf install postgresql16 postgresql16-server postgresql16-contrib -y

Проверьте что БД не запущена на всех нодах

systemctl stop postgresql-16.service
1.2.3.1.1. на первой ноде psql1
/usr/pgsql-16/bin/postgresql-16-setup initdb - инициализация БД

systemctl start postgresql-16.service - запуск службы

sudo -i -u postgres psql - вход в БД
CREATE USER replicator WITH REPLICATION ENCRYPTED PASSWORD 'replicator'; - создание пользователя replicator и установка пароля
 
ALTER USER postgres PASSWORD 'postgres'; - изменение пользователя postgres и установка нового пароля
 
CREATE USER cddisk WITH password 'cddisk'; - создание пользователя cddisk и установка пароля для приложения Корпоративный сервер
CREATE DATABASE cddisk OWNER cddisk; - создание базы данных cddisk для приложения Корпоративный сервер
GRANT ALL privileges ON DATABASE cddisk TO cddisk; - предоставление прав к БД
 
CREATE USER ds WITH password 'ds'; создание пользователя ds и установка пароля для приложения Сервер документов
CREATE DATABASE ds OWNER ds; - создание базы данных ds для приложения Сервер документов
GRANT ALL privileges ON DATABASE ds TO ds; - предоставление прав к БД

Рекомендуется изменить пользователей и пароли для безопасности.

1.2.3.1.2. на других нодах проверить что БД не запущена
systemctl status postgresql-16.service

1.2.4. Установка Patroni( на хостах psql1, psql2, psql3 )

1.2.4.1. Установите зависимости и patroni на всех нодах
dnf install python3 python3-pip python3-psycopg2 patroni patroni-etcd -y
dnf install python3-devel-3.8.2-15.el7.x86_64 (или более новее)
dnf install libpq-devel-15.0-2.el7.x86_64 (или более новее)
pip3 install wheel
pip3 install patroni[etcd]

Дополнительно:

В файле ~/.bashrc и добавьте в файл:

export PATRONICTL_CONFIG_FILE=/etc/patroni/patroni.yml

Также потребуется выполнить команду:

export PATRONICTL_CONFIG_FILE=/etc/patroni/patroni.yml
1.2.4.2. Создайте конфигурацию patroni
Важно

В зависимости от версии postgresql значения data_dir и bin_dir могут быть другими.

Поэтому значения будут выглядеть следующим образом на момент сборки стенда:

data_dir: /var/lib/pgsql/16/data

bin_dir: /usr/pgsql-16/bin
1.2.4.2.1. На первом хосте 192.168.27.239 postgresql1 /etc/patroni/patroni.yml:

Обратить внимание на форматирование и настройки postgresql и приведет полный файл yml, в качестве примера:

name: psql1
scope: pg-cluster
 
watchdog:
  mode: off
 
restapi:
  listen: 192.168.27.239:8008
  connect_address: "192.168.27.239:8008"
 
etcd:
  hosts: 192.168.27.239:2379,192.168.27.219:2379,192.168.27.108:2379
 
bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    maximum_lag_on_failover: 1048576
    postgresql:
      use_pg_rewind: true
      use_slots: true
      parameters:
        max_connections: 2000
        superuser_reserved_connections: 5
        max_locks_per_transaction: 64
        max_prepared_transactions: 0
        huge_pages: try
        shared_buffers: 512MB
        work_mem: 128MB
        maintenance_work_mem: 256MB
        effective_cache_size: 2GB
        checkpoint_timeout: 15min
        checkpoint_completion_target: 0.9
        wal_compression: on
        min_wal_size: 2GB
        max_wal_size: 4GB
        wal_buffers: 32MB
        default_statistics_target: 1000
        seq_page_cost: 1
        random_page_cost: 4
        effective_io_concurrency: 2
        synchronous_commit: on
        autovacuum: on
        autovacuum_max_workers: 5
        autovacuum_vacuum_scale_factor: 0.01
        autovacuum_analyze_scale_factor: 0.02
        autovacuum_vacuum_cost_limit: 200
        autovacuum_vacuum_cost_delay: 20
        autovacuum_naptime: 1s
        max_files_per_process: 4096
        archive_mode: on
        archive_timeout: 1800s
        archive_command: cd .
        wal_level: replica
        wal_keep_segments: 130
        max_wal_senders: 10
        max_replication_slots: 10
        hot_standby: on
        hot_standby_feedback: True
        wal_log_hints: on
        shared_preload_libraries: pg_stat_statements,auto_explain
        pg_stat_statements.max: 10000
        pg_stat_statements.track: all
        pg_stat_statements.save: off
        auto_explain.log_min_duration: 10s
        auto_explain.log_analyze: true
        auto_explain.log_buffers: true
        auto_explain.log_timing: false
        auto_explain.log_triggers: true
        auto_explain.log_verbose: true
        auto_explain.log_nested_statements: true
        track_io_timing: on
        log_lock_waits: on
        log_temp_files: 3
        track_activities: on
        track_counts: on
        track_functions: all
        log_checkpoints: on
        logging_collector: on
        log_truncate_on_rotation: on
        log_rotation_age: 1d
        log_rotation_size: 0
        log_line_prefix: '%t [%p-%l] %r %q%u@%d '
        log_filename: 'postgresql-%a.log'
        log_directory: /var/lib/pgsql/16/data/log
 
  initdb:
    - encoding: UTF8
    - data-checksums
 
  pg_hba:
    - local all postgres peer
    - host replication replicator 192.168.27.239/32 md5
    - host replication replicator 192.168.27.219/32 md5
    - host replication replicator 192.168.27.108/32 md5
    - host replication replicator 127.0.0.1/32 md5
    - host all all 0.0.0.0/0 md5
 
postgresql:
  pgpass: /var/lib/pgsql/16/.pgpass
  listen: 192.168.27.239:5432
  connect_address: "192.168.27.239:5432"
  data_dir: /var/lib/pgsql/16/data/
  bin_dir: /usr/pgsql-16/bin/
  config_dir: /var/lib/pgsql/16/data
  pg_hba:
    - local all postgres peer
    - host replication replicator 192.168.27.239/32 md5
    - host replication replicator 192.168.27.219/32 md5
    - host replication replicator 192.168.27.108/32 md5
    - host replication replicator 127.0.0.1/32 trust
    - host all all 0.0.0.0/0 md5
  replication:
    username: replicator
    password: replicator
  superuser:
    username: postgres
    password: postgres
 
  remove_data_directory_on_rewind_failure: false
  remove_data_directory_on_diverged_timelines: false
 
  create_replica_methods:
    - basebackup
  basebackup:
    max-rate: '100M'
    checkpoint: 'fast'
 
watchdog:
  mode: off # Allowed values: off, automatic, required
  device: /dev/watchdog
  safety_margin: 5
 
tags:
  nofailover: false
  noloadbalance: false
  clonefrom: false
  nosync: false

В конфигурации параметры БД возможно изучить на сайте postgresql

1.2.4.2.2. На втором хосте 192.168.27.219 psql2 /etc/patroni/patroni.yml

Так же укажите файл patroni.yml, изменив на ip адреса машины 192.168.27.219:8008

В параметрах:

restapi: listen: 192.168.27.239:8008 connect_address: "192.168.27.239:8008"

postgresql: pgpass: /var/lib/pgsql/16/.pgpass listen: 192.168.27.239:5432 connect_address: "192.168.27.239:5432"
1.2.4.2.3. На втором хосте 192.168.27.108 psql3 etc/patroni/patroni.yml

Так же указать файл patroni.yml, изменив на ip адреса машины аналогично прошлому пункту 192.168.27.108:8008

1.2.4.2.4. Выполните команды на всех нодах
sudo chown postgres:postgres -R /etc/patroni
sudo chmod 700 /etc/patroni
1.2.4.3 Краткое описание /etc/patroni/patroni.yml:

Это конфигурационный файл для Patroni, инструмента управления высокодоступным кластером PostgreSQL.

scope: Название кластера («pg_cluster»)

name: Имя текущего узла («postgresql1 или postgreslq2»).

restapi: Настройки для REST API Patroni.

  • listen: IP и порт для прослушивания REST API («0.0.0.0:8008»).
  • connect_address: IP и порт, по которым будут подключаться клиенты к REST API (192.168.27.239:8008).

etcd: Настройки для подключения к ETCD, распределенному хранилищу состояния.

  • hosts: Список хостов ETCD для подключения (192.168.27.239:2379,192.168.27.219:2379,192.168.27.108:2379).

bootstrap: Настройки для начальной настройки кластера.

  • dcs: Настройки распределенной системы координирования (DCS).
    • ttl: Время жизни записи в DCS в секундах («30»).
    • loop_wait: Интервал опроса DCS в секундах («10»).
    • retry_timeout: Тайм-аут для повторных попыток взятия лока в DCS в секундах («10»).
    • maximum_lag_on_failover: Максимально допустимая задержка репликации перед переключением мастера в байтах («1048576»).
    • postgresql: Настройки для PostgreSQL.
      • use_pg_rewind: Использовать ли pg_rewind для восстановления («true»).
      • use_slots: Включить ли использование слотов репликации («true»).
      • parameters: Дополнительные параметры PostgreSQL, указанные в формате «ключ: значение».
  • initdb: Настройки для команды initdb.
  • pg_hba: Разрешения доступа к PostgreSQL.
  • users: Пользователи PostgreSQL.
    • admin: Имя пользователя («admin») и его настройки, включая пароль и опции.

postgresql: Настройки для PostgreSQL.

  • listen: IP и порт для прослушивания PostgreSQL (0.0.0.0:5432 — для всех адресов без исключения).
  • connect_address: IP и порт, по которым будут подключаться клиенты к PostgreSQL (192.168.27.239:5432).
  • data_dir: Директория, где хранятся данные PostgreSQL («/var/lib/pgsql/16/data/»).
  • config_dir: Директория настроек существующей базы («/var/lib/pgsql/16/data»)
  • bin_dir: Директория, где находятся исполняемые файлы PostgreSQL («/usr/lib/postgresql/16/bin»).
  • pgpass: Путь к файлу pgpass для автоматической аутентификации в PostgreSQL.
  • authentication: Настройки аутентификации PostgreSQL.
    • replication: Пользователь для репликации («replicator») и его пароль.
    • superuser: Суперпользователь («postgres») и его пароль.
  • parameters: Дополнительные параметры PostgreSQL, указанные в формате «ключ: значение».

tags: Дополнительные теги для управления поведением Patroni.

  • nofailover: Запретить автоматический переход к другому мастеру при сбое («false»).
  • noloadbalance: Запретить автоматическую балансировку нагрузки («false»).
  • clonefrom: Запретить клонирование другой реплики («false»).
  • nosync: Отключить синхронизацию реплик («false»).
1.2.4.4. Настройка сервиса patroni для всех нод

В файл ~/.bashrc добавьте

export PATRONICTL_CONFIG_FILE=/etc/patroni/patroni.yml
1.2.4.5. Перезапустите сервис patroni и проверьте состояние кластера:
systemctl daemon-reload
systemctl enable patroni --now
systemctl status patroni
patronictl list

1.2.4.6. Полезные команды при настройке

В случае если не указывался из пункта 1.2.4.4, то потребуется указания ключа

patronictl -c /etc/patroni/patroni.yml edit-config - изменение принятой конфигурации patroni.yml (может потребовать при проверке правильности принимаемых параметров patroni)

patronictl -c /etc/patroni/patroni.yml restart pg-cluster psql1

patronictl -c /etc/patroni/patroni.yml restart pg-cluster psql2

patronictl -c /etc/patroni/patroni.yml restart pg-cluster psql3

patroni --validate-config /etc/patroni/patroni.yml проверка конфигурации на ошибки

Система сама выберет лидера (master) и реплики (slave).

Если выключить машину Лидер то этот статус автоматически назначается на любой доступный хост.

2. Rabbitmq кластер

2.1. Установка ПО RabbitMQ

Важно

При включенной службе firewalld необходимо добавить порты 15672, 25672, 4369 и выполнить настройку для amqp.

2.1.1. Установка ПО RabbitMQ для всех нод

dnf install 'rabbitmq-server-3.*' -y
systemctl enable --now rabbitmq-server

2.2. Настройка хостов с ПО RabbitMQ

Важно

При отсутствии возможности добавить записи на DNS сервере, необходимо сделать записи в файле /etc/hosts на ВСЕХ нодах в кластере и хосте с HAProxy.

/etc/hosts
127.0.0.1 localhost rabmq1
  
192.168.27.238 rabmq1.localdomain
192.168.27.118 rabmq2.localdomain
192.168.27.31 rabmq3.localdomain
192.168.27.83 haproxy

Переименуйте все ноды, рекомендуется использовать такие имена:

hostnamectl set-hostname rabmq1.localdomain
hostnamectl set-hostname rabmq2.localdomain
hostnamectl set-hostname rabmq3.localdomain

2.2.1. Настройка ноды rabmq1

# Создаем файл
mcedit /etc/rabbitmq/rabbitmq-env.conf
  
# Добавляем переменные окружения
RABBITMQ_NODENAME=rabbit@rabmq1.localdomain
RABBITMQ_USE_LONGNAME=true

2.2.2. Настройка нод rabmq2 и rabmq3

# Создаем файл
mcedit /etc/rabbitmq/rabbitmq-env.conf
# Добавляем переменные окружения
RABBITMQ_NODENAME=rabbit@rabmq2.localdomain
RABBITMQ_USE_LONGNAME=true

И:

# Создаем файл
mcedit /etc/rabbitmq/rabbitmq-env.conf
# Добавляем переменные окружения
RABBITMQ_NODENAME=rabbit@rabmq3.localdomain
RABBITMQ_USE_LONGNAME=true

2.2.3. Скопируйте сookie с Primary на Secondary ноды

Любым удобным для Вас способом, копируем c заменой сookie /var/lib/rabbitmq/.erlang.cookie с rabmq1 ноды на ВСЕ остальные ноды в кластере.

Назначьте права на сookie на нодах:

chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
chmod 400 /var/lib/rabbitmq/.erlang.cookie

Перезапустите службу на всех нодах кластера

systemctl restart rabbitmq-server

2.2.4. Добавление нод rabmq2 и rabmq3 к кластеру

# Остановите приложение на нодах rabmq2 и rabmq3 для добавления к кластеру:
rabbitmqctl stop_app
 
# Потребуется сброс rabbitmq на нодах rabmq2 и rabmq3
rabbitmqctl reset
 
# Добавьте ноды к кластеру, выполните на rabmq2 и rabmq3
 
rabbitmqctl join_cluster rabbit@rabmq1.localdomain
  
# Запустите приложение на нодах rabmq2 и rabmq3:
rabbitmqctl start_app
  
# Проверьте статус кластера на всех нодах:
rabbitmqctl cluster_status

2.3. Настройка кластера RabbitMQ

2.3.1 Включите плагин Management Plugin на всех нодах кластера

rabbitmq-plugins enable \
rabbitmq_management

2.3.2. Создайте виртуальный хост для haproxy и пользователя для подключения к Серверу документов и Корпоративному серверу

На ноде rabmq1 создайте пользователя r7office:

rabbitmqctl add_user r7office r7office
Важно

На версии КС 4400 нет возможности использовать отличный от корня «/». Предоставьте права r7-office для Корпоративного сервера:

Выдайте ему права

rabbitmqctl set_permissions -p / r7office ".*" ".*" ".*"

При необходимости выдайте права администратора если будет использоваться пользователь для подключения с помощью Management Plugin

rabbitmqctl set_user_tags r7office administrator

Настройте зеркальную очередь с префиксом amq (при сбое сервера A эти блоки очереди выходят на сервер B)

rabbitmqctl set_policy / '^(?!amq\.).*' '{"ha-mode": "all"}'

2.4. Проверяем работу кластера

Поочередно останавливаем службу rabbitmq-server.service на нодах кластера:

systemctl stop rabbitmq-server

Для вывода дополнительной информации:

rabbitmqctl list_vhosts
rabbitmqctl list_users
rabbitmqctl list_permissions
rabbitmqctl list_policies

Проверяем состояние ноды с помощью плагина Management Plugin http://192.168.27.238:15672/

3. Кластер Redis

Важно

При отсутствии возможности добавить записи на DNS сервере, необходимо сделать записи в файле /etc/hosts на ВСЕХ нодах в кластере и хосте с HAProxy.

/etc/hosts
127.0.0.1 localhost redis1
  
192.168.27.238 redis1.localdomain redis1
192.168.27.118 redis2.localdomain redis2
192.168.27.31 redis3.localdomain redis3
192.168.27.83 haproxy

При включенной службе firewalld необходимо добавить порты 637926379 и выполнить настройку для redis.

Переименуйте все ноды:

hostnamectl set-hostname redis1.localdomain

hostnamectl set-hostname redis2.localdomain

hostnamectl set-hostname redis3.localdomain

3.1. Установка Redis и Sentinal

dnf install redis -y на все ноды

3.2. Настройка

Внесите правки в файл /etc/redis/redis.conf

bind  - предоставление запросов от других клиентов
maxclients 20000 - максимальное количество клиентов
maxmemory-policy allkeys-lfu - политика вытеснения ключей
save "" - политика создания снапшотов отключение
appendonly no - отключение сохранения базы данных Redis в файл
masterauth "SecretPassword" - укажите пароль к Мастеру
requirepass "SecretPassword" - пароль к Мастеру
 
Укажите представление ноды в кластере:
 
на ноде redis1:
replica-announce-ip "redis1.localdomain"
 
на ноде redis2:
replica-announce-ip "redis2.localdomain"
 
на ноде redis3:
replica-announce-ip "redis3.localdomain"
 
На нодах redis2 и redis3 укажите:
replicaof "redis1.localdomain" 6379

Внесите правки в файл /etc/redis/sentinel.conf

на ноде redis 1
sentinel announce-ip "redis1.localdomain"
 
на ноде redis 2
sentinel announce-ip "redis2.localdomain"
 
на ноде redis 3
sentinel announce-ip "redis3.localdomain"
 
на всех нодах
bind 0.0.0.0
sentinel monitor mymaster redis1.localdomain 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

3.3. Запустите сервисы и проверьте работу

systemctl enable redis redis-sentinel --now
systemctl restart redis redis-sentinel
systemctl status redis
systemctl status redis-sentinel
 
проверьте что установлены права на каталог и вложенные файлы
sudo chown -R redis:redis /var/log/redis/
sudo chown -R redis:redis /etc/redis/
 
 
 
redis-cli -p 26379 info sentinel - инфо о работе sentinel
redis-cli -p 26379 sentinel ckquorum mymaster - инфо о кворуме
 
redis-cli -a SecretPassword info replication | grep role - проверка роли