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

Ключ

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

Оглавление

Введение

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

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

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

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

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

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

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

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

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

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

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

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

Кластер приложений включается в себя запуск ЕССМ с использованием внешних баз данных. Для доступа к WEBвеб-интерфейсу необходимо использовать 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

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

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

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

  • keepalived.conf — конфигурационный
  • файл Keppalived
  • файл 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-адрес, через который будет
  • получаться
  • предоставляться доступ к
  • WEB
  • веб-интерфейсу. Одинаковый на
  • всех серверах
  • всех серверах.

Далее перейдите на сервер, где будет находится находиться приложение ЕССМ с ролью слейв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помощи 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>/ — будет доступен WEB). Веб-интерфейс ЕССМ будет доступен.

Раскрыть
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сервер 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>/ — будет доступен WEB). Веб-интерфейс ЕССМ будет доступен.