Установка и первый запуск: tt CLI, пакеты, Docker

Рейтинг: 66.7% · 13 голосов
Исчерпывающий курс по Tarantool 3.x: модель данных, движки memtx и vinyl, Lua и файберы, транзакции и MVCC, SQL, конфигурация (box.cfg и декларативная 3.x), репликация и Raft, шардирование vshard, эксплуатация, безопасность. 47 уроков со схемами.
Ответить
Аватара пользователя
denis_tnt
Сообщения: 47
Зарегистрирован: 11 май 2026, 05:31

Установка и первый запуск: tt CLI, пакеты, Docker

Сообщение denis_tnt »

Оглавление курса (47)
  1. Что такое Tarantool: in-memory СУБД и сервер приложений
  2. Архитектура изнутри: процесс, потоки, event-loop
  3. Установка и первый запуск: tt CLI, пакеты, Docker (вы здесь)
  4. Интерактив: консоль, admin-консоль, первые команды
  5. Спейсы и кортежи: форматы, типы данных
  6. Типы индексов и их применимость
  7. Движки хранения: memtx vs vinyl
  8. DDL: схема, создание спейсов и индексов, миграции
  9. DML и выборки: insert/update/upsert, итераторы
  10. Персистентность: WAL, снапшоты, recovery
  11. Внутренности memtx: аллокаторы slab/arena, память
  12. Внутренности vinyl: LSM, компакция, тюнинг
  13. Lua и LuaJIT в Tarantool: box, модули, rocks
  14. Файберы: кооперативная многозадачность, каналы
  15. Транзакции: ACID, изоляция, MVCC
  16. Хранимые процедуры, модули, организация приложения
  17. net.box: удалённые вызовы, async
  18. Пулы соединений, балансировка, реконнект
  19. Ошибки и диагностика: box.error, pcall
  20. Типы и сериализация: MsgPack, decimal, datetime, uuid
  21. SQL в Tarantool: возможности и связь с box
  22. SQL: таблицы, JOIN, подзапросы, представления
  23. SQL: подготовленные выражения, транзакции, Lua-интероп
  24. Классическая конфигурация box.cfg (legacy 1.x/2.x)
  25. Декларативная конфигурация 3.x: config.yaml, иерархия
  26. Роли и приложения в 3.x
  27. Централизованная конфигурация: etcd / config storage
  28. tt CLI глубоко: разработка, сборка, запуск
  29. Cartridge (официальный legacy) и миграция на 3.x
  30. Репликация: replicaset, топологии
  31. Механика репликации: WAL-стриминг, vclock
  32. Синхронная репликация и выборы лидера (Raft)
  33. Жизненный цикл узла: bootstrap, join, rejoin
  34. vshard: router/storage, виртуальные бакеты
  35. Решардинг и rebalancing бакетов
  36. Запросы поверх шардов: map-reduce, crud
  37. Мониторинг: метрики, Prometheus, Grafana
  38. Логирование и аудит
  39. Бэкапы и восстановление
  40. Безопасность: аутентификация, RBAC, TLS
  41. Производительность: профилирование, тюнинг
  42. Обновления: схема, rolling upgrade
  43. Деплой в продакшен: Docker, топология (официальные паттерны)
  44. Администрирование через официальный TCM (Tarantool Cluster Manager)
  45. Коннекторы: Python, Go, Java
  46. Ключевые модули (rocks): crud, metrics, queue, expirationd
  47. Capstone: шардированный отказоустойчивый кластер
Краткий обзор

В этом уроке мы пройдём весь путь от пустой машины до работающего инстанса Tarantool: поставим бинарь, разберёмся с инструментом tt, создадим окружение и запустим первый узел. Цель - не вызубрить команды, а понять, как устроен инстанс и какой поток превращает YAML-файлы и каталоги в живой процесс. После урока структура tt-окружения и порядок установки/запуска должны стать для вас прозрачными.

Главная мысль: в Tarantool 3.x инструмент tt - это единая точка управления. Он умеет ставить сами бинари Tarantool, создавать окружение, запускать, останавливать, подключаться к консоли. Он пришёл на смену старым tarantoolctl и cartridge-cli и объединил их функции.

