Инсталляция хранилищ
Ниже приведены инструкции по установке всех типов хранилищ для платформы. Пункт по установке Cassandra-хранилищ может быть опциональным, в зависмости от выбранного варианта развертывания.
Все остальные хранилища - обязательны. Инструкции не описывают кластерные конфигурации, только типовое развертывание.
СУБД PostgreSQL
Платформа в качестве оперативного хранилища использует реляционную СУБД PostgreSQL версии от 14 до 17.
СУБД PostgreSQL является обязательным хранилищем. В БД хранится мета и справочная информация. Если не используется Cassandra, в БД хранятся измерения.
Установка PostgreSQL
Шаг 1. Настройка ОС (минимально необходимые для любых версий ОС):
/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Шаг 2. Генерируем русскую локаль на машине, для корректной работы БД с кириллицей
sudo locale-gen ru_RU && sudo locale-gen ru_RU.UTF-8 && sudo update-localeШаг 3. Создаем лист с репозиторием:
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 updatesudo apt install -y postgresql-common && sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.shШаг 4. Установить postgresql:
apt-get install postgresql-14sudo apt install postgresql-15 -yШаг 5. Установить расширение PostGIS:
apt update
apt install postgresql-14-postgis-3sudo apt install postgresql-15-postgis-3 -yСоздание БД
Шаг 6. Создаем выделенный том для БД. Например, диск /dev/sdb1 c каталогом '/pgstore'
sudo mkdir -p /pgstore && sudo chown postgres:postgres /pgstore && sudo chmod 0700 /pgstoreШаг 7. Перейти под пользователя postgres:
sudo su - postgresУдаляем кластер базы данных, который был создан по умолчанию при установке, и останавливаем postgresql:
pg_dropcluster --stop 14(версия кластера) main(имя кластера, получить можно pg_lsclusters)
sudo systemctl stop postgresql@14-mainШаг 8. Создаем новый кластер и запускаем службу СУБД
pg_createcluster -d /pgstore/14 --locale ru_RU.UTF-8 --start 14 main sudo pg_createcluster -d /pgstore/15 --locale ru_RU.utf8 --start 15 mainШаг 9. Копируем кофинг-файл подключений к БД
Обязательные настройки приведены ниже, в разделе Настройка PostgreSQL
sudo cp ~/pg_hba.conf /etc/postgresql/<версия>/main/pg_hba.confШаг 10. Копируем конфигурацию СУБД
Рекомендуемые настройки приведены ниже, в разделе Настройка PostgreSQL
sudo cp ~/inspark-files/postgresql.conf /etc/postgresql/<версия>>/main/postgresql.confШаг 11. Перезапускаем postgres
sudo systemctl restart postgresql.serviceШаг 12. Создаем пользователя postgres
psql -U postgres -c "ALTER USER postgres WITH PASSWORD 'postgres';"Шаг 13. Создаем БД semdb
psql -U postgres -c "CREATE DATABASE SEMDB WITH TEMPLATE = template0;"
psql -U postgres -c "ALTER DATABASE SEMDB OWNER TO postgres;"Шаг 14. Создаем БД wist
::: tips
БД wist предназначена для магазина виджетов и может быть развернута на отдельной СУБД, мы привели ее создание для примера.
:::
psql -U postgres -c "CREATE DATABASE WIST WITH TEMPLATE = template0;"
psql -U postgres -c "ALTER DATABASE WIST OWNER TO postgres;"Подключение PostGIS
Шаг 15. Подключиться к БД SEMDB и включить в ней расширение:
psql -U postgres -h localhost semdb -c "create extension postgis;"Настройка PostgreSQL
Конифгураця Postgres расположена в /etc/postgresql/<версия>>/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/<версия>/main/pg_hba.conf. Необходимо разрешить доступ к БД с модулей ядра и DWH (vault), добавив следующие строчки:
host all all IP-сервера core/маска md5
host all all IP-vault/маска md5CУБД Cassandra
Установка СУБД Cassandra используется только в больших и нагруженных инсталляциях, где подразумевается большой рост "сырых" данных.
См. раздел по оценке [производительности] инталляций.
Совет
Актуальные способы установки доступны по ссылке.
Установка через менеджера пакетов
Добавляем репозиторий
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};Совет
Рекомендуется создавать как минимум сразу 3 узла кластера Cassandra.
СУБД Redis
Обязателен к развертыванию. В БД хранятся "горячие" наборы данных и кэш.
Обновляем список пакетов репозиториев
sudo apt updateУстанавливаем redis-server
sudo apt install -y redis-serverПроверьте подключение к базе. По умолчанию для доступа к базе пароль не требуется:
redis-cli127.0.0.1:6379> PINGДобавьте сервис в список приложений, запускаемых автоматически:
sudo systemctl enable redis-serverApache Artemis MQ
Обязателен к установке. Хранилище используется как системная шина между модулями ядра. Apache Artemis MQ поддерживает состояние системных
очередей обмена и обеспечивает гарантированную доставку данных между компонентами платформы.
Установка Apache Artemis
Примечание
Предварительно, проверьте наличие на машине JRE. Как установить и проверить JRE, см. Установку JRE
Создаем служебных пользователей artemis
sudo groupadd artemis && \
sudo useradd -s /bin/false -g artemis -d /opt/artemis artemisПереходим в директорию /optи скачиваем Artemis 2.32.0
wget https://archive.apache.org/dist/activemq/activemq-artemis/2.32.0/apache-artemis-2.32.0-bin.tar.gzРазархивируем скачанных архив и создадим на него символьную ссылку
sudo tar -xvzf apache-artemis-2.32.0-bin.tar.gz
sudo ln -s /opt/apache-artemis-2.32.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Во время создания брокера необходимо будет задать имя пользователя и пароль для доступа к брокеру.
Настройка Apache Artemis
После установки брокера по умолчанию доступ к web-консоли будет только на localhost:8161, для того чтобы получить удаленный доступ к консоли необходимо будет отредактировать файлы bootstrap.xml и jolokia-access.xml которые находятся по пути /var/lib/test-broker/etc/
В файле boostrap.xml замените в тегах <web></web>:
<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/artemis-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-broker/bin/artemis-service stop
UMask=0007
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.targetПосле создания сервиса обновите список сервисов:
sudo systemctl daemon-reloadПроверьте корректность установки, выполните команду:
var/lib/artemis-broker/bin/artemis queue statСУБД ScyllaDB
ScyllaDB — NoSQL база данных, может использоваться вместо Cassandra.
Установка ScyllaDB
Шаг 1. Устанавливаем ScyllaDB любым из возможных способов.
curl -sSf get.scylladb.com/server | sudo bashsudo mkdir -p /etc/apt/keyrings
sudo gpg --homedir /tmp --no-default-keyring --keyring /etc/apt/keyrings/scylladb.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys a43e06657bac99e3
sudo wget -O /etc/apt/sources.list.d/scylla.list http://downloads.scylladb.com/deb/debian/scylla-2025.3.list
sudo apt-get update
sudo apt-get install -y scyllaНастройка ScyllaDB
Шаг 2. В данном примере кластер БД ScyllaDB состоит из трёх нод, установленных на отдельных машинах. Последовательно открываем порты:
На машине x.x.x.1:
sudo ufw allow from x.x.x.2 to x.x.x.1 proto tcp port 7000,9042
sudo ufw allow from x.x.x.3 to x.x.x.1 proto tcp port 7000,9042На машине x.x.x.2:
sudo ufw allow from x.x.x.1 to x.x.x.2 proto tcp port 7000,9042
sudo ufw allow from x.x.x.3 to x.x.x.2 proto tcp port 7000,9042На машине x.x.x.3:
sudo ufw allow from x.x.x.1 to x.x.x.3 proto tcp port 7000,9042
sudo ufw allow from x.x.x.2 to x.x.x.3 proto tcp port 7000,9042Шаг 3. Настраиваем конфигурацию на каждой ноде:
sudo vim /etc/scylla/scylla.yaml
Настраиваем доступ по логину и паролю:
authenticator: PasswordAuthenticatorДля машины x.x.x.1 будут установлены следующие параметры:
cluster_name: 'semnext'
num_tokens: 256
- seeds: "x.x.x.1"
listen_address: x.x.x.1
rpc_address: x.x.x.1
endpoint_snitch: GossipingPropertyFileSnitchДля машины x.x.x.2:
cluster_name: 'semnext'
num_tokens: 256
- seeds: "x.x.x.1"
listen_address: x.x.x.2
rpc_address: x.x.x.2
endpoint_snitch: GossipingPropertyFileSnitchДля машины x.x.x.3:
cluster_name: 'semnext'
num_tokens: 256
- seeds: "x.x.x.1"
listen_address: x.x.x.3
rpc_address: x.x.x.3
endpoint_snitch: GossipingPropertyFileSnitchНа всех трех нодах изменяем файл cassandra-rackdc.properties. Rack=rack1 должен быть одинаков на всех нодах.
sudo vim /etc/scylla/cassandra-rackdc.properties
dc=datacenter1
rack=rack1Шаг 4. На каждой машине чистим старый кластер:
rm -rf /var/lib/scylla/data/* && rm -rf /var/lib/scylla/commitlog/* && rm -rf /var/lib/scylla/hints/* && rm -rf /var/lib/scylla/view_hints/* && rm -rf /var/lib/scylla/saved_caches/*
Шаг 5. На каждой машине настраиваем Scylla:
sudo /usr/lib/scylla/scylla_setup
Важный шаг: разрешить настройку IO!
Do you want IOTune to study your disks IO profile and adapt Scylla to it? (WARNING Saying NO here means the node will not boot in production mode unless you configure the I/O Subsystem manually!)
Yes - let iotune study my disk(s). Note that this action will take a few minutes. No - skip this step.
[YES/no]yes
В конце установки будет выведена команда, позволяющая быстро настроить Scylla на других нодах, например:
scylla_setup --no-raid-setup --online-discard 1 --nic ens160 \ --no-kernel-check --io-setup 1 --no-memory-setup \ --no-rsyslog-setup
Шаг 6. Поочередно на каждой ноде запускаем сервис:
sudo systemctl start scylla-server.service
И проверяем состояние кластера:
nodetool status
Шаг 7. По умолчанию при инсталляции системы создается пользователь cassandra с паролем password. Входим в консоль администрирования БД:
cqlsh -u cassandra -p password IP-адресПосле входа и авторизации в консоли администрирования мы можем создать пользователя
CREATE USER worker WITH PASSWORD 'worker';Создаем нужное нам пространство ключей «sem» с фактором репликации 2 и поддержкой архитектуры tablets.
CREATE KEYSPACE sem WITH replication = {'class': 'NetworkTopologyStrategy', 'datacenter1': 2};