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

Стандартная схема отказоустойчивой системы представляет собой кластер, состоящий из трех узлов: Master-, Slave-, Witness-ноды. Взаимодействие с веб-интерфейсом происходит при помощи VIP, который находится на текущем мастере Keepalived. За состоянием баз данных PostgreSQL и Redis, а также очередью сообщений RabbitMQ наблюдает Witness-нода: она же переключает мастерство Repmgr и Redis Sentinel при необходимости.
| Процесс переключения мастерства в отказоустойчивой системе подробнее описан в разделе "Переключение мастерства в отказоустойчивой системе". |
Схема отказоустойчивой системы при запуске БД на отдельных серверах
Схема отказоустойчивой системы с запуском базы данных на отдельных серверах представляет собой совокупность двух кластеров:
Кластер баз данных включает три сервера:
В кластере приложений ECCM запускается с использованием внешних баз данных. Для доступа к веб-интерфейсу используйте VIP, который находится на текущем мастере Keepalived.
|
Перед запуском ECCM в отказоустойчивой системе по любой из ранее представленных схем подготовьте конфигурационные и вспомогательные файлы.
Перед запуском ECCM в отказоустойчивой системе подготовьте конфигурационный файл .env.cluster, который находится в корневой директории проекта.
Назначение переменных в конфигурационном файле .env.cluster описано в разделе "Инструкция по установке и запуску". |
Откройте файл .env.cluster на Master-ноде при помощи любого текстового редактора и для минимальной настройки назначьте следующие переменные:
ECCM_MASTER_HOST — содержит IP-адрес Master-ноды;ECCM_SLAVE_HOST — содержит IP-адрес Slave-ноды;ECCM_WITNESS_HOST — содержит IP-адрес Witness-ноды;RABBITMQ_CLUSTER_PASSWORD — содержит пароль, используемый сервисом RabbitMQ для подключения к кластеру;REDIS_PASSWORD — содержит пароль, используемый сервисом Redis для подключения к кластеру;SENTINEL_PASSWORD — содержит пароль, используемый службой мониторинга для подключения к кластеру сервиса Redis и получения информации о состоянии серверов.Если не указать перечисленные переменные, запуск базы данных PostgreSQL или сервисов на сервере завершится с ошибкой. |
Подготовка конфигурационного файла для запуска ECCM при запуске БД на отдельных серверахОткройте файл
|
Все конфигурационные файлы должны быть одинаковыми на всех нодах кластера. Для синхронизации файлов конфигурации между серверами можно воспользоваться утилитой rsync. Пример установки утилиты:
sudo apt install rsync |
Для передачи файлов конфигурации кластера используйте следующую команду:
sudo rsync -av --delete --rsync-path="sudo rsync" <полный путь до директории eccm>/.env.cluster <имя пользователя сервера>@<IP-адрес сервера назначения>:<полный путь до директории eccm> |
После выполнения команды для каждого сервера назначения файл конфигурации будет соответствовать настроенному ранее.
Репликация между базами данных 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/:
cd root-ca-generator && ./generate-cluster-cert.sh |
Состав директории cluster-cert/:
ca.crt — корневой CA-сертификат;cluster.crt — сертификат кластера, подписанный CA;cluster.key — приватный ключ кластера.При запуске ECCM будет также сгенерирован Java Truststore: Java-сервисы ECCM не читают ca.crt напрямую — они используют Java KeyStore в формате PKCS12. Сервис truststore-initer автоматически конвертирует ca.crt из cluster-cert/ в truststore.p12 и сохраняет его.
Использование корпоративного CAЕсли предусмотрен корпоративный CA, переместите все файлы безопасного соединения в директорию
|
Для синхронизации файлов из директории cluster-cert/ между узлами отказоустойчивой системы рекомендуем воспользоваться утилитой rsync. Пример установки утилиты приведён в разделе "Синхронизация файлов конфигурации".
Для передачи сертификатов кластера используйте следующую команду:
sudo rsync -av --delete --rsync-path="sudo rsync" <полный путь до директории eccm>/cluster-cert/* <имя пользователя сервера>@<IP-адрес сервера назначения>:<полный путь до директории eccm>/cluster-cert |
После выполнения команды для каждого сервера назначения сертификаты на узлах будут соответствовать друг другу.
Для доступа к веб-интерфейсу установите утилиту Keepalived на каждой ноде с сервисами ECCM. Пример установки утилиты:
sudo apt install keepalived |
В директории keepalived подготовлены конфигурационные файлы для утилиты:
keepalived.conf — конфигурационный файл Keepalived, настраивающий VRRP для отказоустойчивой системы;check_app.sh — скрипт, проверяющий состояние сервисов ECCM. При сбое работы сервиса снижает приоритет сервера для последующей смены мастерства.После установки скопируйте все конфигурационные файлы из директории keepalived/ в директорию /etc/keepalived/:
cp ./keepalived/* /etc/keepalived/ |
Убедитесь, что у скрипта check_app.sh есть права на выполнение. Если прав нет, используйте следующую команду:
chmod 755 /etc/keepalived/check_app.sh |
При помощи любого текстового редактора откройте конфигурационный файл /etc/keepalived/keepalived.conf. На сервере, где будет находиться приложение ECCM с ролью мастер, измените следующие параметры:
INTERFACE_NAME — сетевой интерфейс, на котором будет находиться ECCM. Выставляется индивидуально для каждого сервера;ROUTER_ID — идентификатор виртуального маршрутизатора, принимающий значения от 0 до 255. Одинаковый на всех серверах;PRIORITY — приоритет текущей ноды, принимающий значения от 0 до 255. Это значение должно быть больше параметра weight (в стандартной конфигурации weight = -10), в ином случае мастерство переключаться не будет;PASSWORD — пароль VRRP-аутентификации. Одинаковый на всех серверах;VIP_IP_ADDRESS — виртуальный IP-адрес, через который будет предоставляться доступ к веб-интерфейсу. Одинаковый на всех серверах.Далее перейдите на сервер, где будет находиться приложение ECCM с ролью Slave, и измените ранее описанные параметры.
Если необходимо, чтобы при переключении мастерства и восстановлении исходного мастера мастерство возвращалось исходному — на Master-узле выставьте приоритет на 1 больше, чем на Slave-узле. Если такая опция не нужна — установите одинаковое значение на каждом узле.
| Процесс переключения мастерства в отказоустойчивой системе описан в разделе "Переключение мастерства в отказоустойчивой системе". |
Рекомендуемые значения:
После этого запустите Keepalived на каждом узле. Пример запуска и добавления в автозагрузку:
sudo systemctl start keepalived sudo systemctl enable keepalived |
Убедитесь, что роли между узлами были распределены, при помощи следующей команды:
sudo systemctl status keepalived |
В журнале должны отобразиться записи: Entering BACKUP STATE и Entering MASTER STATE.
Для запуска ECCM в отказоустойчивой системе при стандартной схеме перейдите на сервер будущего Master-узла. Запустите мастер с помощью bash-скрипта, указав необходимые параметры. Пример запуска:
./compose-tools.sh --install # установит docker, если он отсутствует в системе ./compose-tools.sh -s <MASTER_HOST> --cluster master |
Перед запуском самих контейнеров скрипт проверяет наличие файла |
Во время запуска Master-узла подтвердите создание файла .env.personal и переменной ключа шифрования ENCRYPTION_SECRET_KEY. Описание файла и переменной приведено в разделе "Инструкция по установке и запуску".
Конфигурационный файл .env.personal с паролями должен быть одинаковым на всех нодах кластера. Для синхронизации файла конфигурации между серверами можно воспользоваться утилитой rsync. Для передачи файла .env.personal после успешного запуска Master-узла используйте следующую команду:
sudo rsync -av --delete --rsync-path="sudo rsync" <полный путь до директории eccm>/.env.personal <имя пользователя сервера>@<IP-адрес сервера назначения>:<полный путь до директории eccm> |
После выполнения команды для каждого сервера назначения файл конфигурации будет соответствовать настроенному ранее.
После того как мастер будет инициализирован и готов к работе, перейдите на сервер Slave-узла. Запустите Slave с помощью bash-скрипта, указав необходимые параметры. Пример запуска:
./compose-tools.sh --install # установит docker, если он отсутствует в системе ./compose-tools.sh -s <SLAVE_HOST> --cluster slave |
Параллельно с запуском Slave-узла запустите Witness-узел. Подключитесь к Witness-ноде и запустите Witness с помощью bash-скрипта, указав необходимые параметры. Пример запуска:
./compose-tools.sh --install # установит docker, если он отсутствует в системе ./compose-tools.sh -s <WITNESS_HOST> --cluster witness |
После инициализации перейдите по ранее установленному VIP-адресу (имеет формат http://<VIP>/). Веб-интерфейс ECCM будет доступен.
Запуск ECCM в отказоустойчивой системе при запуске БД на отдельных серверахДля запуска ECCM в отказоустойчивой системе при запуске БД на отдельном сервере перейдите на сервер будущей Master-базы данных. Запустите Master-базу данных при помощи следующей команды:
Во время запуска Master-базы данных подтвердите создание файла Конфигурационный файл
После выполнения команды для каждого сервера назначения файл конфигурации будет соответствовать настроенному ранее. После того как база данных на Master-db будет проинициализирована, перейдите на сервер Slave-db. Запустите Slave-базу данных:
После полной инициализации баз данных Master-db и Slave-db перейдите на сервер Master-ноды приложения ECCM. Запустите мастер с помощью bash-скрипта, указав необходимые параметры. Пример запуска:
Перейдите на сервер Slave-узла. Запустите Slave с помощью bash-скрипта, указав необходимые параметры. Пример запуска:
После полной инициализации кластера приложений перейдите на сервер Witness-узла. Запустите Witness с помощью bash-скрипта, указав необходимые параметры. Пример запуска:
После инициализации перейдите по ранее установленному VIP-адресу (имеет формат |