Содержание
Кластер БД postgresql
1.1. Описание
- Patroni: Patroni — это инструмент для управления высокодоступным кластером PostgreSQL. Он обеспечивает автоматизированное управление основным/резервным сервером, мониторинг состояния серверов, выбора основного сервера (leader), решения конфликтов и так далее. Patroni помогает обеспечить высокую доступность и отказоустойчивость для кластера PostgreSQL.
- 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 необходимо добавить порты 6379, 26379 и выполнить настройку для 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 - проверка роли




