Стандартизированнное развертывание CedrusData Engine (установка из архива)#

Настоящее руководство содержит инструкции по стандартизированному развертыванию кластера CedrusData. Для развертывания применяется shell-команды и файл переменных. Установка производится в минимальной рабочей конфигурации, без подключения каталогов, настроек памяти, настроек безопасности, и прочих дополнительных функций CedrusData.

Требования к установке#

  • Linux x64

  • JDK 21 версии

  • Минимум 4 GB RAM

  • Рекомендуется отдельный пользователь Linux (root-привилегии не требуются)

  • Свободное место на дисках:

    Роль узла

    Назначение

    Объем

    Комментарий

    Все узлы

    Дистрибутив/docker-образ

    1 GB

    Все узлы

    Журналы работы

    10+ GB

    Worker

    Локальный кэш (опционально)

    1-10% от объёма данных

    рекомендуется NVME/SSD

    Coordinator

    Кэш результатов запросов (опционально)

    индивидуально

Планирование развертывания#

Общие рекомендации:

  • Для узлов с ролью CedrusData Worker выбирайте идентичные конфигурации.

  • Для узла с ролью CedrusData Coordinator, для небольших кластеров (до 10 узлов) обычно резервируется примерно 25-50% ресурсов Worker (отдельно по памяти и по CPU). При высокой интенсивности запросов и большем числе узлов, количество ядер CPU и объёма RAM потребуется больше.

  • Соотношение числа ядер к памяти узлов составляет примерно 16 GB на каждое физическое ядро CPU. В случае высокой доли compute-intensive задач - парсинг, regexp, преобразования, и пр., соотношение стоит увеличить в пользу числа ядер CPU.

  • При наличии дополнительных сервисов на узле (CedrusData Catalog, Postgres и пр.), зарезервируйте дополнительные ресурсы под них.

  • Для хранения журналов работы предусмотрите отдельный volume.

  • В случае использования кэша CedrusData рекомендуется выделить отдельный SSD/NVME диск

В таблице ниже приведены примеры типовых конфигураций Coordinator и соотвествующие им конфигурации Worker-узлов для небольшого кластера (до 10 узлов):

Coordinator CPU и RAM

Worker CPU и RAM

2 ph.cores, 16 GB RAM

4 ph.cores, 32-64 GB RAM

4 ph.cores, 32 GB RAM

8 ph.cores, 64-128 GB RAM

8 ph.cores, 64 GB RAM

16 ph.cores, 256 GB RAM

16 ph.cores, 128 GB RAM

32 ph.cores, 512 GB RAM

32 ph.cores, 256 GB RAM

64 ph.cores, 1024 GB RAM

Для дальнейшей установки потребуется подготовить следующие локации в файловой системе:

Переменная

Каталог по умолчанию

Назначение

Роль узла

CDE_HOME

/usr/lib/trino/

Каталог дистрибутива

Все

CDE_CONF

/etc/trino

Каталог конфигурации

Все

CDE_DATA

/data/trino

Журналы и runtime файлы

Все

CDE_CACHE

/data/trino-cache

Локальный кэш (опционально)

Workers

Для наилучшей переносимости конфигурации и совместимости с конфигурацией docker-образов, рекомендуется оставить указанные ниже переменные без изменений, смонтировав лишь отдельные физические диски под журналы и кэш. Для удобства для каталогов CDE_HOME и CDE_CONF вы можете создать symlinks. В частности, это облегчит процесс обновлений, когда конфигурация старой версии может оставаться без изменений в старом каталоге, а symlink «смотрит» на локацию с новой конфигурацией. Тем самым снимается необходимость внесения изменений в переменные окружения и конфигурацию при переключении между версиями CedrusData Engine.

Установка JDK#

Можно установить любую JDK 21 версии. Например, Temurin JDK.

Подготовка узлов#

  1. На всех узлах рекомендуется создать отдельного пользователя (далее $CDE_USER, по умолчанию trino), которому в дальнейшем будут предоставлены права на работу с требуемыми каталогами.

  2. Отредактировать ulimits для пользователя в файле /etc/security/limits.conf (увеличьте значения при необходимости):

trino soft nofile 131072
trino hard nofile 131072
trino soft nproc 128000
trino hard nproc 128000
  1. Отключите swap в операционной системе, если в нём нет необходимости:

sudo cp /etc/fstab /etc/fstab.bak
sudo sed -i '/[[:space:]]swap[[:space:]]/ s/^[[:space:]]*/#/' /etc/fstab
sudo swapoff -a
# проверить результат
swapon --show

Установка CedrusData Engine#

Установка выполняется под пользователем $CDE_USER (по умолчанию trino).

  1. На каждом узле кластера создать файл с переменными окружения. Указанные переменные будут использованы для выполнения последующих команд.

sudo mkdir /etc/trino/
sudo chown $CDE_USER:$CDE_USER /etc/trino/

