Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление

Введение

Отказоустойчивая система ЕССМ выполняется реализуется по схеме резервирования Active-Active с использованием VIP -адреса — (Virtual IP) адреса, что позволяет использовать единый адрес для доступа к каждому узлу системы и хранить и хранить на них актуальные данные. Для настройки отказоустойчивой схемы требуется выделить не менее трех серверовтрех серверов. В схеме резервирования также предусмотрено разделение ЕССМ на сервер с БД и сервер с ЕССМ, использующим данную базу — для таких случаев требуется выделить 5 серверов.

...

Стандартная схема отказоустойчивой системы

draw.io Diagram
bordertrue
diagramNameCopy of Диаграмма без названия-1772101019543
simpleViewerfalse
width600
linksauto
tbstyletop
diagramDisplayNameОбщая схема отказоустойчивой системы ЕССМ
lboxtrue
diagramWidth791
revision
2
5

Стандартная схема отказоустойчивой системы представляет из себя кластер, состоящий из трех узлов: master-, slave-, witness-ноды. Взаимодействие с веб-интерфейсом происходит при помощи VIP, который находится на текущем мастере Keepalived. За состоянием баз данных PostgreSQL и Redis наблюдает узел witness: он же переключает мастерство Repmgr и Redis Sentinel при необходимости.

Подсказка
Процесс переключения мастерства в отказоустойчивой системе подробнее описан в разделе Переключение мастерства в отказоустойчивой системе.
Раскрыть
titleСхема отказоустойчивой системы при запуске БД на отдельном сервере

Схема отказоустойчивой системы при запуске БД на отдельных серверах

draw.io Diagram
bordertrue
diagramNameДиаграмма без названия-1772101019543
simpleViewerfalse
width600
linksauto
tbstyletop
diagramDisplayNameСхема отказоустойчивой системы ЕССМ с разделением БД и приложения
lboxtrue
diagramWidth

...

1221
revision11

Схема отказоустойчивой системы с запуском базы данных на отдельных серверах представляет из себя совокупность двух кластеров:

  • Кластер приложений;
  • Кластер баз данных.

Кластер баз данных включает в себя три сервера:

  • Master база данных PostgreSQL — база данных для всех операций;
  • Slave база данных PostgreSQL — база данных для операций чтения и репликации с Master;
  • Witness-нода — сервер для отслеживания состояния PostgreSQL и Redis с переключением мастерства Repmgr и Redis Sentinel по необходимости.
Информация

Сервис Redis находится в кластере приложений, поэтому доступ до Witness также должен быть обеспечен.

Кластер приложений включается в себя запуск ЕССМ с использованием внешних баз данных. Для доступа к веб-интерфейсу необходимо использовать VIP, который находится на текущем мастере Keepalived.

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

Подготовка серверов

Перед запуском ЕССМ в отказоустойчивой системе по любой из ранее представленных схем необходимо подготовить конфигурационные и вспомогательные файлы.

Настройка файла .env.cluster

Перед запуском ЕССМ в отказоустойчивой системе необходимо подготовить конфигурационный файл .env.cluster, который находится в корневой директории проекта.

Подсказка
Назначение переменных в конфигурационном файле .env.cluster описано в разделе Инструкция по установку и запуску.

Подготовка конфигурационного файла для запуска ЕССМ в стандартной схеме отказоустойчивой системы

Необходимо открыть файл .env.cluster на Master-ноде при помощи любого текстового редактора и для минимальной настройки назначить следующие переменные:

  • ALLOWED_HOSTS — содержит разрешенные IP-адреса. Значение переменной должно соответствовать IP-адресам всех используемых нод;
  • MASTER_HOST — содержит IP-адрес Master-ноды;
  • SLAVE_HOST — содержит IP-адрес Slave-ноды;
  • WITNESS_HOST — содержит IP-адрес Witness-ноды;
  • SENTINEL_MASTER_NAME — содержит уникальное произвольное имя, присваиваемое кластеру баз данных для их мониторинга;
  • SENTINEL_PASSWORD — содержит пароль, используемый службой мониторинга для подключения к кластеру баз данных и получения информации о состоянии серверов.
Примечание

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

Раскрыть
titleПодготовка конфигурационного файла для запуска ЕССМ при запуске БД на отдельных серверах

Подготовка конфигурационного файла для запуска ЕССМ при запуске БД на отдельных серверах

Для каждого кластера необходимо настроить конфигурационный файл по-разному.

