Экспериментальная функция
Представленная здесь функция находится на стадии разработки. См. «Поддержка экспериментальных функций».
Введение
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-serversystemctl 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>/Streamsmkdir -p /share/<instanceName>/Scriptsmkdir -p /share/<instanceName>/Tempmkdir -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 -als -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: 0databasePath: /var/lib/comindware/<instanceName>/DatabaseconfigPath: /var/www/<instanceName># Укажите примонтированные директории NFS-сервера с файлами экземпляра ПОbackup.config.default.repository.type: LocalDiskbackup.config.default.repository.localDisk.path: /mnt/share/comindware/BackupuserStorage.type: LocalDiskuserStorage.localDisk.path: /mnt/share/<instanceName>/StreamstempStorage.type: LocalDisktempStorage.localDisk.path: /mnt/share/<instanceName>/TempinstanceName: <instanceName>databaseName: <instanceName>configName: <instanceName># Укажите для каждого узла уникальное имя, например общее имя и номер узлаnodeName: <instanceName><nodeNumber>mq.server: <kafkaBrokerIP>:<kafkaBrokerPort>mq.group: <instanceName>manageAdapterHost: trueelasticsearchUri: <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с первого узла. -
Укажите в директивах
localAddressIP-адрес узла 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.configc первого узла. - Удостоверьтесь, что значение директивы
<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