Руководство для начинающих¶
В этом руководстве вы познакомитесь с основными возможностями Tarantool DB. В примере вы создаете шардированный спейс через миграции, выполняете запросы к нему с помощью модуля CRUD, а затем проверяете работу кластера при остановке узла.
Запустить кластер для выполнения примера можно, используя любой способ развертывания:
инсталлятор Ansible Tarantool Enterprise;
В руководстве для развертывания используется Docker Compose.
Важно
Запуск в Docker Compose является вспомогательным способом и используется для тестирования и демонстрации в примерах документации. Для целевого развертывания используйте Ansible Tarantool Enterprise.
Руководство включает следующие шаги:
Пререквизиты¶
Для выполнения примера требуются:
установленные Docker-образы Tarantool DB, Prometheus и Grafana;
приложение Docker Compose;
утилита tt CLI;
исходные файлы примера
up_with_docker_compose
.Примечание
Есть два способа получить исходные файлы примера:
Архив с полной документацией Tarantool DB, полученный по почте или скачанный в личном кабинете tarantool.io. Пример архива:
tarantooldb-documentation-2.0.0.tar.gz
. Примерup_with_docker_compose
расположен в таком архиве в директории./doc/examples/up_with_docker_compose/
.Отдельный архив up_with_docker_compose.tar.gz, скачанный c сайта Tarantool.
Запуск стенда¶
Перейдите в директорию примера up_with_docker_compose
:
cd ./doc/examples/up_with_docker_compose/
Запустите кластер Tarantool DB:
make start
Команда развернет стенд, состоящий из:
кластера Tarantool DB:
2 роутера;
2 набора реплик по 3 хранилища;
1 Tarantool Cluster Manager (TCM);
кластера etcd из 3 узлов;
средств мониторинга (Prometheus, Grafana).
После запуска должны работать все контейнеры, кроме init_host.
Работа в веб-интерфейсе¶
В качестве веб-интерфейса кластера Tarantool DB используется Tarantool Cluster Manager, или TCM. Tarantool Cluster Manager – это инструмент для настройки и отслеживания кластеров Tarantool EE и управления ими. Подробная информация о TCM приведена в документации Tarantool.
TCM станет доступен после запуска стенда по адресу http://localhost:8081. Общее описание вкладок TCM приведено в разделе Обзор веб-интерфейса.
Чтобы войти в TCM, откройте в браузере адрес http://localhost:8081. Логин и пароль для входа:
Username:
admin
Password:
secret
Пароль для входа указан в конфигурации TCM в файле tcm.yml
(см. опцию TCM security.bootstrap-password):
security:
bootstrap-password: secret
Если секция security
не указана в файле, пароль будет сгенерирован автоматически.
Чтобы получить сгенерированный пароль, используйте такую команду:
docker compose logs tcm-1 | grep "super admin"
В TCM откройте вкладку Stateboard. После применения настроек кластер будет выглядеть так:
Создание спейса¶
После запуска с кластером Tarantool DB можно работать через веб-интерфейс TCM, коннекторы или консоль tt CLI.
Пользовательские объекты, например спейсы, создаются в базе данных с помощью миграций.
В примере во время запуска стенда создан спейс bands
.
Спейс имеет такой формат:
local space_bands = box.schema.space.create('bands', {
if_not_exists = true,
format = {
{ name = 'id', type = 'integer' },
{ name = 'bucket_id', type = 'unsigned' },
{ name = 'band_name', type = 'string' },
{ name = 'year', type = 'integer' },
},
})
space_bands:create_index('primary_key', { parts = {'id'}, if_not_exists = true})
space_bands:create_index('bucket_id', { parts = {'bucket_id'}, unique = false, if_not_exists = true})
helpers.register_sharding_key(space_bands.name, {'id'})
Код создания спейса
описан в файле migrations/scenario/002_create_space_bands.lua
. Чтобы применить этот код,
используются команды tt CLI:
tt migrations publish http://etcd1:2379/tdb migrations
tt migrations up http://etcd1:2379/tdb --tarantool-cluster-username=admin --tarantool-cluster-password=secret-cluster-cookie
Узнать больше о командах tt migrations
можно в документации Tarantool.
Содержимое спейса на каждом узле кластера можно просмотреть в TCM во вкладке Tuples.
Запросы к данным c помощью модуля CRUD¶
Чтобы начать работу с базой данных через интерактивную консоль Tarantool, нужно подключиться к узлу кластера. Сделать это можно двумя способами:
в веб-интерфейсе TCM;
в терминале с помощью утилиты tt CLI:
tt connect admin:secret-cluster-cookie@localhost:3301
Подключитесь к роутеру, используя первый способ – через TCM. Для этого:
Перейдите на вкладку Stateboard.
Нажмите на набор реплик
router-msk
.Выберите узел
router-msk
и в открывшемся окне перейдите на вкладку Terminal:
Во вкладке Terminal добавьте в спейс bands
несколько кортежей:
crud.insert_object('bands', {id = 1, band_name = 'Roxette', year = 1986})
crud.insert_object('bands', {id = 2, band_name = 'Scorpions', year = 1965})
crud.insert_object('bands', {id = 3, band_name = 'Ace of Base', year = 1987})
crud.insert_object('bands', {id = 4, band_name = 'The Beatles', year = 1960})
После этого просмотрите содержимое спейса с помощью операции crud.select()
:
crud.select('bands')
Вывод выглядит так:
---
- metadata: [{'name': 'id', 'type': 'integer'}, {'name': 'bucket_id', 'type': 'unsigned'},
{'name': 'band_name', 'type': 'string'}, {'name': 'year', 'type': 'integer'}]
rows:
- [1, 12477, 'Roxette', 1986]
- [2, 21401, 'Scorpions', 1965]
- [3, 11804, 'Ace of Base', 1987]
- [4, 28161, 'The Beatles', 1960]
- null
...
Теперь прочитайте запись, у которой id = 1
:
crud.get('bands', 1)
---
- rows:
- [1, 12477, 'Roxette', 1986]
metadata: [{'name': 'id', 'type': 'integer'}, {'name': 'bucket_id', 'type': 'unsigned'},
{'name': 'band_name', 'type': 'string'}, {'name': 'year', 'type': 'integer'}]
- null
...
Теперь обновите запись с id = 3
, увеличив значение на единицу:
crud.update('bands', 3, {{'+', 'year', 1}})
---
- rows:
- [3, 11804, 'Ace of Base', 1988]
metadata: [{'name': 'id', 'type': 'integer'}, {'name': 'bucket_id', 'type': 'unsigned'},
{'name': 'band_name', 'type': 'string'}, {'name': 'year', 'type': 'integer'}]
- null
...
Удалите запись с id = 4
:
crud.delete('bands', 4)
---
- rows:
- [4, 28161, 'The Beatles', 1960]
metadata: [{'name': 'id', 'type': 'integer'}, {'name': 'bucket_id', 'type': 'unsigned'},
{'name': 'band_name', 'type': 'string'}, {'name': 'year', 'type': 'integer'}]
- null
...
Просмотрите еще раз содержимое спейса bands
:
crud.select('bands')
---
- metadata: [{'name': 'id', 'type': 'integer'}, {'name': 'bucket_id', 'type': 'unsigned'},
{'name': 'band_name', 'type': 'string'}, {'name': 'year', 'type': 'integer'}]
rows:
- [1, 12477, 'Roxette', 1986]
- [2, 21401, 'Scorpions', 1965]
- [3, 11804, 'Ace of Base', 1988]
- null
...
Здесь:
значение
year
в кортеже сid = 3
увеличилось на 1;запись с
id = 4
успешно удалена.
Проверка работы кластера при отказах¶
Отказ – это любое событие, которое приводит к недоступности узла кластера. Примеры отказов: потеря связи с узлом, выход из строя оборудования с расположенным на нем узлом.
Этот пример можно выполнить на локально развёрнутом кластере с помощью Docker Compose;
Имитация отказа в Docker Compose¶
Для имитации отказа вернитесь в локальный терминал и остановите узлы кластера с помощью команды docker compose stop
:
cd cluster && docker compose stop tarantool-storage-1-msk
cd cluster && docker compose stop tarantool-storage-2-spb
Оба узла отмечены в TCM серым цветом – эти экземпляры теперь недоступны. Чтобы открыть список ошибок, нажмите на любой из этих узлов и перейдите в раздел с ошибками. Наборы реплик отмечены красным, так как в них есть нерабочий узел кластера. Если в момент выключения узел был лидером набора реплик, будет выбран новый лидер. Задать это можно в опции конфигурации replication.failover:
replication:
failover: election
Проверка работы кластера¶
Чтобы проверить, что остановленные узлы не мешают работе кластера, во вкладке Terminal добавьте несколько новых записей:
crud.insert_object('bands', {id = 4, band_name = 'The Beatles', year = 1960})
Посмотрите повторно содержимое таблицы:
crud.select('bands')
Ответ выглядит так:
---
- metadata: [{'name': 'id', 'type': 'integer'}, {'name': 'bucket_id', 'type': 'unsigned'},
{'name': 'band_name', 'type': 'string'}, {'name': 'year', 'type': 'integer'}]
rows:
- [1, 12477, 'Roxette', 1986]
- [2, 21401, 'Scorpions', 1965]
- [3, 11804, 'Ace of Base', 1988]
- [4, 28161, 'The Beatles', 1960]
- null
...
Изменение конфигурации кластера¶
Перед изменением конфигурации кластера, например, при добавлении новых наборов реплик или перераспределении данных между узлами, требуется выполнить несколько предварительных шагов. Эти шаги необходимы для обеспечения стабильной работы запросов к данным.
Перед изменением конфигурации кластера:
Приостановите любые DML-операции (insert, update, delete) во всех компонентах системы.
Выполните масштабирование или инициируйте ребалансировку.
Дождитесь полного завершения процесса миграции бакетов.
На всех роутерах выполните сброс маршрутов:
vshard.router._route_map_clear()
Возобновите выполнение DML-операций.
После этого вы можете выполнить изменение конфигурации кластера.
Важно
Несоблюдение этой последовательности шагов перед изменением конфигурации может привести к некорректной маршрутизации запросов, в том числе к дублированию записей, потерянным обновлениям или несогласованными данными между наборами реплик в процессе миграции бакетов.