Для кластера приложений необходимо открыть файл .env.cluster на Master-ноде при помощи любого текстового редактора и для минимальной настройки назначить следующие переменные:

  • ALLOWED_HOSTS — содержит разрешенные IP-адреса. Значение переменной должно соответствовать IP-адресам всех серверов, участвующих в работе отказоустойчивой системы;
  • MASTER_HOST — содержит IP-адрес Master-ноды ECCM приложения;
  • SLAVE_HOST — содержит IP-адрес Slave-ноды ECCM приложения;
  • WITNESS_HOST — содержит IP-адрес Witness-ноды из кластера баз данных;
  • SENTINEL_MASTER_NAME — содержит уникальное произвольное имя, присваиваемое кластеру баз данных для их мониторинга;
  • SENTINEL_PASSWORD — содержит пароль, используемый службой мониторинга для подключения к кластеру баз данных и получения информации о состоянии серверов.
Примечание

Содержимое файла должно находиться на узлах кластера приложений, в ином случае система не запустится в режиме резервирования.

Для кластера баз данных необходимо открыть файл .env.cluster на Master-базе данных при помощи любого текстового редактора и для минимальной настройки назначить следующие переменные:

  • ROLE — содержит роль БД в кластере. Допустимые значения переменной: master, slave;
  • ALLOWED_HOSTS — содержит разрешенные IP-адреса. Значение переменной должно соответствовать IP-адресам всем серверам, участвующим в работе отказоустойчивой системы;
  • MASTER_HOST — содержит IP-адрес Master-базы данных;
  • SLAVE_HOST — содержит IP-адрес Slave-базы данных;
  • WITNESS_HOST — содержит IP-адрес Witness-ноды кластера баз данных;
  • SENTINEL_MASTER_NAME — содержит уникальное произвольное имя, присваиваемое кластеру баз данных для их мониторинга;
  • SENTINEL_PASSWORD — содержит пароль, используемый службой мониторинга для подключения к кластеру баз данных и получения информации о состоянии серверов.
Примечание

Содержимое файла должно находиться на узлах кластера баз данных, в ином случае система не запустится в режиме резервирования.

Синхронизация файлов конфигурации

Все конфигурационные файлы должны быть идентичны между всеми нодами кластера. Для синхронизации файлов конфигурации между серверами можно воспользоваться утилитой rsync. Пример установки утилиты:

Блок кода
languagebash
titleУстановка rsync
sudo apt install rsync

Для передачи файлов конфигурации кластера используйте следующую команду:

Блок кода
languagebash
titleMaster-node
sudo rsync -av --delete --rsync-path="sudo rsync" <полный_путь_до_директории_eccm>/.env.cluster <имя_пользователя_сервера>@<IP-адрес_сервера_назначения>:<полный_путь_до_директории_eccm>

После выполнения команды для каждого сервера назначения файл конфигурации будет соответствовать настроенному ранее.

Примечание

Для схемы с кластером БД на отдельных серверах после синхронизации проверьте ROLE на каждом узле базы данных.


Настройка SSL/TLS для связи узлов кластера

Репликация между базами данных PostgreSQL и Redis происходит по умолчанию в безопасном режиме. Для настройки безопасности репликации необходимо настроить сертификаты шифрования. Предусмотрена как генерация таких сертификатов, так и использование уже готовых.

Создание самоподписанного сертификата

При отсутствии корпоративного сертификата предусмотрен скрипт root-ca-generator/generate-cluster-cert.sh. Перед запуском предварительно отредактируйте файл root-ca-generator/cluster.cnf: пропишите IP-адреса всех узлов кластера в формате "IP.<№> = <IP-адрес узла>".

После этого запустите скрипт root-ca-generator/generate-cluster-cert.sh, который сгенерирует все необходимые сертификаты и ключи в директорию cluster-cert/:

Блок кода
languagebash
titleMaster: eccm/2.6/
cd root-ca-generator && ./generate-cluster-cert.sh


Состав директории cluster-cert/:

  • ca.crt — корневой CA-сертификат;
  • cluster.crt — сертификат кластера, подписанный CA;
  • cluster.key — приватный ключ кластера.

При запуске ЕССМ будет также сгенерирован Java Truststore: Java-сервисы ECCM не читают ca.crt напрямую — они используют Java KeyStore в формате PKCS12. Сервис truststore-initer автоматически конвертирует ca.crt из cluster-cert/ в truststore.p12 и сохраняет его.

Раскрыть
titleИспользование корпоративного CA

Использование корпоративного CA