echo "CDE_HOME=/usr/lib/trino/
CDE_CONF=/etc/trino
CDE_DATA=/data/trino
CDE_CACHE=/data/trino-cache" > /etc/trino/cedrus.env

chmod 600 /etc/trino/cedrus.env

set -a
. /etc/trino/cedrus.env
set +a
  1. Подготовить рабочие директории (все узлы кластера).

sudo mkdir -p "$CDE_HOME" "$CDE_CONF"/catalog "$CDE_DATA" "$CDE_CACHE"
sudo chown $CDE_USER:$CDE_USER "$CDE_HOME" "$CDE_CONF" "$CDE_CONF"/catalog "$CDE_DATA" "$CDE_CACHE"
  1. Установка дистрибутива (все узлы кластера).

cd /tmp
wget https://downloads.cedrusdata.ru/releases/cedrusdata-server-476-2.tar.gz
tar -xf cedrusdata-server-476-2.tar.gz
mv cedrusdata-server-476-2/* "$CDE_HOME"/
rm -Rf cedrusdata-server-476-2*
mv "$CDE_HOME"/etc/* "$CDE_CONF"/
  1. Отредактировать node.properties (все узлы кластера).

Пересоздать "$CDE_CONF"/node.properties:

echo "node.environment=cedrus
node.data-dir=\${ENV:CDE_DATA}" > "$CDE_CONF"/node.properties
  1. Отредактировать config.properties.

Отредактировать файл "$CDE_CONF"/config.properties (узел Coordinator).

echo "coordinator=true
http-server.http.port=8080
discovery.uri=http://\${ENV:CEDRUSDATA_COORDINATOR_ADDRESS}:8080" > "$CDE_CONF"/config.properties

Отредактировать файл "$CDE_CONF"/config.properties (узлы Workers).

echo "coordinator=false
http-server.http.port=8080
discovery.uri=http://\${ENV:CEDRUSDATA_COORDINATOR_ADDRESS}:8080" > "$CDE_CONF"/config.properties
  1. Настройте максимальный размер файлов журналов (все узлы кластера).

В данном примере общий размер файлов журналов не превысит 10 GB.

echo "
log.max-size=100MB
log.max-total-size=8GB
log.compression=GZIP

# HTTP request log
http-server.log.max-size=100MB
http-server.log.max-history=20
http-server.log.compression.enabled=true" >> "$CDE_CONF"/config.properties

Переменные окружения и секреты#

Для хранения переменных окружения используется отдельный файл $CDE_CONF/cedrus.env, инициализирующий переменные перед стартом CedusData. Подставьте корректный адрес для CedrusData Coordinator (и другие переменные при необходимости):

echo "CEDRUSDATA_COORDINATOR_ADDRESS=coordinator.example.com" >> "$CDE_CONF"/cedrus.env

В дальнейшем вы можете использовать указанные переменные в любых файлах конфигурации CedrusData Engine. Пример фрагмента файла "$CDE_CONF"/config.properties:

discovery.uri=http://${ENV:CEDRUSDATA_COORDINATOR_ADDRESS}:8080

Запуск CedrusData Engine#

Запуск производится одинаково для всех узлов кластера. Перед запуском инициализируйте переменные окружения:

set -a
. /etc/trino/cedrus.env
set +a

Запуск может быть осуществлен одним из следующих способов.

Способ-1. Консольный запуск в background (журнал пишется только в файл):

"$CDE_HOME"/bin/launcher start --etc-dir "$CDE_CONF"

Способ-2. Консольный запуск в foreground (журнал дублируется в stdout/err):

"$CDE_HOME"/bin/launcher run --etc-dir "$CDE_CONF"

Способ-3 (рекомендуемый). Создать сервис systemd с автозапуском и авторестартом.

  1. Создать файл /etc/systemd/system/cde.service со следующим содержимым (пример):

[Unit]
Description=CedrusData Engine
After=network-online.target
Wants=network-online.target

[Service]
User=trino
Group=trino

EnvironmentFile=/etc/trino/cedrus.env
          
Type=forking
ExecStart=/usr/lib/trino/bin/launcher start "--etc-dir=${CDE_CONF}"
ExecStop=/usr/lib/trino/bin/launcher stop
SuccessExitStatus=143

Restart=on-failure
RestartSec=30
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
  1. Установить автозапуск сервиса и запустить сервис:

sudo systemctl daemon-reload
sudo systemctl enable cde
sudo systemctl start cde

Журналы запуска CedrusData можно найти в файле на кажлдом узле:

tail -200 "$CDE_DATA"/var/log/server.log

Остановка CedrusData Engine#

Производится одинаково для всех узлов кластера.

"$CDE_HOME"/bin/launcher stop --etc-dir "$CDE_CONF"

# в случае использования сервиса
sudo systemctl stop cde