Механика: что такое инстанс и окружение

Инстанс - это один процесс tarantool, у которого есть: конфигурация (что и как он делает), сетевые порты (бинарный протокол iproto, обычно 3301), управляющий сокет (для консоли), pid-файл и каталог данных. В каталоге данных лежат снапшоты (.snap), журнал упреждающей записи WAL (.xlog), при движке vinyl - его файлы. Снапшот плюс хвост WAL после рестарта восстанавливают состояние базы в памяти - это и есть суть персистентности memtx.

Окружение tt (environment) - это изолированная рабочая папка с файлом tt.yaml в корне. Внутри находится каталог instances.enabled, и каждое приложение - это подкаталог внутри него. Окружение задаёт, где брать бинари, куда писать логи и данные, какие приложения включены. Изоляция означает, что в одной папке у вас одна версия Tarantool и свой набор приложений, в соседней - другая, и они не мешают друг другу.

Поток от файлов к процессу выглядит так. Вы кладёте в instances.enabled/myapp два файла. Первый - instances.yml - перечисляет имена инстансов приложения (просто список с двоеточиями). Второй - config.yaml - это декларативная конфигурация 3.x: топология, кредиты, спейсы, порты. Когда вы пишете tt start myapp, tt читает tt.yaml, находит приложение, по instances.yml понимает, сколько процессов поднять, и под каждое имя запускает tarantool, передавая ему общий config.yaml. Каждый инстанс берёт из конфига свою секцию по имени.

Двойной трек конфигурации. Декларативный config.yaml - это путь 3.x. В классических 1.x/2.x инстанс конфигурировался императивно: init-скрипт на Lua вызывал box.cfg{...} с параметрами (listen, memtx_memory, work_dir). Этот способ работает и в 3.x для одиночных скриптов, но для кластеров официальный путь теперь - YAML. Запомните различие: box.cfg - это код, который что-то делает при выполнении; config.yaml - это данные, которые движок применяет сам.

Раскладка каталогов. tt задаёт пути относительно папки приложения. По умолчанию: данные WAL и снапшоты идут в var/lib, логи в var/log, pid-файлы и управляющий сокет в var/run. Эти значения настраиваются в секции app файла tt.yaml (параметры wal_dir, memtx_dir, vinyl_dir, log_dir, run_dir). Понимание этой раскладки важно: если вы не видите данных после рестарта, первым делом смотрите, в тот ли каталог пишет инстанс.

Изображение
Структура инстанса и поток установки/запуска через tt

Ключевые команды и код

Шаг 1. Поставить tt и Tarantool. На Linux ставится из пакетного репозитория, на macOS - через Homebrew:

Код: Выделить всё

# Debian/Ubuntu
curl -L https://tarantool.io/release/3/installer.sh | bash
sudo apt install -y tt tarantool

# RHEL/CentOS/Alma
curl -L https://tarantool.io/release/3/installer.sh | bash
sudo yum install -y tt tarantool

# macOS
brew install tarantool/tap/tt
tt умеет ставить и сами версии Tarantool рядом с собой - это удобно, когда нужно держать несколько версий:

Код: Выделить всё

tt install tarantool 3.3        # поставить конкретную версию
tt install tarantool latest     # последнюю
tt search tarantool             # посмотреть доступные
Шаг 2. Создать окружение и приложение.

Код: Выделить всё

tt init                 # создаёт tt.yaml и каталоги (instances.enabled и пр.)
mkdir -p instances.enabled/myapp
instances.enabled/myapp/instances.yml - какие инстансы поднять:

Код: Выделить всё

instance001: {}
instances.enabled/myapp/config.yaml - минимальная конфигурация 3.x:

Код: Выделить всё

credentials:
  users:
    guest:
      roles: [super]

iproto:
  listen:
    - uri: '127.0.0.1:3301'

groups:
  group001:
    replicasets:
      replicaset001:
        instances:
          instance001: {}
Шаг 3. Запуск и работа.

Код: Выделить всё

tt start myapp                  # поднять процессы
tt status myapp                 # STATUS/PID/MODE/CONFIG/BOX
tt connect myapp:instance001    # интерактивная консоль
tt stop myapp                   # остановить
tt logs myapp                   # посмотреть логи
В консоли создаём первый спейс и данные:

