Установка и настройка Tengri
Операционные системы
Установка из deb-пакетов поддерживается для операционных систем:
-
Debian 13 (Trixie)
-
Ubuntu 22.04 LTS (Jammy Jellyfish)
Открытые порты
Для установки должны быть открыты порты:
-
5433— клиентские подключения (ODBC/JDBC, PostgreSQL) -
3000— веб-интерфейс -
3001-3004— WebSocket-подключения -
3005— Iceberg REST API -
9002— S3 API -
9591— метрики OpenTelemetry
Дополнительно только для кластерной конфигурации:
-
2379— координация кластера -
57776— RPC (межузловое взаимодействие)
Установка Tengri
Для установки одномашинной конфигурации:
-
Получаем архив с необходимыми файлами и распаковываем:
tar xf example_client.tar.gz cd example_clientexample_client ├── client.crt ├── client.key ├── install.sh └── license.txt
-
Запускаем скрипт для установки сертификата, файла конфигурации и репозитория APT:
sudo ./install.sh -
Устанавливаем пакеты:
-
Только Tengri
sudo apt install tengri -
Tengri с локальным S3 (MinIO)
sudo apt install tengri tengri-minio
-
-
После установки Tengri будет готов к работе на порту
3000.
Логин и пароль по умолчанию:admin / admin. -
Пакет
tengri-minioустановит локальный MinIO с дефолтными настройками. Подробности о дальнейшей настройке можно узнать в документации MinIO.
Установка кластерной конфигурации Tengri
Tengri использует распределённую архитектуру с двумя основными компонентами:
-
Endpoints (Точки входа) — экземпляры SQL-сервера, к которым подключаются клиенты
-
Agents (Агенты) — вычислительные воркеры, выполняющие запросы
Все узлы автоматически обнаруживают друг друга через etcd — сервис распределённой координации.
Предварительные требования
-
Минимум 3 сервера (на Debian 13 Trixie или Ubuntu 22.04 LTS Jammy Jellyfish)
-
Сетевая связность между всеми серверами
Шаг 1: Установка Tengri на каждом сервере
На каждом сервере в вашем кластере выполните:
apt install tengri
Эта команда установит все необходимые компоненты.
Шаг 2: Настройка каждого узла
Отредактируйте /etc/tengri/config.env:
export TNGRI_ADVERTISE_RPC_HOST="<IP_ЭТОГО_СЕРВЕРА>"
export TNGRI_REMOTE_SESSIONS=true
Шаг 3: Запуск сервисов Tengri
На каждом сервере запустите оба сервиса:
systemctl enable tengri-endpoint
systemctl enable tengri-agent
systemctl start tengri-endpoint
systemctl start tengri-agent
После запуска узлы автоматически:
-
Регистрируются в etcd
-
Обнаруживают другие Endpoints и агентов
-
Устанавливают RPC-соединения для распределённого выполнения запросов
Шаг 4: Доступ к панели администратора
Откройте браузер и перейдите к интерфейсу администратора любого Endpoint:
http://<IP_ЛЮБОГО_ENDPOINT>:3000/admin
Вкладка "Кластер"
Для каждого сервера создайте его описание в кластере:
-
Нажмите "Новый Endpoint"
-
Введите параметры: адрес и порт RPC, если он отличается
-
Нажмите "Готово"
После этого индикаторы всех серверов должны стать зелеными, что означает что кластер работоспособен.
Во вкладке Кластер вы можете просмотреть:
-
Все зарегистрированные Endpoints с их RPC-адресами
-
Всех зарегистрированных агентов с их выделением RAM
-
Статус соединений между узлами
Шаг 5: Проверка кластера
С любого Endpoint выполните:
SHOW ENDPOINTS;
SHOW AGENTS;
SHOW WORKER POOLS;
Вы увидите все ваши серверы в списке. Клиенты могут подключаться к любому Endpoint — запросы автоматически распределяются по всем агентам в кластере.
Готово! Ваш кластер Tengri теперь работает на нескольких серверах с автоматическим распределением нагрузки.
Устранение неполадок
Узлы не обнаруживают друг друга:
-
Проверьте, что etcd запущен:
etcdctl endpoint health -
Проверьте правила файрвола для портов
2379и57776 -
Убедитесь, что
advertise_rpc_hostуказывает на доступный IP (неlocalhost)
Просмотр состояния кластера напрямую:
etcdctl get --prefix /tengri/
Настройка конфигурации
-
Дополнительные настройки конфигурации Tengri можно задать в файле
/etc/tengri/tengri.conf(по умолчанию файл отсутствует).Полный список возможных настроек в файле
tengri.conf# TNGRi configuration parameters # ========= # Licencing # ========= # TNGRI_LICENSE_FILE=/opt/tengri/license.txt # =========================== # S3 configuration parameters # =========================== # # # Access key id and secret key of user that will connect to S3 # rename SECRET_ACCESS_KEY to SECRET_KEY TNGRI_S3_ACCESS_KEY_ID=minioadmin TNGRI_S3_SECRET_ACCESS_KEY=minioadmin # # Region to send to S3 server. Generally you don't need to change that, just make # sure that target S3 has this same region TNGRI_S3_REGION=eu-central-1 TNGRI_S3_DEFAULT_REGION=eu-central-1 # # API endpoint URL for target S3. Must be in FQDN form # TNGRI_S3_ENDPOINT_URL=http://example.com TNGRI_S3_ENDPOINT_URL=http://127.0.0.1:9002 # # Bucket name to use. Must exist before start, so make sure that it exists and # has full access rights for this bucket. Must be in full form, i.e. # TNGRI_S3_BUCKET_NAME=s3://example:9000 TNGRI_S3_BUCKET_NAME=prostore # ======================= # TNGRi server parameters # ======================= # # # Iceberg catlog path in S3 bucket TNGRI_WAREHOUSE_PATH=s3://prostore/iceberg/ # # Name for the default schema in TNGRi. TNGRI_DEFAULT_SCHEMA=public # # URI for catalog endpoint. Must be either PostgreSQL or SQLite connection string, i.e. # TNGRI_CATALOG_URI=postgresql://user:password@example.com/database TNGRI_CATALOG_URI=postgresql://prostore:prostore@127.0.0.1:5432/prostore # # Path to writable directory where cached files will be placed. # # WARNING: Should be placed on SSD storage. Tngri uses aggressive caching strategies # to reduce S3 load # TNGRI_CACHE_DIR=/var/lib/tengri/cache # # Path to writable directory where python kernels will be stored. TNGRI_KERNEL_DIR=/var/lib/tengri/kernels # # If set to false then no agent is required to process queries. # Must be true for production environments TNGRI_REMOTE_SESSIONS=true # # Set to true for more log output TNGRI_DEBUG=false # # Host to bind main server to TNGRI_HOST=0.0.0.0 # # Port to bind PostgreSQL protocol implementation to TNGRI_PORT=5433 # # Host to bind RPC server for communication between agent and server TNGRI_RPC_HOST=0.0.0.0 # # Port to bind RPC server for communication between agent and server TNGRI_RPC_PORT=57776 # ============================= # Web application configuration # ============================= # # # SSL configuration. If set then Web communication will be done over SSL, otherwise # it will be plaintext. # # Path to SSL key. # TNGRI_SSL_KEY= # # Path to SSL certificate file. # TNGRI_SSL_CERT= # # Enables TNGRi web app. TNGRI_ENABLE_WEBSOCKET=true # # Path to static files for web app. TNGRI_WEBAPP_DIR=/usr/share/tengri-web # # Host to bind HTTP server to TNGRI_WEBAPP_HOST=0.0.0.0 # # Port to bind HTTP server to TNGRI_WEBAPP_PORT=3000 # # Host to bind Websocket server to. It is used extensively by webapp and python clients TNGRI_WEBSOCKET_HOST=0.0.0.0 # # Port to bind Websocket server to TNGRI_WEBSOCKET_PORT=3001 # # Host to bind PyLSP server to. It is used by webapp to provide code completion TNGRI_PYLSP_HOST=0.0.0.0 # # Port to bind PyLSP server to TNGRI_PYLSP_PORT=3003 # # Host to bind CRUD. Used by webapp to send messages in chats, manage scheduled # notebooks and manage external catalogs TNGRI_CRUD_HOST=0.0.0.0 # # Port to bind CRUD to TNGRI_CRUD_PORT=3004 # ============================ # TNGRi services configuration # ============================ # # Enable TNGRi's Iceberg REST catalog API provider TNGRI_ENABLE_REST_CATALOG=true # Host to bind REST catalog server to TNGRI_REST_CATALOG_HOST=0.0.0.0 # Port to bind REST catalog to TNGRI_REST_CATALOG_PORT=3005 # Enable compaction daemon TNGRI_ENABLE_COMPACTION=true # Enable notebook CRON daemon TNGRI_ENABLE_CRON=true # ============================ # TNGRi deployment information # ============================ # # Needed for external clients to connect to TNGRi services. For example, python clients # connecting from user's local machines. Set these to the values that point to this # installation, for example, if using reverse proxy for HTTP or Postgres protocol. # # Change the name of site deployment # TNGRI_SITE_NAME=tngri # # Websocket address to connect to. Must be in FQDN form, i.e. # TNGRI_SITE_WS_ADDR=ws://example.com:3001 TNGRI_SITE_WS_ADDR=ws://0.0.0.0:3001 # # Postgres protocol address to connect to, i.e. # TNGRI_SITE_PSQL_ADDR=example.com:5433 # TNGRI_SITE_PSQL_ADDR= # # S3 address to connect to. Must be in FQDN form, i.e. # TNGRI_SITE_S3_ADDR=http://example.com:9000 # TNGRI_SITE_S3_ADDR= # # S3 access key for public usage (Stage only) # TNGRI_SITE_PUBLIC_LOADER_ACCESS_KEY=public_loader # # S3 secret key for public usage (Stage only) # TNGRI_SITE_PUBLIC_LOADER_SECRET_KEY=public_loader #
-
Дополнительные настройки конфигурации MinIO можно задать в файле
/etc/default/tengri-minioв соответствии с документацией MinIO.После обновления файла конфигурации MinIO необходимо выполнить:
sudo systemctl daemon-reload sudo systemctl restart minio
Сброс пароля администратора
В случае если утрачен доступ к паролю администратора, его можно сбросить.
Для этого на сервере, где был установлен пакет, нужно выполнить:
sudo -u tengri bash -c 'export $(egrep -v "^#|^$|.*#" /var/lib/tengri/tengri.defaults | xargs); prostore reset-admin-password'
После этого текущий пароль администратора сбросится, и новый автоматически сгенерированный пароль будет показан в логе вывода.