Если предусмотрен корпоративный CA, необходимо переместить все файлы безопасного соединения в директорию cluster-cert/ на Master-ноде, а именно:

  • ca.crt — корневой CA-сертификат;
  • cluster.crt — сертификат кластера, подписанный CA;
  • cluster.key — приватный ключ кластера.
Информация

При наличии файла Java Truststore также поместите его в директорию cluster-cert/.

Подсказка
Для изменения получения сертификатов и ключа измените переменные файла .env.cluster. Назначение переменных описано в конфигурационном файле .env.cluster описано в статье Инструкция по установку и запуску.

Синхронизация сертификатов безопасности

Для синхронизации файлов из директории cluster-cert/ между узлами отказоустойчивой системы рекомендуем воспользоваться утилитой rsync. Пример установки утилиты был описан в пункте "Синхронизация файлов конфигурации".

Для передачи сертификатов кластера используйте следующую команду:

Блок кода
languagebash
titleMaster-node
sudo rsync -av --delete --rsync-path="sudo rsync" <полный_путь_до_директории_eccm>/cluster-cert/* <имя_пользователя_сервера>@<IP-адрес_сервера_назначения>:<полный_путь_до_директории_eccm>/cluster-cert

После выполнения команды для каждого сервера назначения сертификаты на узлах будут соответствовать друг другу.

Настройка VIP

Для получения доступа к веб-интерфейсу необходимо установить утилиту Keepalived на каждой ноде с сервисами ЕССМ. Пример установки утилиты:

Блок кода
languagebash
titleНа каждой ноде приложений
sudo apt install keepalived

В директории keepalived подготовлены конфигурационные файлы для утилиты:

  • keepalived.conf — конфигурационный файл Keepalived, настраивающий VRRP для отказоустойчивой системы;
  • check_app.sh — скрипт, проверяющий состояние сервисов ЕССМ. При сбое работы сервиса снижает приоритет сервера для последующей смены мастерства.

После установки скопируйте все конфигурационные файлы из директории keepalived/ в директорию /etc/keepalived/:

Блок кода
languagebash
titleНа каждой ноде приложений: eccm/2.6/
cp ./keepalived/* /etc/keepalived/

Убедитесь, что у скрипта check_app.sh есть права на выполнение. Если прав нет, используйте следующую команду:

Блок кода
languagebash
titleНа каждой ноде приложений
chmod +x /etc/keepalived/check_app.sh

При помощи любого текстового редактора откройте конфигурационный файл /etc/keepalived/keepalived.conf. На сервере, где будет находиться приложение ЕССМ с ролью мастер, измените следующие параметры:

  • INTERFACE_NAME — сетевой интерфейс, на котором будет находиться ЕССМ. Выставляется индивидуально для каждого сервера;
  • ROUTER_ID — идентификатор виртуального маршрутизатора, принимающий значения от 0 до 255. Одинаковый на всех серверах;
  • PRIORITY — приоритет текущей ноды, принимающий значения от 0 до 255. Необходимо, чтобы данное значение было больше параметра weight (в стандартной
      конфигурации weight = -10), в ином случае мастерство переключаться не будет;
  • PASSWORD — пароль VRRP-аутентификации. Одинаковый на всех серверах;
  • VIP_IP_ADDRESS — виртуальный IP-адрес, через который будет предоставляться доступ к веб-интерфейсу. Одинаковый на всех серверах.

Далее перейдите на сервер, где будет находиться приложение ЕССМ с ролью Slave, и измените ранее описанные параметры.

Если необходимо, чтобы при переключении мастерства и восстановлении исходного мастера мастерство возвращалось исходному — на Master-узле выставьте приоритет на 1 больше, чем на Slave-узле. Если такая опция не нужна — установите одинаковое значение на каждом узле.

Подсказка
Процесс переключения мастерства в отказоустойчивой системе описан в статье Переключение мастерства в отказоустойчивой системе.

Рекомендуемые значения:

  • Если необходимо, чтобы мастерство возвращалось исходному мастеру:
    • Master-узел должен иметь приоритет 101;
    • Slave-узел должен иметь приоритет 100;
  • Если нет необходимости в возвращении мастерства исходному мастеру:
    • На всех узлах выставить приоритет 100.

После этого запустите Keepalived на каждом узле. Пример запуска и добавления в автозагрузку:

Блок кода
languagebash
titleНа каждой ноде приложений
sudo systemctl start keepalived
sudo systemctl enable keepalived

Убедитесь, что роли между узлами были распределены, при помощи следующей команды:

Блок кода
languagebash
titleНа каждой ноде приложений
sudo systemctl status keepalived

В журнале вы должны увидеть Entering BACKUP STATE и Entering MASTER STATE.

Запуск ЕССМ в отказоустойчивой системе при стандартной схеме

Для запуска ЕССМ в отказоустойчивой системе при стандартной схеме перейдите на сервер будущего Master-узла. При помощи bash-скрипта произведите запуск мастера с необходимыми параметрами. Пример запуска:

Блок кода
languagebash
titleMaster: eccm/2.6/
./compose-tools.sh --install # установит docker, если он отсутствует в системе
./compose-tools.sh -s <MASTER_HOST> --cluster master

После того как мастер будет инициализирован и готов к работе, перейдите на сервер Slave-узла. При помощи bash-скрипта произведите запуск Slave с необходимыми параметрами. Пример запуска с обязательными параметрами:

Блок кода
languagebash
titleSlave: eccm/2.6/
./compose-tools.sh --install # установит docker, если он отсутствует в системе
./compose-tools.sh -s <SLAVE_HOST> --cluster slave

Параллельно с запуском Slave-узла произведите запуск Witness-узла. Подключитесь к Witness-ноде. При помощи bash-скрипта произведите запуск Witness с необходимыми параметрами. Пример запуска с обязательными параметрами:

Блок кода
languagebash
titleWitness: eccm/2.6/
./compose-tools.sh --install # установит docker, если он отсутствует в системе
./compose-tools.sh -s <WITNESS_HOST> --cluster witness

После инициализации перейдите по ранее установленному VIP-адресу (имеет формат http://<VIP>/). Веб-интерфейс ЕССМ будет доступен.

Раскрыть
titleЗапуск ЕССМ в отказоустойчивой системе при запуске БД на отдельных серверах

Запуск ЕССМ в отказоустойчивой системе при запуске БД на отдельных серверах

Примечание

Убедитесь, что значение переменной ROLE на Master-базе данных и Slave-базе данных различается и соответствует их роли.

Для запуска ЕССМ в отказоустойчивой системе при запуске БД на отдельном сервере перейдите на сервер будущей Master-базы данных. Перейдите в директорию postgres/ и запустите базу данных:

Блок кода
languagebash
titleMaster-db: eccm/2.6/
./compose-tools.sh --install # установит docker, если он отсутствует в системе
cd postgres/
docker compose --env-file=.env --env-file=../.env.cluster -f docker-compose.cluster.yml up -d

После того как база данных на Master-db будет проинициализирована, перейдите на сервер Slave-db. Перейдите в директорию postgres/ и запустите базу данных:

Блок кода
languagebash
titleSlave-db: eccm/2.6/
./compose-tools.sh --install # установит docker, если он отсутствует в системе
cd postgres/
docker compose --env-file=.env --env-file=../.env.cluster -f docker-compose.cluster.yml up -d

Во время инициализации Slave-db запустите Witness-узел, перейдя на сервер Witness-node. При помощи bash-скрипта произведите запуск Witness с необходимыми параметрами. Пример запуска с обязательными параметрами:

Блок кода
languagebash
titleWitness: eccm/2.6/
./compose-tools.sh --install # установит docker, если он отсутствует в системе
./compose-tools.sh -s <WITNESS_HOST> --cluster witness

После полной инициализации всего кластера баз данных перейдите на сервер Master-ECCM. При помощи bash-скрипта произведите запуск мастера с необходимыми параметрами. Пример запуска с обязательными параметрами:

Блок кода
languagebash
titleMaster-app: eccm/2.6/
./compose-tools.sh --install # установит docker, если он отсутствует в системе
./compose-tools.sh -s <MASTER_ECCM_HOST> --cluster master --database-host <MASTER_DB_HOST> --database-port <MASTER_DB_PORT> --backup-database-host <SLAVE_DB_HOST> --backup-database-port <SLAVE_DB_PORT>

Перейдите на сервер Slave-узла. При помощи bash-скрипта произведите запуск Slave с необходимыми параметрами. Пример запуска с обязательными параметрами:

Блок кода
languagebash
titleSlave: eccm/2.6/
./compose-tools.sh --install # установит docker, если он отсутствует в системе
./compose-tools.sh -s <SLAVE_ECCM_HOST> --cluster slave --database-host <MASTER_DB_HOST> --database-port <MASTER_DB_PORT> --backup-database-host <SLAVE_DB_HOST> --backup-database-port <SLAVE_DB_PORT>

После инициализации перейдите по ранее установленному VIP-адресу (имеет формат http://<VIP>/). Веб-интерфейс ЕССМ будет доступен.

...