Развёртывание Comindware Business Application Platform в кластере
Экспериментальная функция
Представленная здесь функция находится на стадии разработки. См. «Поддержка экспериментальных функций».
Введение
Comindware Business Application Platform можно развернуть в кластере для увеличения производительности, улучшения отказоустойчивости и обеспечения бесперебойного функционирования ПО.
Кластерная конфигурация позволяет минимизировать время простоя системы и обеспечить непрерывность бизнес-процессов в случае отказа отдельных компонентов.
Здесь представлены инструкции по развёртыванию кластера Comindware Business Application Platform в простейшей минимальной конфигурации.
Инструкции по настройке стороннего ПО, такого как серверы журналирования, мониторинга и балансировки нагрузки, см. в документации к соответствующему ПО.
См. также общие рекомендации в статье «Обеспечение высокой доступности и отказоустойчивости Comindware Business Application Platform».
Кластеризация Comindware Business Application Platform
Comindware Business Application Platform использует в качестве распределённого хранилища данных ПО Apache Ignite.
В кластерной конфигурации Apache Ignite поддерживает автоматическое обнаружение узлов, распределение данных и вычислений, а также репликацию и резервирование данных. Это обеспечивает равномерное распределение нагрузки и доступность при отказе отдельных узлов.
Важными аспектами кластеризации Apache Ignite являются настройка топологии кластера, выбор подходящего алгоритма консенсуса для управления состоянием кластера и использование механизмов автоматического восстановления для минимизации времени простоя.
См. рекомендации по кластеризации в документации Apache Ignite (на английском языке).
Преимущества использования Apache Ignite в Comindware Platform
Apache Ignite является высокопроизводительной платформой для распределённого хранения и обработки данных и обладает следующими преимуществами:
- Высокая производительность: ускорение доступа к данным благодаря поддержке хранения данных в оперативной памяти и кэширования.
- Масштабируемость: возможность горизонтального масштабирования позволяет эффективно справляться с увеличением нагрузки и объёма данных.
- Отказоустойчивость: репликация данных и поддержка автоматического восстановления обеспечивают надёжность даже в случае отказа узлов.
- Поддержка ACID-транзакций: возможность работы с критически важными данными.
- Гибкость интеграции: наличие клиентских API для Java, .NET, Python и других языков позволяет легко интегрировать Apache Ignite в существующую инфраструктуру.
Рекомендации по повышению доступности и отказоустойчивости кластера
Применение следующих рекомендаций позволит улучшить производительность Comindware Business Application Platform и обеспечить стабильность работы системы даже при увеличении нагрузки или сбоях отдельных компонентов.
- Репликация данных: задайте количество резервных копий данных на нескольких узлах. См. «Настройка резервного копирования. Документация Apache Ignite»».
- Стратегии восстановления данных: настройте политику поведения при выпадении разделов. См. «Настройка восстановления разделов. Документация Apache Ignite»».
- Мониторинг состояния кластера:
- Настройте мониторинг производительности и нагрузки на узлы с помощью встроенных инструментов Apache Ignite или сторонних решений, таких как Zabbix.
- Настройте интеграцию с инструментами мониторинга (например, Prometheus или Grafana) для сбора метрик по работе кластера и своевременного реагирования на инциденты.
- Включите уведомления для критичных событий (например, падение узла или превышение времени отклика).
- Резервное копирование: настройте регулярное резервное копирование с использованием возможностей Apache Ignite Native Persistence.
- Оптимизация конфигурации: используйте оптимальные параметры хранения и обработки данных для минимизации задержек и повышения производительности.
- Географическая изоляция: для критически важных систем рекомендуется распределить узлы кластера по разным географическим регионам.
- Топология и консистентность: настройте базовую топологию кластера, чтобы минимизировать риски при добавлении новых узлов и восстановлении после сбоев. См. «Настройка базовой топологии. Документация Apache Ignite».
- Управление обнаружением узлов — чтобы повысить надёжности в кластере с большим количеством узлов, можно использовать Zookeeper Discovery SPI для уменьшения рисков, связанных с сетевой фрагментацией. См. «Настройка ZooKeeper Discovery. Документация Apache Ignite».
Конфигурация кластера
В минимальной конфигурации для распределения нагрузки (горизонтального масштабирования) кластер Comindware Business Application Platform может включать:
- сервер хранения данных на отдельной машине, к которому будут обращаться узлы кластера (для этого сервера необходимо обеспечить отказоустойчивость и высокую доступность);
- узлы кластера, на каждом из которых установлено ПО Comindware Business Application Platform одинаковой версии и развёрнут экземпляр ПО с одинаковым именем (
<instanceName>
); - сервер Elasticsearch на отдельной машине;
- сервер Apache Kafka на отдельной машине;
- балансировщик нагрузки на отдельной машине (при необходимости).
Порядок развёртывания кластера Comindware Business Application Platform
- Подготовьте серверы: убедитесь, что все машины, на которых будет развёрнут кластер, соответствуют системным требованиям, установите необходимое программное обеспечение. См. «Системные требования Comindware Business Application Platform».
- Установите и настройте компоненты: установите и настройте все необходимые компоненты, включая серверы приложений, базы данных, серверы журналов и балансировщики нагрузки.
- Конфигурация кластерного окружения: настройте кластерное окружение, включая конфигурацию балансировки нагрузки, резервирования компонентов и мониторинга.
- Тестирование и проверка: проведите тестирование развёрнутого кластера, чтобы убедиться в его работоспособности и отказоустойчивости.
- Документирование и обучение: задокументируйте все шаги и настройки, а также проведите обучение для администраторов кластера по его конфигурированию и поддержанию работоспособности.
Настройка сервера хранения данных (NFS)
Настройте сервер хранения данных для кластера Comindware Business Application Platform.
-
Перейдите в режим суперпользователя:
sudo -s
или
su -
-
Создайте директорию для хранения файлов экземпляра ПО:
mkdir /share
-
Установите NFS-сервер:
apt install nfs-kernel-server
systemctl enable nfs-kernel-server.service
-
Откройте файл
exports
для редактирования:nano /etc/exports
-
Добавьте в файл
exports
директиву, открывающую доступ к директории/share
для узлов кластера:/share <nodeIP>/<netMask>(rw,sync,no_subtree_check)
Здесь:
/share
— директория, к которой предоставляется общий доступ;<nodeIP>
— неизменная часть IP-адресов узлов кластера;<netMask>
— маска подсети.
Например:
192.168.1.100/32
(маска подсети255.255.255.255
): один компьютер с IP-адресом192.168.1.100
.192.168.1.0/24
(маска подсети255.255.255.0
): все компьютеры с IP-адресами от192.168.1.1
до192.168.1.254
.
-
Чтобы применить изменения, выполните следующую команду:
exportfs -a
-
Запустите NFS-сервер:
systemctl start nfs-kernel-server.service
-
Создайте директории для хранения данных экземпляра ПО:
mkdir -p /share/<instanceName>/Streams
mkdir -p /share/<instanceName>/Scripts
mkdir -p /share/<instanceName>/Temp
mkdir -p /share/<instanceName>/Localtemp
-
Настройте права доступа к созданным директориям:
chmod -R 777 /share/<instanceName>
chown -R nobody:nogroup /share
Развёртывание узлов кластера
На каждом узле кластера установите ПО Comindware Business Application Platform, разверните экземпляр ПО и установите бинарные пакеты Apache Ignite.
Установка ПО Comindware Business Application Platform и бинарных пакетов Apache Ignite
-
Перейдите в режим суперпользователя:
sudo -s
или
su -
-
Установите ПО и разверните экземпляр Comindware Business Application Platform одинаковой версии. См. «Установка, запуск, инициализация и остановка ПО».
- Скачайте дистрибутив Apache Ignite.
-
Распакуйте дистрибутив (например, в директорию
/usr/share/ignite
):unzip apache-ignite-2.16.0-bin.zip -d /usr/share/
mv /usr/share/apache-ignite* /usr/share/ignite
-
Задайте переменную среды
IGNITE_HOME
:export IGNITE_HOME=/usr/share/ignite
-
Скопируйте файл
Ignite.config
из директории экземпляра ПО в директорию/usr/share/ignite
:cp /var/www/<instanceName>/Ignite.config /usr/share/ignite/
-
Перейдите в следующую директорию:
cd /usr/share/ignite/bin
-
Откройте файл
control.sh
для редактирования:nano control.sh
-
Измените директиву
DEFAULT_CONFIG
:DEFAULT_CONFIG=config/Ignite.config
-
Проверьте получение списка узлов, зарегистрированных в базовой топологии:
bash control.sh --baseline
Примечание
Если работа экземпляра ПО приостановлена, запрос должен вернуть пустую топологию.
Установка NFS-клиента
-
Перейдите в режим суперпользователя:
sudo -s
или
su -
-
Установите службу NFS-клиента:
apt install nfs-common
-
Откройте файл
fstab
для редактирования:nano /etc/fstab
-
Добавьте в файл
fstab
следующую директиву (<serverIP>
— адрес NFS-сервера):<serverIP>:/share /mnt/share nfs auto 0 0
-
Смонтируйте диски и просмотрите содержимое директории NFS-сервера:
mount -a
ls -lh /mnt/share
-
Удостоверьтесь, что существует директория
/var/lib/comindware/<instanceName>
, и задайте её владельца:-
Astra Linux, Ubuntu, Debian (DEB-based)
chown -R www-data: /var/lib/comindware/<instanceName>
-
РЕД ОС, Rocky (RPM-based)
chown -R nginx: /var/lib/comindware/<instanceName>
-
Альт Сервер
chown -R _nginx: /var/lib/comindware/<instanceName>
-
-
Создайте символическую ссылку на директорию со скомпилированными скриптами на NFS-сервере:
ln -s /mnt/share/<instanceName>/Scripts /var/lib/comindware/<instanceName>/Database/Scripts
-
Откройте файл
comindware<instanceName>-env
для редактирования:nano /etc/sysconfig/comindware<instanceName>-env
-
Проверьте и при необходимости измените лимиты памяти в директиве
JVM_OPTS
— начальный и максимальный размер кучи и максимальный объём области прямого доступа к памяти, например:-Xms512m -Xmx4g -XX:MaxDirectMemorySize=1g
Настройка и запуск первого узла кластера
На машине с первым узлом кластера настройте доступ к файлам базы данных и экземпляр ПО.
Перенос базы данных на NFS-сервер
Если на первом узле был развёрнут экземпляр ПО с базой данных, перенесите её на NFS-сервер.
Для чистого экземпляра ПО данный этап не требуется.
-
Перейдите в режим суперпользователя:
sudo -s
или
su -
-
Создайте резервную копию экземпляра ПО.
-
Скопируйте резервную копию в директорию
/home/<username>
(<username>
— имя пользователя,<backupName>
— имя архива резервной копии,<pathToBackup>
— путь к архиву резервной копии):cp /<pathToBackup>/<backupName>.cdbbz /home/<username>
-
Перейдите в директорию
/home/<username>
:cd /home/<username>
-
Распакуйте архив резервной копии:
unzip -q <backupName>.cdbbz
-
Перенесите данные экземпляра ПО на NFS-сервер:
cp -r Scripts/* /mnt/share/<instanceName>/Scripts/
cp -r Streams/* /mnt/share/<instanceName>/Streams/
mv Database/* /var/lib/comindware/<instanceName>/Database/
rm -rf Database Scripts Streams
Настройка экземпляра ПО
-
Откройте файл
Ignite.config
для редактирования:nano /var/www/<instanceName>/Ignite.config
-
Отредактируйте файл
Ignite.config
по следующему образцу:<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<!-- Укажите IP-адрес, порт и диапазон портов первого узла -->
<property name="localAddress" value="<node_1_IP>" />
<property name="localPort" value="47510" />
<property name="localPortRange" value="9" />
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses">
<list>
<!-- Укажите IP-адреса всех узлов кластера -->
<value><node_1_IP>:47510..47519</value>
<value><node_2_IP>:47510..47519</value>
...
<value><node_N_IP>:47510..47519</value>
</list>
</property>
</bean>
</property>
</bean>
</property>
<property name="communicationSpi">
<bean class="org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi">
<property name="localPort" value="47101" />
<!-- Укажите IP-адрес первого узла -->
<property name="localAddress" value="<node_1_IP>" />
<property name="messageQueueLimit" value="1024" />
</bean>
</property>
...
<property name="dataRegionConfigurations">
<list>
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="warmUpConfiguration">
<bean class="org.apache.ignite.configuration.NoOpWarmUpConfiguration" />
</property>
<property name="name" value="Persistent" />
<property name="persistenceEnabled" value="true" />
<!-- Проверьте и при необходимости отредактируйте объём выделяемой памяти -->
<property name="initialSize" value="#{1024L * 1024 * 1024}" />
<property name="maxSize" value="#{4L * 1024 * 1024 * 1024}" />
<property name="pageEvictionMode" value="RANDOM_2_LRU" />
<property name="checkpointPageBufferSize" value="#{1024L * 1024 * 1024}" />
</bean>
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="name" value="InMemory" />
<property name="persistenceEnabled" value="false" />
<!-- Проверьте и при необходимости отредактируйте объём выделяемой памяти -->
<property name="initialSize" value="#{10 * 1024 * 1024}" />
<property name="maxSize" value="#{256 * 1024 * 1024}" />
</bean>
</list>
</property>
-
Откройте файл конфигурации экземпляра ПО для редактирования:
nano /usr/share/comindware/configs/instance/<instanceName>.yml
-
Отредактируйте файл конфигурации экземпляра ПО по следующему образцу (см. «Конфигурация экземпляра, компонентов ПО и служб. Настройка»):
isFederationAuthEnabled: 0
databasePath: /var/lib/comindware/<instanceName>/Database
configPath: /var/www/<instanceName>
# Укажите примонтированные директории NFS-сервера с файлами экземпляра ПО
backup.config.default.repository.type: LocalDisk
backup.config.default.repository.localDisk.path: /mnt/share/comindware/Backup
userStorage.type: LocalDisk
userStorage.localDisk.path: /mnt/share/<instanceName>/Streams
tempStorage.type: LocalDisk
tempStorage.localDisk.path: /mnt/share/<instanceName>/Temp
instanceName: <instanceName>
databaseName: <instanceName>
configName: <instanceName>
# Укажите для каждого узла уникальное имя, например общее имя и номер узла
nodeName: <instanceName><nodeNumber>
mq.server: <kafkaBrokerIP>:<kafkaBrokerPort>
mq.group: <instanceName>
manageAdapterHost: true
elasticsearchUri: <elasticsearchIP>:<elasticsearchPort>
version: <versionNumber>
-
Перейдите в режим суперпользователя:
sudo -s
или
su -
-
При наличии файла
Workers.config
удалите его:rm -f /var/www/<instanceName>/Workers.config
-
Запустите службу экземпляра ПО:
systemctl start comindware<instanceName>
-
В веб-браузере запустите сайт экземпляра ПО и выполните вход.
-
Откройте файл
Workers.config
для редактирования:nano /var/www/<instanceName>/Workers.config
-
Отредактируйте файл
Workers.config
по следующему образцу:<?xml version="1.0" encoding="utf-8"?>
<WorkerEngine xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-i>
<RebuildThreadWorker>false</RebuildThreadWorker>
<BackupSessionsQueue>true</BackupSessionsQueue>
<SessionManagerWorker>false</SessionManagerWorker>
<NotificationWorker>false</NotificationWorker>
<EmailListener>false</EmailListener>
<IndexTasksQueue>false</IndexTasksQueue>
<ProcessEngineQueueProcessing>false</ProcessEngineQueueProcessing>
<ProcessEngineTimerProcessing>false</ProcessEngineTimerProcessing>
<SyncThread>false</SyncThread>
<SwitchOnFullTextSearch>false</SwitchOnFullTextSearch>
<PerformanceMonitoring>false</PerformanceMonitoring>
<!-- Значение ConfigurationId должно совпадать на всех узлах -->
<ConfigurationId>XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</ConfigurationId>
</WorkerEngine>
-
Задайте владельца файла
Workers.config
:-
Astra Linux, Ubuntu, Debian (DEB-based)
chown www-data: /var/www/<instanceName>/Workers.config
-
РЕД ОС, Rocky (RPM-based)
chown nginx: /var/www/<instanceName>/Workers.config
-
Альт Сервер
chown _nginx: /var/www/<instanceName>/Workers.config
-
-
Перезапустите экземпляр ПО:
systemctl restart comindware<instanceName>
-
Настройте директорию
LocalTemp
. См. «Настройка директории LocalTemp после запуска узлов кластера».
Настройка и запуск второго и последующих узлов кластера
На машине со вторым и последующими узлами кластера настройте конфигурацию экземпляра ПО.
-
Перейдите в режим суперпользователя:
sudo -s
или
su -
-
Откройте файл
Ignite.config
для редактирования:nano /var/www/<instanceName>/Ignite.config
-
Скопируйте содержимое файла
Ignite.config
с первого узла. -
Укажите в директивах
localAddress
IP-адрес узла N (остальные директивы оставьте без изменений):<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<!-- укажите IP-адрес узла N -->
<property name="localAddress" value="<node_N_IP>" />
...
</bean>
</property>
<property name="communicationSpi">
<bean class="org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi">
<property name="localPort" value="47101" />
<!-- укажите IP-адрес узла N -->
<property name="localAddress" value="<node_N_IP>" />
<property name="messageQueueLimit" value="1024" />
</bean>
</property>
...
-
Откройте файл конфигурации экземпляра ПО для редактирования:
nano /usr/share/comindware/configs/instance/<instanceName>.yml
-
Скопируйте содержимое файла
<instanceName>.yml
с первого узла. -
В директиве
nodeName
укажите уникальное имя узла (например общее имя и номер узла):nodeName: <instanceName><nodeNumber>
-
Откройте файл
Workers.config
для редактирования:nano /var/www/<instanceName>/Workers.config
-
Скопируйте содержимое файла
Workers.config
c первого узла. - Удостоверьтесь, что значение директивы
<ConfigurationId>
совпадает на всех узлах. -
Запустите экземпляр ПО:
systemctl start comindware<instanceName>
-
В браузере запустите сайт экземпляра ПО.
-
На машине, на которой развёрнут первый узел, перейдите в директорию со скриптами Apache Ignite:
cd /home/username/ignite/bin
-
Выполняйте запрос топологии до тех пор, пока не отобразится сообщение о наличии стороннего узла:
bash control.sh --baseline
-
Выполните запрос на включение узла N в топологию (
<nodeNConsistenceId>
— идентификатор узла N в Ignite):bash control.sh --baseline add <nodeNConsistenceId> -y
-
На машине с узлом N кластера перейдите в директорию со скриптами Apache Ignite:
cd /home/username/ignite/bin
-
Выполните запрос топологии:
watch bash control.sh --baseline
-
Дождитесь включения узла N в топологию.
- Дождитесь отображения страницы входа в экземпляр ПО в браузере.
Настройка директории LocalTemp после запуска узлов кластера
При каждом запуске экземпляра ПО заново создаётся локальная папка /var/lib/comindware/<instanceName>/LocalTemp
и удаляется символьная ссылка на неё на NFS-сервере. После этого необходимо удалить директорию /var/lib/comindware/<instanceName>/LocalTemp
и пересоздавать символьную ссылку на директорию LocalTemp
на NFS-сервере.
-
На каждом узле удалите локальную директорию
LocalTemp
:rm -rf /var/lib/comindware/<instanceName>/LocalTemp
-
С любого узла создайте директорию
LocalTemp
на NFS-сервере:mkdir /mnt/share/<instanceName>/LocalTemp
-
На каждом узле назначьте владельца директории
LocalTemp
на NFS-сервере:-
Astra Linux, Ubuntu, Debian (DEB-based)
chown -R www-data:www-data /mnt/share/<instanceName>/LocalTemp
-
РЕД ОС, Rocky (RPM-based)
chown -R nginx:nginx /mnt/share/<instanceName>/LocalTemp
-
Альт Сервер
chown -R _nginx:_nginx /mnt/share/<instanceName>/LocalTemp
-
-
На каждом узле создайте символьную ссылку на директорию
LocalTemp
с NFS-сервера:ln -s /mnt/share/<instanceName>/LocalTemp /var/lib/comindware/<instanceName>/LocalTemp
Эта статья была полезна 1 чел.