Руководство по установке
Данное Руководство адресовано системным администраторам, ответственным за установку и управление системой Tarantool Column Store (TCS). В их круг задач входят:
- подготовка серверов;
- установка системы в производственной среде;
- обновление системы, откат к предыдущей версии и удаление системы.
TCS поддерживает установку на следующие операционные системы (ОС) семейства Linux:
- Astra Linux 1.7;
- РЕД ОС 7.3 Стандарт;
- МосОС Арбат 15.5.
Также возможна установка на Ubuntu и CentOS, но без гарантии полноценной работоспособности.
В работе с TCS может требоваться взаимодействие с различным сторонним ПО. Для некоторых видов программного обеспечения установлены следующие рекомендации:
- etcd версии не ниже 3.4.
- python версии не ниже 3.11.
- Ansible версии не ниже 9.7.0.
- Инсталлятор Ansible Tarantool Enterprise версии не ниже 1.20.1.
Процессор (CPU) должен поддерживать профиль x86-64-v3 и дополнительные расширения:
AES-NI/PCLMULQDQ, ADX, RDRAND/RDSEED, XSAVEOPT/XSAVEC/XSAVES.
Tarantool Column Store – колоночная транзакционно-аналитическая СУБД, построенная на платформе Tarantool Enterprise Edition.
TCS наследует от Tarantool следующие возможности хранения и масштабирования:
- данные хранятся в оперативной памяти;
- хранение персистентно;
- доступны механизмы шардирования и репликации.
Таким образом, перед установкой и эксплуатацией TCS требуется подготовить сервера для использования сопутствующего ПО:
-
Настройте межсетевой экран (firewall):
a. Настройте порты для бинарного протокола Tarantool.
Tarantool использует как TCP, так и UDP, для взаимодействия внутри кластера.
Откройте пул портов 3301 — 3401 для TCP и UDP трафика, для внутреннего трафика на всех серверах, на которых устанавливается Tarantool.
Если внешние приложения обращаются к кластеру по бинарному протоколу, также необходимо открыть пул портов 3301 — 3401, но достаточно TCP.
b. Настройте порты для TCP и HTTP(s).
-
TCP используется для взаимодействия администраторов с веб-интерфейсом модуля Tarantool Cluster Manager (TCM).
На всех серверах, на которых устанавливается TCM, откройте порт для TCP-трафика, указанный в конфигурации TCM (по умолчанию 8080).
-
Встроенный в Tarantool сервер может принимать SSL трафик, поэтому проксирование HTTPs-трафика на HTTP-порты настраивать не нужно.
Откройте пул портов 8001 – 8101 для HTTPs-трафика на всех серверах, на которых устанавливается Tarantool.
-
HTTP используется для взаимодействия с интерфейсом сервиса TCS, где ждет ввод обработчик
/sql.Откройте пул портов 7700-7800 для HTTPs трафика на всех серверах, на которых будет запущен сервис TCS.
c. Настройте порты для внутреннего трафика для
etcd. По умолчанию используется порт 2379.d. В случае, если у вас:
- отдельно стоящий сервер, или
- один из серверов под Tarantool, или
- агент CI/CD системы,
настройте также:
- доступ по 22 порту (ssh) для devops-инженера;
- сетевой доступ по 22 порту (ssh) до всех серверов, на которые производится установка.
В том числе до серверов под
etcdи других сервисов.
-
-
Настройте DNS.
Все сервера должны находить друг друга по FQDN (доменное имя локальной машины). Удобно использовать доменное имя для обозначения экземпляров Tarantool в кластере.
-
Разбейте дисковое пространство в соответствии с рекомендациями для оптимальной работы экземпляров Tarantool:
- журналы (logs) – 2 GB * количество экземпляров Tarantool, но не менее 15 GB
- журнал упреждающей записи (WAL) – 40-50% от RAM, используемого всеми экземплярами Tarantool
- снимки данных (snapshots) – 100-110% от RAM, используемого всеми экземплярами Tarantool
Разбейте диски в соответствие с расчетами и подключите директории с помощью команды
mount. -
Скорректируйте параметры ядра.
a. Задайте параметры overcommit по памяти:
sudo cat << EOF >> /etc/sysctl.confvm.overcommit_memory = 2vm.overcommit_ratio = 100EOFb. При ошибочном завершении Tarantool должен быть создан coredump-файл, который понадобится нашим специалистам для исследования проблемы. Файлы должны собираться в доступную на запись директорию, иметь в названии PID, signal и timestamp. Для корректного сохранения отладочной информации потребуются следующие настройки:
sudo cat << EOF >> /etc/sysctl.confkernel.core_uses_pid = 1kernel.core_pattern = /app/tarantool/coredump/core-%e-%u-%g-%p-%tEOFc. Настройте пул портов для исходящих запросов.
Исходящие соединения могут занимать порты, предназначенные для бинарного протокола Tarantool.
sudo cat << EOF >> /etc/sysctl.confnet.ipv4.ip_local_port_range = 32768 61000EOF -
Установите вспомогательные утилиты.
Команды для поддерживаемых ОС:
Для Astra Linux:
sudo apt updatesudo apt install -y \logrotate \ # Для ротации журналовcronie \ # Утилита crontabgdb \ # Для сбора отладочной информации в случае паденияgcore \ # Для создания coredump-файла на летуtelnet \ # Для проверки сетевой связности узловiperf3 \ #iptraf-ng \ #htop # Более наглядный topДля РЕД ОС:
sudo dnf install -y \logrotate \cronie \gdb \telnet \iperf3 \iptraf-ng \htop -
Создайте учетные записи.
Создайте группу
tarantoolи локального пользователяtarantoolдля запуска и управления Tarantool:sudo groupadd -g 3301 tarantoolsudo useradd -m -u 3301 -g 3301 --system tarantoolДля корректной работы пользователя
tarantoolсsystemctlв пользовательском окружении выполните команду:sudo loginctl enable-linger tarantoolАналогично
tarantool, потребуется учетная запись для работы сetcd. Соответствующий пользователь должен создаваться в процессе установкиetcd. Если этого не произошло, создайте его самостоятельно:sudo groupadd etcdsudo useradd -m -g etcd --system etcd -
Активируйте пользовательское пространство
systemd:sudo loginctl enable-linger tarantool -
Создайте директории для записи на диск:
sudo mkdir -p /app/tarantoolsudo mkdir -p /app/tarantool/coredumpsudo mkdir -p /app/logssudo mkdir -p /app/snapsudo mkdir -p /app/etcdИ задайте права:
sudo chown tarantool:tarantool /app/tarantoolsudo chown tarantool:tarantool /app/tarantool/coredumpsudo chown tarantool:tarantool /app/logssudo chown tarantool:tarantool /app/snapsudo chown etcd:etcd /app/etcd -
Настройте лимиты для группы
tarantool.sudo cat << EOF >> /etc/security/limits.d/tarantool.conf@tarantool - nproc 64000@tarantool - nofile 64000@tarantool - core unlimitedEOF -
Настройте оркестратор.
a. Создайте
systemdсервис-файлы для экземпляров Tarantool.Сервис-файлы – это стандартный способ управления процессами в современных Linux, который работает на всех systemd-совместимых ОС. Сервис-файлы задают конфигурацию для запуска экземпляров Tarantool как фоновых сервисов с автозагрузкой, журналированием и контролем состояния.
Можно создать один файл
/etc/systemd/system/tarantool@.service(шаблон для нескольких экземпляров) или отдельные файлы под каждый экземпляр.Пример сервис-файла с ключевыми параметрами:
# /etc/systemd/system/tarantool@.service (шаблон для нескольких инстансов)[Unit]Description=Tarantool Column Store instance: %i # %i = имя из названия файла (например, instance1)After=network-online.target # Ждём готовности сети (критично для full-mesh кластера)[Service]Type=simple # Один главный процесс, systemd отслеживает его PIDUser=tarantool # Запуск от непривилегированного пользователяGroup=tarantoolExecStart=/usr/bin/tarantool /app/tarantool/%i.lua # Запуск экземпляра с его lua-конфигурациейRestart=on-failure # Автоперезапуск при крахе (но не при ручном stop)LimitNOFILE=64000 # Лимит открытых файлов (синхронно с limits.conf)LimitNPROC=64000 # Лимит потоков/процессовStandardOutput=journal # Журналы stdout → journaldStandardError=journal # Журналы stderr → journald[Install]WantedBy=multi-user.target # Включать в стандартный режим загрузки ОСb. Настройте персистентное хранилище
journald(для РЕД ОС и RHEL).Журналы экземпляров, отправляемые в
stdoutиstderr, автоматически попадают вjournald. Правильная настройкаjournaldнужна для персистентного хранения журналов сервисов (включая Tarantool), чтобы они сохранялись после перезагрузки и были доступны черезjournalctl. Это упрощает отладку, делая вызовы типаjournalctl -u tarantool@instance1 -fдоступными даже при ротации файловых журналов.Изменение настроек Tarantool здесь не требуется. Достаточно, чтобы сервис Tarantool был запущен под
systemd.Пример настройки
journald:sudo mkdir -p /var/log/journal # Создаём директорию для персистентного храненияsudo chown root:systemd-journal /var/log/journal # Владелец root, группа systemd-journalsudo chmod 2755 /var/log/journal # Sticky bit + право записи группеsudo systemd-tmpfiles --create --prefix /var/log/journal # Применяем правила tmpfiles.dsudo systemctl restart systemd-journald # Перезапуск службы для применения измененийПроверка:
journalctl -u tarantool@* -f # Теперь журналы не пропадут после перезагрузкиc. Выдайте sudo-права администратору Tarantool.
Точечные sudo-права для администраторов обеспечивают безопасность, удобство автоматизации, возможность аудита и разделение ответственности без предоставления полного root-доступа:
- Принцип наименьших привилегий: администраторы не работают под
root, а переключаются вtarantool/etcdтолько тогда, когда нужно. - Автоматизация: скрипты развертки/мониторинга могут выполнять команды через
sudo -u tarantoolбез знания пароля. - Аудит: все действия через
sudoжурналируются (кто, когда, какую команду выполнил). - Разделение ролей: например, одной группе можно выдать права только на
systemctl status, а другой — наrestart.
Пример безопасной настройки (
/etc/sudoers.d/tarantool-admins):# Создавать только через: sudo visudo -f /etc/sudoers.d/tcs-admins%GROUP@domain.ru ALL=(tarantool) NOPASSWD: ALL # Группа может выполнять ЛЮБЫЕ команды ОТ ИМЕНИ tarantool%GROUP@domain.ru ALL=(etcd) NOPASSWD: ALL # То же самое для пользователя etcd%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl status etcd # Проверка статуса от root%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl restart etcd # Перезапуск сервиса%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/journalctl -u etcd -f # Просмотр логов в реальном времени.Для обслуживания серверов с Tarantool удобно выделить некоторую доменную группу из AD и выдать ей соответствующие права на переход под пользователей
tarantoolиetcd. Также нужны права на управление сервисами и просмотр журналов дляetcd.Указанный список в формате
sudoersможет выглядеть так:# пример для Astra Linux%GROUP@domain.ru ALL=(tarantool) NOPASSWD: ALL%GROUP@domain.ru ALL=(etcd) NOPASSWD: ALL%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl status etcd%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl restart etcd%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl reload etcd%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl start etcd%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl stop etcd%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl enable etcd%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl disable etcd%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl edit etcd%GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/journalctl -u etcd - Принцип наименьших привилегий: администраторы не работают под
-
Настройте ротацию журналов.
Здесь подразумевается добавление пользователя
tarantoolв группуcrontabдля того, чтобы снять возможное ограничение ОС на использование командыcrontab -e. В результате пользовательtarantoolсможет использоватьcrontab -eдля планирования своих внутренних задач (создание резервных копий, ротация журналов) без правroot. Никаких других дополнительных прав в системе пользователюtarantoolэто на даст.Для Astra Linux:
- Убедитесь, что утилита
crontabустановлена. - Добавьте пользователя
tarantoolв группуcrontab.
sudo usermod -a -G crontab tarantoolДля РЕД ОС:
Права на
crontabорганизуются через файлы/etc/cron.allowи/etc/cron.deny. Проверьте, что выполняется любое из двух условий:- Пользователь
tarantoolесть в файле/etc/cron.allow, либо - Файла
/etc/cron.allowнет, а файл/etc/cron.denyпуст (crontabдоступен всем).
- Убедитесь, что утилита
См. документацию по инсталлятору Ansible Tarantool Enterprise, глава Настройка среды.
Установка TCS в производственной среде производится с использованием инсталлятора Ansible Tarantool Enterprise (ATE).
Возможны 2 вида установки системы TCS с использованием ATE:
-
Установка с помощью Ansible-коллекции.
См. подробнее:
- раздел Подготовка серверов в текущем Руководстве по установке
- раздел Использование Ansible-коллекции в документации по инсталлятору Ansible Tarantool Enterprise
-
Установка с помощью Docker-образа.
В этом случае установка TCS должна включать следующие шаги:
-
Подготовка серверов, в том числе установка и настройка кластера
etcd.См. подробнее:
- раздел Подготовка серверов в текущем Руководстве по установке
- раздел Сценарий первичной настройки в документации по инсталлятору Ansible Tarantool Enterprise
-
Настройка конфигурации TCS и отправка ее в
etcd.См. подробнее:
- Настройка кластера
- Примеры статических инвентарей
- Пример вызова плейбука etcd_3_0.yml для отправки конфигурации в etcd
- раздел Tarantool 3.x: Отправка конфигурации в etcd в документации по инсталлятору Ansible Tarantool Enterprise.
-
Установка CIAM.
См. подробнее Установка CIAM.
-
Установка TCS.
См. подробнее:
- Пример вызова плейбука tcs/install.yml для развертывания кластера
- раздел Tarantool Column Store: Установка приложения в документации по инсталлятору Ansible Tarantool Enterprise.
-
Установка TCM.
См. раздел Tarantool Cluster Manager: Установка и запуск в документации по инсталлятору Ansible Tarantool Enterprise.
-
Пример кластера TCS, развернутого на нескольких серверах:

Архив для установки CIAM входит в пакет поставки TCS.
-
[На целевом сервере] Настроить локальный DNS.
echo "127.0.0.1 ciam.local" | sudo tee -a /etc/hosts -
[На целевом сервере] Установить
nginx. Настройка не требуется.sudo apt updatesudo apt install nginx -ysudo systemctl enable nginx -
[На целевом сервере] Установить и запустить
postgresql.Создать пользователя
appи необходимые базы данных:CREATE USER app WITH PASSWORD 'secret';CREATE DATABASE hydra OWNER app;CREATE DATABASE flow OWNER app;CREATE DATABASE audit OWNER app;CREATE DATABASE notifications OWNER app;CREATE DATABASE spicedb OWNER app;CREATE DATABASE access_control OWNER app;CREATE DATABASE access_agent OWNER app;CREATE DATABASE providers OWNER app; -
[На управляющем сервере] Установить Ansible.
sudo apt install ansible -y -
Скопировать архив для установки CIAM, распаковать его локально и перейти в корневую директорию распакованного архива.
-
[На управляющем сервере] Установить зависимости из списка
requirements.yml.cd ansiblepip install -r requirements.txt -
[На управляющем сервере] Настроить параметры конфигурации для CIAM.
Параметры задаются в инвентаре
inventory.ymlдля каждого хоста или группыciam_hosts. Ниже описаны только обязательные параметры.В инвентаре
inventory.yml:ansible_host— адрес целевого сервера;ansible_user— пользователь для SSH-подключения; должен совпадать с именем системного пользователя для сервиса CIAM (см. параметрciam_service_userв файле конфигурацииgroup_vars/ciam_hosts.yml)ciam_domain— домен CIAM (используется в redirect_uri, CORS, nginx и т.д.);ciam_ssl_cert— путь к SSL-сертификату (на целевом сервере);ciam_ssl_key— путь к ключу SSL-сертификата (на целевом сервере);ciam_archive_path— путь к архиву CIAM (на управляющем сервере);ciam_flow_pat_secret- "соль" для генерации и сверки токенов (любая строка длиной от 1 символа).
Пример:
all:children:ciam_hosts:hosts:ciam-ansible:ansible_host: vm2ansible_user: astraciam_domain: "ciam.local"ciam_ssl_cert: "/home/astra/helpers/certs/cert.pem"ciam_ssl_key: "/home/astra/helpers/certs/cert-key.pem"ciam_archive_path: "/home/astra/ciam.tar.gz"ciam_flow_pat_secret: "secret"В файле конфигурации
group_vars/ciam_hosts.yml:- ciam_service_user — имя системного пользователя для сервиса CIAM;
- ciam_service_group — имя группы системного пользователя для сервиса CIAM.
-
[На управляющем сервере] Сгенерировать SSL-сертификат и ключ с помощью плейбука
ssl_certs.yml.ansible-playbook -i inventory.yml playbooks/ssl_cert.yml -l ciam-ansible -
[На управляющем сервере] Запустить развертывание CIAM с помощью плейбука
install.yml.ansible-playbook -i inventory.yml playbooks/install.yml -
[На управляющем сервере] Обновить клиента для получения токенов в формате JWT.
ansible-playbook -i inventory.yml playbooks/update_client.yml -l ciam-ansible
Дальнейшая работа с CIAM (настройка доступа с веб-интерфейсу, создание пользователей, выдача токенов) подробно описана в документации по CIAM.
Чтобы обновить TCS 1.2.1 до версии 1.3.0 (с сохранением данных), нужно выполнить следующие действия:
-
Сохранение данных.
a. Сохраните планы выполнения.
В случае использования представлений (views) и персистентных подготовленных выражений (persisted prepared statements) убедитесь, что они сохранены, поскольку в настоящее время они сбрасываются при обновлении. Для выгрузки можно использовать следующие запросы:
select * from tcs_prepareds()select * from tcs_views()b. Остановите текущий кластер TCS версии
1.2.1(в ATE плейбук stop.yml).c. Сохраните все резервные копии.
Данный шаг необходим на случай отказа во время исполнения обновления (например, если произойдет обрыв сети). В таком случае процедуру обновления будет необходимо повторить целиком с самого начала.
-
Для Tarantool:
- файлы снимков (
.snap); - файлы журналов (
.xlog); - мета-данные внешних томов и файлы Parquet.
- файлы снимков (
-
Для etcd:
- файл снимка etcd.
-
-
Запуск обновления.
a. Внесите правки в конфигурацию TCS.
Отключите TCS-роли (
tcs_roles/*) в конфигурации кластера. Для этого их можно закомментировать, а в случае их явного удаления нужно убедиться в том, что предыдущая версия конфигурации сохранена.После этого обновите конфигурацию кластера в etcd (см. [Пример вызова плейбука etcd_3_0.yml для отправки конфигурации в etcd}).
b. Запустите кластер TCS версии
1.3.0(в ATE плейбук start.yml).Кластер запустится на конфигурации с выключенными ролями.
c. Запустите обновления с помощью утилиты
upgrade.lua.Утилита
upgrade.luaвходит в состав установочного архива TCS, см. директориюupgrade.Сначала рекомендуется выполнить обновление с опцией
--dry-run, чтобы получить список предстоящих обновлений без их фактического выполнения:$ tarantool upgrade/upgrade.lua \--host localhost \--port 3301 \--from 1.2.1 \--to 1.3.0 \--dry-runЗатем выполните тот же вызов без опции
--dry-run. По ходу работы утилитаupgrade.luaбудет запрашивать подтверждения.d. Остановите кластер TCS версии
1.3.0.e. Откатите кластерную конфигурацию на версию, в которой включены TCS-роли, и загрузите конфигурацию в etcd.
f. Запустите кластер версии
1.3.0(в ATE плейбук start.yml).Кластер запустится на конфигурации с включенными ролями.
-
Запустите плейбук
uninstall.yml, указав следующие параметры:tagsи значениеtarantoollimitи список имен всех экземпляров кластера
См. Пример вызова плейбука uninstall.yml для удаления кластера.
Также см. подробнее раздел Удаление кластера Tarantool в документации по инсталлятору Ansible Tarantool Enterprise.
-
При удалении кластера, работавшего в режиме шардирования, выполните также команду
etcdctl del --prefix "/tarantool/{prefix}/sharding", где{prefix}– это префикс для конфигурации TCS вetcd.