Инсталляция хранилищ
Ниже приведены инструкции по установке всех типов хранилищ для платформы. Пункт по установке 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 update
sudo apt install -y postgresql-common && sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
Шаг 4. Установить postgresql:
apt-get install postgresql-14
sudo apt install postgresql-15 -y
Шаг 5. Установить расширение PostGIS:
apt update
apt install postgresql-14-postgis-3
sudo 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/маска md5
CУБД 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-cli
127.0.0.1:6379> PING
Добавьте сервис в список приложений, запускаемых автоматически:
sudo systemctl enable redis-server
Apache 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 bash
sudo 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};