Развертывание Inspark Core на выделенные серева должна производится в следующем порядке:
Каждый модуль может устанавливаться на собственный сервер, рекомендации по конфигурациям см. в разделе Масштабируемость и производительность платформы.
Ниже в таблице даны сведения о TCP/IP портах, которые требуются для взаимодействия модулям платформы. Значение номеров портов приведены по умолчанию и могу быть изменены на этапе установки ПО.
N п/п | ПО Inspark Core | Требование к портам | Кто использует | Уровень взаимодействия |
---|---|---|---|---|
1 | PostgresSQL | 5432 | Все модули ядра | внутренний обмен ядра |
2 | Redis | 6379 | Все модули ядра | внутренний обмен ядра |
3 | Artemis Apache | 61616 | Все модули ядра | внутренний обмен ядра |
4 | Cassandra | 9042 | Все модули ядра | внутренний обмен ядра |
5 | engine | 8746 | Внешняя система мониторинга | |
6 | periodic | 8752 | Внешняя система мониторинга | |
7 | notifier | 8549 | Внешняя система мониторинга | |
8 | webservices | 8080 1883/8883 |
Внешняя система мониторинга, proxy модуль отправка данных по подписке на внешний MQTT брокер |
|
9 | proxy | 80/443 | внешние клиенты | внешние соединения к платформе |
Приведены инструкции по установке на ОС Debian/Ubuntu/Astra Linux с JDK версии 11 или выше.
Платформа использует несколько видов хранилищ:
Платформа в качестве оперативного хранилища использует реляционную СУБД PostgreSQL 14.
Настройка сервера (минимально необходимые):
/etc/sysctl.conf
# отключить подкачку
vm.swappiness = 0
# увеличить дескрипторы
fs.file-max = 655350
выполните
sysctl -p
В файле /etc/security/limits.conf
# Core dump size
* - core unlimited
# Open files
* - nofile 655350
# Processes
* - nproc 8192
Создаем лист с репозитраерием:
RELEASE=$(lsb_release -cs)
echo "deb http://apt.postgresql.org/pub/repos/apt/ ${RELEASE}"-pgdg main | sudo tee /etc/apt/sources.list.d/PostgreSQL.list
Импортировать ключ репозитория:
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
и обновить список пакетов:
apt-get update
Установить postgresql:
apt-get install postgresql-14
Установить расширение PostGIS:
apt update
apt install postgresql-14-postgis-3
Конифгураця Postgres расположена в /etc/postgresql/14/main/postgresql.conf
офф док.
# шифрование пароля MD5, совместимое с semnext
password_encryption = md5
# прослушивание интерфейсов, без IpV6 желательно прописывать так: listen_addresses = '0.0.0.0'
listen_addresses = '0.0.0.0'
# максимальное количество подключений, должно быть на 3 подключения больше чем используемые приложениями максимумы пулов (в конфигах приложений), не должно быть слишком большим
max_connections = 200
# буферы, примерно 1/3 доступной оперативной памяти сервера (для сервера где только БД)
shared_buffers = 2048MB
# буферы сортировки и проч
temp_buffers = 16MB
# память процесса
work_mem = 8MB
# память обслуживания (256 это минимум, для серверов с достаточно большими объемами (более 8гиг) желательно выделить 512MB или 1024MB)
maintenance_work_mem = 256MB
# потоки отправки для репликации (если репликации нет - крайне желательно отключить)
max_wal_senders = 0
# уровень журналов предварительной записи, влияние на IO крайне значительное, чем меньше тем лучше
wal_level = minimal
# размеры журналов увеличить, особенно актуально на сервере гда измерения сохраняются в постгрес а не в кассандру (переключение журнала сложная и затратная процедура, переключения должны быть реже)
max_wal_size = 1GB
min_wal_size = 80MB
Настройки доступа храняться в /etc/postgresql/14/main/pg_hba.conf
. Необходимо разрешить доступ к БД с сервера приложений и хранилища MongoDB, добавив следующие строчки:
host all all IP-сервера приложений/маска md5
host all all IP-хранилища Моngo DB/маска md5
Создаем выделенный том для БД. Например, диск /dev/sdb1
c каталогом '/pgstore'
, для этого:
mkdir /pgstore
/etc/fstab
UUID=4b2a649f-9668-4637-9d2c-c1d5eaf4fad1 /pgstore ext4 errors=remount-ro 0 1
Выполнить
mount /pgstore
изменить владельца каталога:
sudo chown -R postgres:postgres /pgstore
Перейти под пользователя postgres:
sudo su - postgres
Удаляем кластер базы данных, который был создан по умолчанию при установке, и останавливаем postgresql:
pg_dropcluster --stop 14(версия кластера) main(имя кластера, получить можно pg_lsclusters)
sudo systemctl stop postgresql@14-main
logout
Создаем новый кластер и запускаем службу СУБД:
sudo su - postgres
pg_createcluster -d /pgstore/14 --locale ru_RU.UTF-8 --start 14 main
logout
sudo systemctl daemon-reload
sudo systemctl start postgresql@14-main
Создаем БД semdb
Пользователем postgres выполнить psql -U postgres -h
и там уже:
CREATE DATABASE SEMDB WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'ru_RU.UTF-8' LC_CTYPE = 'ru_RU.UTF-8';
ALTER DATABASE SEMDB OWNER TO postgres;
Подключиться к БД SEMDB и включить в ней расширение:
psql -U postgres -h localhost semdb
semdb> create extension postgis;
semdb> select postgis_version();
Актуальные способы установки доступны по ссылке.
Добавляем репозиторий
echo "deb https://debian.cassandra.apache.org 41x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
Добавляем ключи
curl https://downloads.apache.org/cassandra/KEYS | sudo apt-key add -
Обновляем список пакетов
sudo apt update
Устанавливаем БД Cassandra
sudo apt-get install cassandra
После установки БД необходимо изменить способ доступа к БД. В директории /etc/cassandra отредактировать файл cassandra.yaml
Изменить
authenticator: AllowAllAuthenticator
На
authenticator: PasswordAuthenticator
По умолчанию при инсталляции системы создается пользователь cassandra
с паролем cassandra
. Для доступа в консоль администрирования БД введите
cqlsh -u cassandra -p cassandra
После входа и авторизации в консоли администрирования мы можем создать пользователя
CREATE USER worker WITH PASSWORD 'worker';
В случае если планируется использовать более 1 экземпляра БД, их необходимо объединить в кластер БД.
В файле cassandra.yaml
необходимо внести следующие изменения:
isten_address: IP-адрес где установлена БД
rpc_address: IP-адрес где установлена БД
seeds: Указать перечисление IP-адресов которые должны входить в кластер.
Примечание: На каждом сервере необходимо настраивать seeds
следующим образом: Сначала указываем IP:порт текущего сервера, далее перечисление других серверов которые должны входить в кластер.
Пример:
- seeds: "2.2.2.2:7000(IP-адрес конфигурируемого сервера),1.1.1.1:7000(перечисление остальных IP-адресов),4.4.4.4:7000,3.3.3.3:7000"
В завершении настроек для кластера необходимо создать пространство ключей
CREATE KEYSPACE sem WITH REPLICATION = {'class':'NetworkTopologyStrategy', 'datacenter1' : N};
В случае если в кластере будет находится всего один сервер то N - 1, если же в кластере будет 2 и более серверов то N - 2
Обновляем список пакетов репозиториев
sudo apt update
Устанавливаем redis-server
sudo apt install -y redis-server
Проверьте подключение к базе. По умолчанию для доступа к базе пароль не требуется:
redis-cli
127.0.0.1:6379> PING
Добавьте сервис в список приложений, запускаемых автоматически:
sudo systemctl enable redis-server
Создаем служебных пользователей artemis
sudo groupadd artemis && \
sudo useradd -s /bin/false -g artemis -d /opt/artemis artemis
Переходим в директорию /opt и скачиваем Artemis 2.16.0
wget https://archive.apache.org/dist/activemq/activemq-artemis/2.16.0/apache-artemis-2.16.0-bin.tar.gz
Разархивируем скачанных архив и создадим на него символьную ссылку
sudo tar -xvzf apache-artemis-2.16.0-bin.tar.gz
sudo ln -s /opt/apache-artemis-2.16.0 ./artemis
Изменяем права доступа для разархивированной папки
sudo chown -RH artemis:artemis /opt/artemis
sudo chmod o+x /opt/artemis/bin/
Переходим в директорию /var/lib и в ней выполняем
sudo /opt/artemis/bin/artemis create artemis-broker
Во время создания брокера необходимо будет задать имя пользователя и пароль для доступа к брокеру.
После установки брокера по умолчанию доступ к web-консоли будет только на localhost:8161
, для того чтобы получить удаленный доступ к консоли необходимо будет отредактировать файлы bootstrap.xml
и jolokia-access.xml
которые находятся по пути /var/lib/test-broker/etc/
В файле boostrap.xml
замените в тегах :
<web bind="http://localhost:8161" path="web">
На
<web bind="http://0.0.0.0:8161" path="web">
Далее в файле jolokia-access.xml
замените следующую строку:
<allow-origin>*://localhost*</allow-origin>
На
<allow-origin>*://*</allow-origin>
Также необходимо создать файл broker.xml
в директории /var/lib/test-broker/etc/ который содержит в себе информацию о очередях.
Пример настроенного файла доступен по ссылке.
После завершения настроек необходимо создать службу SystemD для управления приложением. По пути /etc/systemd/system создаем файл artemis.service
и добавляем туда следующий код:
[Unit]
Description=Apache ActiveMQ Artemis
After=network.target
[Service]
Type=forking
User=artemis
Group=artemis
ExecStart=/var/lib/artemis-broker/bin/artemis-service start
ExecStop=/var/lib/artemis-brokerr/bin/artemis-service stop
UMask=0007
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target
После создания сервиса обновите список сервисов:
sudo systemctl daemon-reload
Сервис запускается один раз и создает в БД таблицы, связи и т.д
Запускается как java-приложение: java -jar migrator.jar
Логи формируются в директории logs, с ротацией.
Настройки содержатся в файле application.yml
который должен располагаться в директории запуска migrator.jar
Основные настройки - это параметры подключения к БД postgres:
spring:
datasource:
url: jdbc:postgresql://192.168.1.13:5432/semdb?currentSchema=sem
username: postgres
password: postgres
И настройки подключения к Cassandra, задать имя датацентра, ноды и учетные данные для подключения:
# хранилище sem-next
store:
# тип хранилища (POSTGRES, CASSANDRA)
type: CASSANDRA
# настройки, специфичные для хранилища CASSANDRA
cassandra:
# Ноды кассандры для подключения, одна или более. Формат host1:port1,host2:port2,.... Пример 192.168.0.14:9042.
nodes: 192.168.0.14:9042
# Имя датацентра кассандры (см nodetool status)
datacenter: datacenter1
# имя пользователя для авторизованного доступа
username: cassandra
# пароль пользователя для авторизованного доступа
password: cassandra
В случае если Cassandra не используется следует выбрать тип хранилища POSTGRES:
# хранилище sem-next
store:
# тип хранилища (POSTGRES, CASSANDRA)
type: POSTGRES
Перед установкой потребуется создать служебного пользователя для сервера приложений
sudo groupadd -r wildfly sudo useradd -r -g wildfly -d /opt/wildfly -s /sbin/nologin wildfly
Переходим в директорию /opt и скачиваем WildFly
wget https://download.jboss.org/wildfly/20.0.1.Final/wildfly-20.0.1.Final.tar.gz
Разархивируем сервер приложений
tar xf /opt/wildfly-20.0.1.Final.tar.gz -C /opt/
Создаем символьную ссылку на директорию
ln -s /opt/wildfly-20.0.1.Final /opt/wildfly
Изменяем владельца директории
chown -RH wildfly:widlfly /opt/wildfly
Создаем каталог, в котором будет храниться файл конфигурации WildFly
mkdir -p /etc/wildfly
Копируем файл конфигурации в созданный каталог
cp /opt/wildfly/docs/contrib/scripts/systemd/wildfly.conf /etc/wildfly/
Редактируем файл конфигурации
WILDFLY_CONFIG=standalone-full.xml
WILDFLY_MODE=standalone
WILDFLY_BIND=0.0.0.0
Этот файл позволяет указать режим WildFly и адрес привязки. По умолчанию WildFly будет работать в автономном режиме и будет прослушивать все интерфейсы. Вы можете редактировать файл в соответствии с вашими потребностями.
Затем копируем launch.sh
скрипт WildFly в /opt/wildfly/bin/ каталог
cp /opt/wildfly/docs/contrib/scripts/systemd/launch.sh /opt/wildfly/bin/
Скрипты внутри bin
каталога должны иметь флаг исполняемого файла
sh -c 'chmod +x /opt/wildfly/bin/*.sh'
Копируем файл модуля systemd
с именем в /etc/systemd/system/ каталог
cp /opt/wildfly/docs/contrib/scripts/systemd/wildfly.service /etc/systemd/system/
После создания сервиса обновите список сервисов
sudo systemctl daemon-reload
Установка модулей осуществляется путем копированием файла sem-restservices.war
в директорию /opt/wildfly/standalone/deployments
Создать директорию /opt/sem-engine и поместить в нее sem-engine.jar
, application.yml
mkdir /opt/sem-engine
cp sem-engine.jar /opt/sem-engine
cp application.yml /opt/sem-engine
Создать символьную ссылку в директории /etc/init.d
cd /etc/init.d
chmod +x /opt/sem-engine/sem-engine.jar
ln -s /opt/sem-engine/sem-engine.jar sem-engine
Перечитать списко сервисов linux
systemctl daemon-reload
Запуск и остановку сервиса можно осуществлять стандартными командами, т.е.
service sem-engine start
service sem-engine status
service sem-engine stop
Для установки лимитов памяти нужно создать в директории sem-engine файл конфигурации sem-engine.conf
и задать в нем нужные лимиты:
JAVA_OPTS="-Xms512m -Xmx1024m"
Создать директорию /opt/sem-handler и поместить в нее sem-periodic.jar
, application.yml
mkdir /opt/sem-periodic
cp sem-periodic.jar /opt/sem-periodic
cp application.yml /opt/sem-periodic
cd sem-periodic.conf /opt/sem-periodic
Создать символьную ссылку в директории /etc/init.d
cd /etc/init.d
chmod +x /opt/sem-periodic/sem-periodic.jar
ln -s /opt/sem-periodic/sem-periodic.jar sem-periodic
Перечитать списко сервисов linux
systemctl daemon-reload
Запуск и остановку сервиса можно осуществлять стандартными командами, т.е.
service sem-periodic start
service sem-periodic status
service sem-periodic stop
Для установки лимитов памяти нужно создать в директории sem-periodic.jar файл конфигурации sem-handler.conf и задать в нем нужные лимиты:
JAVA_OPTS="-Xms512m -Xmx1024m"
Создать директорию /opt/semona-notifier и поместить в нее sem-notifier.jar
, application.yml
, firebase.json
mkdir /opt/semona-notifier
cp sem-notifier /opt/semona-notifier
cp application.yml /opt/semona-notifier // основной файл настройки
cp firebase.json /opt/semona-notifier // для push уведомлений (необязательный)
Создать директорию для логов:
mkdir -p /var/log/semona-notifier
Настроить к ней путь в конфиге application.yml
:
logging:
path: /var/log/semona-notifier
Создать символьную ссылку в директории /etc/init.d
cd /etc/init.d
chmod +x /opt/semona-notifier/sem-notifier.jar
ln -s /opt/semona-notifier/sem-notifier.jar notifier
Перечитать список сервисов linux
systemctl daemon-reload
Запуск и остановку сервиса можно осуществлять стандартными командами, т.е.
service notifier start
service notifier status
service notifier stop
java -jar sem-notifier.jar
Настройки храняться в файле application.yml
, следует настроить перед запуском.
spring:
# профили логирования, console - вывод в консоль, file - вывод в файл
profiles:
active: console
# подключение к БД для сохранения лога отправки NotifyLog
datasource:
url: jdbc:postgresql://12.12.12.12:5432/semtest?currentSchema=sem
driver-class-name: org.postgresql.Driver
username: postgres
password: postgres
hikari:
# размер пула конектов
maximum-pool-size: 30
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
jpa:
database: default
hibernate:
ddl-auto: validate
generate-ddl: false
show-sql: false
# уровни логирования модулей
## INFO, ERROR, TRACE
logging:
level:
root: INFO
notification-listener: INFO
expired-listener: INFO
notification-sender: INFO
emulator: INFO
# подключение к очередям JMS
artemis:
broker-url: tcp://12.12.12.12:61616
user: artemis
password: artemis
queue:
# настройки очереди получения уведомлений
# в artemis jms в файлк broker.xml должна быть настройка для уведомлений
notify:
# адрес очереди
destination: jms.queue.Notify
# количество потоков мин-макс
concurrency: 8-50
# настройки очереди получения просроченных уведомлений
expired:
# адрес очереди
destination: jms.queue.ExpiredNotifications
# количество потоков мин-макс
concurrency: 2-30
# эмулятор, предназначен для проверки работоспособности, в прод.среде должен быть выключен
emulator:
enabled: false
# настройки отправки сообщений
sender:
# режим тестовой отправки, используется для тестирования, вместо реальной отправки логирует сообщения в лог
test-mode: false
Выполняется путем изменения файла broker.xml apache artemis
<address-setting>
....
<address-setting match="jms.queue.Notify">
<!-- через час сообщения устаревают и переносятся в очередь ExpiredNotifications -->
<expiry-address>jms.queue.ExpiredNotifications</expiry-address>
<expiry-delay>3600000</expiry-delay>
<!-- повторная отправка через: 20 sec, 30 sec, 45 sec, ..., 300 sec -->
<redelivery-delay>20000</redelivery-delay>
<redelivery-delay-multiplier>1.5</redelivery-delay-multiplier>
<max-redelivery-delay>300000</max-redelivery-delay>
<!-- 50 неудачных отправок достаточно будет -->
<max-delivery-attempts>50</max-delivery-attempts>
....
</address-setting>
<address>
....
<address name="jms.queue.Notify">
<anycast>
<queue name="jms.queue.Notify"/>
</anycast>
</address>
<address name="jms.queue.ExpiredNotifications">
<anycast>
<queue name="jms.queue.ExpiredNotifications"/>
</anycast>
....
</address>
(установка nginx) + накатка конфига