Код: Выделить всё

box.schema.space.create('bands')
box.space.bands:format({
  { name = 'id',        type = 'unsigned' },
  { name = 'band_name', type = 'string'   },
  { name = 'year',      type = 'unsigned' },
})
box.space.bands:create_index('primary',   { parts = { 'id' } })
box.space.bands:create_index('secondary', { parts = { 'band_name' } })

box.space.bands:insert{ 1, 'Roxette',   1986 }
box.space.bands:insert{ 2, 'Scorpions', 1965 }
box.space.bands:select{ 1 }
box.space.bands.index.secondary:select{ 'Scorpions' }
Docker как альтернатива. Официальный образ tarantool/tarantool содержит и tarantool, и tt. Код приложения монтируется внутрь в /opt/tarantool:

Код: Выделить всё

docker run --name tt1 -p 3301:3301 \
  -v $(pwd):/opt/tarantool \
  -d tarantool/tarantool:3
Подключиться к консоли внутри контейнера:

Код: Выделить всё

docker exec -it tt1 tt connect myapp:instance001
Частые заблуждения и грабли
Самая частая ошибка новичков - запускать tt start не из корня окружения. tt ищет tt.yaml вверх по дереву каталогов; если вы ушли вглубь или, наоборот, запускаете из домашней папки, он либо не найдёт приложение, либо подхватит чужое окружение.
  • instances.yml против config.yaml. Их путают. instances.yml - короткий список имён процессов для tt. config.yaml - вся конфигурация движка. Имя инстанса в instances.yml обязано совпадать с именем в секции instances конфига, иначе процесс поднимется, но не найдёт своих настроек.
  • tt - это не сам Tarantool. Можно поставить tt и забыть поставить бинарь tarantool (или наоборот). tt status тогда жалуется на отсутствие исполняемого файла. Проверяйте: tarantool --version и tt version - это два разных бинаря.
  • Данные исчезли после рестарта в Docker. Без монтирования тома каталог var/lib живёт внутри контейнера и удаляется вместе с ним. Снапшоты и WAL надо выносить на хост через -v.
  • guest с правами super. В примерах гость получает роль super - это удобно для обучения, но в продакшене так делать нельзя: это анонимный полный доступ к базе.
  • MODE: RW против RO. В tt status колонка MODE показывает, читающий узел или пишущий. На одиночном инстансе ждите RW; если видите RO без видимой причины - смотрите конфигурацию репликации.
  • Старый tarantoolctl. В гайдах из интернета часто встречается tarantoolctl start - он устарел. Для 3.x используйте tt.
Мини-лаба

Поднимите одиночный инстанс по инструкции выше (tt init, два файла, tt start). Затем: подключитесь через tt connect, создайте спейс bands с тремя полями и первичным индексом, вставьте две записи. После этого выполните tt restart myapp и снова подключитесь. Проверьте через box.space.bands:select{}, что данные на месте. Найдите в файловой системе каталог var/lib вашего приложения и убедитесь, что там появились файлы .snap и .xlog - это и есть материальное доказательство персистентности.

Контрольные вопросы
  • Чем отличается роль файла instances.yml от config.yaml, и что произойдёт, если имя инстанса в них не совпадёт?
  • Какие файлы в каталоге данных отвечают за восстановление состояния базы после рестарта и как именно они дополняют друг друга?
  • Почему tt start желательно вызывать из корня окружения, и как tt находит нужное приложение?
  • В чём принципиальная разница между конфигурацией через box.cfg{} (трек 1.x/2.x) и через config.yaml (трек 3.x)?
👍2 ❤️1 🔥1 😄 🤔1
Ответить
← Предыдущая глава
Архитектура изнутри: процесс, потоки, event-loop
Следующая глава →
Интерактив: консоль, admin-консоль, первые команды

Все главы курса «Tarantool: in-memory СУБД и сервер приложений с нуля до продакшена»

Поделиться темой: ✈ Telegram VK

Вернуться в «Tarantool: СУБД и сервер приложений»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость