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

Ключ

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

Оглавление

Введение

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

...

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

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

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

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

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

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

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

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

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

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

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

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

...

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

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

...

  • 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 или сервисов на сервере завершится с ошибкой.

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

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

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

  • ECCM_MASTER_HOST — содержит IP-адрес Master-ноды приложения ECCM;
  • ECCM_SLAVE_HOST — содержит IP-адрес Slave-ноды приложения ECCM;
  • ECCM_WITNESS_HOST — содержит IP-адрес Witness-ноды;
  • POSTGRES_MASTER_HOST — содержит IP-адрес Master-ноды кластера баз данных;
  • POSTGRES_SLAVE_HOST — содержит IP-адрес Slave-ноды кластера баз данных;
  • REDIS_PASSWORD — содержит пароль, используемый сервисом Redis для подключения к кластеру;
  • RABBITMQ_CLUSTER_PASSWORD — содержит пароль, используемый сервисом RabbitMQ для подключения к кластеру;
  • SENTINEL_PASSWORD — содержит пароль, используемый службой мониторинга для подключения к кластеру сервиса Redis и получения информации о состоянии серверов.
  • .
Примечание

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

...

Раскрыть
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. Пример установки утилиты был описан в пункте "Синхронизация файлов конфигурации".

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

...

Для доступа к веб-интерфейсу установите (при отсутствии) утилиту Keepalived, межсетевой экран iptables и стандартные утилиты Linux на каждой ноде с сервисами ECCM. Пример установки утилиты:

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

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

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

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

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

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

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

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

...

  • ;
  • tftp_snat;
  • sh — скрипт, отслеживающий работу TFTP с VIP;
  • eccm-tftp-snat.service и eccm-tftp-snat.timer — служба и таймер systemd, периодически синхронизирующие сетевые правила межсетевого экрана с текущим состоянием отказоустойчивой системы.   

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

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

...

  • ADDRESS — виртуальный IP-адрес, через который будет предоставляться доступ к веб-интерфейсу. Одинаковый на всех серверах

...

  • ;
  • PREFIX_LENGTH — длина префикса виртуального IP-адреса, например "32".

При помощи любого текстового редактора откройте файл eccm-tftp-snat.service и установите значения VIP_ADDRESS и INTERFACE_NAME в соответствии с ранее указанными в конфигурационном файле Keepalived. Далее перейдите на сервер, где будет находиться приложение Далее перейдите на сервер, где будет находиться приложение ECCM с ролью Slave, и измените ранее описанные параметры.

...

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

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

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

После настройки всех файлов скопируйте из директории keepalived/ в директорию /etc/systemd/system файлы eccm-tftp-snat.service и eccm-tftp-snat.timer:

Блок кода
languagebash
titleНа каждой ноде приложений: eccm/2.11/
cp eccm-tftp-snat.service eccm-tftp-snat.timer /etc/systemd/system/

Оставшиеся файлы скопируйте в директорию /etc/keepalived/:

Блок кода
languagebash
titleНа каждой ноде приложений: eccm/2.11/
cp keepalived.conf /etc/keepalived/
cp check_app.sh /etc/keepalived/
cp tftp_snat.sh /etc/keepalived/

Укажите корректные права доступа для скопированных файлов:

Блок кода
languagebash
titleНа каждой ноде приложений
chown root:root /etc/keepalived/check_app.sh /etc/keepalived/tftp_snat.sh
chown root:root /etc/systemd/system/eccm-tftp-snat.service /etc/systemd/system/eccm-tftp-snat.timer
chmod 755 /etc/keepalived/check_app.sh /etc/keepalived/tftp_snat.sh
chmod 644 /etc/systemd/system/eccm-tftp-snat.service /etc/systemd/system/eccm-tftp-snat.timer

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

Блок кода
languagebash
titleНа каждой ноде приложений
sudosystemctl enable keepalived
systemctl start keepalived
sudosystemctl daemon-reload
systemctl enable keepalived--now eccm-tftp-snat.timer

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

...

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

...

Во время запуска Master-узла подтвердите создание файла .env.personal и переменной ключа шифрования ENCRYPTION_SECRET_KEY. Описание файла и переменной приведено в разделе "Инструкция по установке и запуску".

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

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

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

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

...

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

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

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

Блок кода
languagebash
titleMaster-db: eccm/2.1011/
./compose-tools.sh --install # установит docker, если он отсутствует в системе
./compose-tools.sh --pull -s <POSTGRES_MASTER_HOST> --database-only --cluster master
Подсказка

Перед запуском самих контейнеров скрипт проверяет наличие файла .env.personal и в случае его отсутствия предлагает создать его в дополнительном диалоговом окне. При стандартных паролях система также предложит изменить их: вручную или с помощью автоматической генерации. После изменения паролей проект продолжит запуск.

Во время запуска Master-базы данных подтвердите создание файла .env.personal и переменной ключа шифрования ENCRYPTION_SECRET_KEY. Описание файла и переменной приведено в разделе "Инструкция по установке и запуску".

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

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

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

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

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

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

Блок кода
languagebash
titleMaster-app: eccm/2.11/
./compose-tools.sh --install # установит docker, если он отсутствует в системе
./compose-tools.sh --pull -s <ECCM_MASTER_HOST> --cluster master --database-host <POSTGRES_MASTER_HOST> --database-port <POSTGRES_MASTER_PORT> --backup-database-host <POSTGRES_SLAVE_HOST> --backup-database-port <POSTGRES_SLAVE_PORT>

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

Блок кода
languagebash
titleSlave-app: eccm/2.11/
./compose-tools.sh --install # установит docker, если он отсутствует в системе
./compose-tools.sh --pull -s <ECCM_SLAVE_HOST> --cluster slave --database-host <POSTGRES_MASTER_HOST> --database-port <POSTGRES_MASTER_PORT> --backup-database-host <POSTGRES_SLAVE_HOST> --backup-database-port <POSTGRES_SLAVE_PORT>

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

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

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