Локальная конфигурация кластера и экземпляра¶
Конфигурация кластера в Tarantool задает общие параметры кластера, одинаковые для всех узлов кластера, и клиентский код миграций.
Копия такой конфигурации хранится на каждом экземпляре, входящем в состав кластера, а сам кластер автоматически синхронизирует
эти копии.
Конфигурация кластера определяет топологию кластера, восстановление после сбоев (failover),
параметры vshard, настройки аутентификации, управление списками контроля доступа (ACL), а также настройки, устанавливаемые пользователем.
Конфигурация кластера не содержит параметры для конкретного экземпляра – порты, рабочие каталоги и настройки
памяти.
Содержание:
Представление кластерной конфигурации¶
Представить кластерную конфигурацию можно двумя способами:
Единый YAML-файл – заданные секции конфигурации собраны в одном файле
config.yml. Секции конфигурации представлены в виде соответствующего блока внутри файла. Это представление конфигурации компактно, его удобно использовать для хранения и передачи данных.Несколько YAML-файлов – каждая секция конфигурации находится в отдельном файле. Этот подход позволяет гибко управлять конфигурацией и редактировать отдельные ее части.
Конфигурация в едином YAML-файле¶
Пример единого файла конфигурации config.yml:
# config.yml
---
auth: { ... }
crud: { ... }
metrics: { ... }
migrations: { ... }
topology: { ... }
schema: { ... }
user_custom_config: { ... }
vshard_groups: { ... }
...
Конфигурация в нескольких YAML-файлах¶
В файловой системе схема конфигурации кластера имеет вид древовидной структуры.
Директория config содержит основные секции конфигурации.
По умолчанию в директории определены три секции конфигурации: auth.yml, topology.yml и vshard_groups.yml.
config/
├── auth.yml
├── topology.yml
└── vshard_groups.yml
По мере добавления пользовательских секций конфигурации схема увеличивается:
config/
├── auth.yml
├── crud.yml
├── metrics.yml
├── migrations.yml
├── schema.yml
├── user_custom_config.yml
└── vshard_groups.yml
Настройка параметров роли¶
В конфигурации кластера можно хранить данные и параметры для конкретной роли.
Конфигурация кластера поддерживает формат YAML, а также обычные текстовые разделы.
Чтобы упорядочить разделы, можно использовать вложенные каталоги:
# config.yml
---
migrations/source/001_init.lua: { ... }
...
Пример структуры с вложенным каталогом:

Гибкость конфигурации кластера позволяет изменять систему под различные потребности, в том числе под требования конкретных ролей.
Загрузка конфигурации кластера¶
Есть несколько способов обновить конфигурацию кластера:
Lua API – обеспечивает программную гибкость и позволяет автоматизировать процесс;
HTTP API – позволяет удобно работать с кластером с помощью стандартных HTTP-запросов;
веб-интерфейс Tarantool DB.
Важно
Порядок работы с Tarantool DataBase при изменении конфигурации шардированного кластера описан в разделе Режим работы кластера при изменении конфигурации. Шаги, описанные в разделе, необходимы для правильной маршрутизации и согласованного поведения модуля CRUD после обновления топологии кластера.
Обновление конфигурации через веб-интерфейс¶
Чтобы обновить конфигурацию через веб-интерфейс, выполните следующие шаги:
В веб-интерфейсе перейдите на вкладку Configuration files.
При необходимости скачайте текущую версию конфигурационного файла, нажав на кнопку Download.
Внесите необходимые изменения в конфигурационный файл. Добавлять, изменять и удалять можно любые разделы, кроме системных (например,
topology,vshard,vshard_groups).Нажмите кнопку Upload configuration, чтобы применить обновленный файл конфигурации. Кластер проверяет изменения, отклоняя неприемлемые, а затем распространяет новую конфигурацию по всем узлам кластера. Если файл обновлен успешно, появится соответствующее сообщение в нижней части экрана. Если при попытке применить новые настройки возникла проблема, появится сообщение об ошибке.
Примечание
Начиная с версии 1.2.5, проверить успешность обновления конфигурации на всех узлах кластера можно с помощью метрики
tnt_cartridge_config_checksum.
Метрика отражает контрольную сумму конфигурации на экземпляре Cartridge и позволяет обнаружить расхождения в конфигурации
на разных узлах кластера.
Обновление конфигурации через HTTP API¶
Чтобы объединить несколько конфигураций в единый файл, можно использовать HTTP API. HTTP API работает только с одним файлом конфигурации старого образца.
В примере ниже создан файл конфигурации config.yml:
cat > config.yml << CONFIG
---
custom_section: { }
...
CONFIG
Загрузить новую конфигурацию в кластер можно следующей командой:
curl -v "localhost:8081/admin/config" -X PUT --data-binary @config.yml
Скачать текущую конфигурацию из кластера можно так:
curl -v "localhost:8081/admin/config" -o config.yml
Скачать можно только разделы, связанные с ролями.
Скачать или загрузить системные разделы (например, topology, auth, users_acl) не получится.
Если включена авторизация, используйте параметр --user с учетными данными
пользователя: --user username:password.
Этот параметр обеспечивает безопасное взаимодействие с API, требующим аутентификации.
Режим работы кластера при изменении конфигурации¶
После изменения конфигурации шардированного кластера, например, при добавлении нового набора реплик или изменении веса шардов, начинается балансировка сегментов. При балансировке выполняется миграция сегментов – перенос сегментов с более нагруженных шардов на менее нагруженные.
Начиная с версии Tarantool DataBase 1.2.6 при старте балансировки кластер автоматически включает безопасный режим, чтобы обеспечить согласованность и целостность данных. Производительность кластера в этом режиме снижается (примерно на 15% для операций REPLACE). Безопасный режим включается независимо на каждом хранилище, участвующем в балансировке сегментов. Запросы к спейсам на движке vinyl всегда выполняются в безопасном режиме независимо от текущего статуса безопасного режима.
Проверить, включен ли безопасный режим, можно двумя способами:
вызвать метод
crud.rebalance_safe_mode_status();проверить значение метрики
tnt_crud_storage_safe_mode_enabled.
Чтобы вернуть кластер в нормальный режим работы после окончания процесса балансировки, выполните следующие шаги:
Дождитесь полного завершения миграции сегментов.
Очистите кэш карты маршрутов на каждом роутере:
crud.rebalance.router_cache_clear()
Проверить время последней очистки кэша можно с помощью метрики
tnt_crud_router_cache_clear_ts.Отключите безопасный режим вручную на каждом хранилище – как на мастер-узлах, так и на репликах:
crud.rebalance_safe_mode_disable()
Важно
Шаги выше необходимы для правильной маршрутизации и согласованного поведения модуля CRUD после обновления топологии. Несоблюдение этой последовательности шагов после изменения конфигурации может привести к возникновению проблем, в том числе к дублированию записей, отсутствию обновлений или несогласованности состояния между наборами реплик из-за неправильной маршрутизации во время или после балансировки. В частности, если пропустить шаг по очистке кэша на роутере, при отключении безопасного режима возможна запись данных на некорректный шард.
Кроме того, существуют следующие особенности, касающиеся балансировки сегментов:
Поскольку во время миграции сегмента невозможно выполнять операции с кортежами в этом сегменте, CRUD-операции при балансировке могут завершаться с ошибками. Для исправления ошибок требуется повторно выполнить соответствующие запросы;
Когда
*_many-запрос выполняется над данными из нескольких шардов, на роутере эти данные автоматически разбиваются на пачки по шардам и параллельно отправляются на соответствующие узлы хранилища. Во время балансировки запрос может завершиться с ошибкой на некоторых хранилищах. В этом случае операция будет выполнена частично, а пользователю вернется ошибка с указанием хранилища, где не удалось выполнить запрос. Пользователю нужно быть готовым к тому, что операция может быть выполнена не полностью, и при необходимости повторить соответствующие запросы или выполнить другие необходимые действия;При выполнении операций SELECT во время балансировки часть записей в ответе может дублироваться или наоборот отсутствовать. Вероятность такого сценария увеличивается, если запросы на выборку выполняются по большому количеству шардов.
Важно
Если используется Tarantool DB версии ниже 1.2.6, список шагов будет отличаться. Перед изменением конфигурации кластера:
Приостановите любые DML-операции (insert, update, delete) во всех компонентах системы.
Выполните масштабирование или инициируйте ребалансировку.
Дождитесь полного завершения процесса миграции сегментов.
На всех роутерах выполните сброс кэша карты маршрутов:
vshard.router._route_map_clear()
Возобновите выполнение DML-операций.
После этого вы можете выполнить изменение конфигурации кластера.
Несоблюдение этой последовательности шагов перед изменением конфигурации может привести к некорректной маршрутизации запросов, в том числе к дублированию записей, потерянным обновлениям или несогласованными данными между наборами реплик в процессе миграции сегментов.
Пример работы с кластерной конфигурацией¶
В примере добавлена роль crud, которая позволяет выполнять на кластере CRUD-операции
(создание, чтение, обновление, удаление) через IPROTO API.
Настроить эту роль можно тремя способами:
через Lua API;
через CLI – с помощью прямого подключения к экземплярам роутеров и настройки нужных параметров
crud;с помощью кластерной конфигурации.
В примере ниже роль crud настроена с помощью кластерной конфигурации.
Добавление конфигурации в запущенный кластер¶
Есть два способа добавить конфигурацию в запущенный кластер:
через веб-интерфейс Tarantool DB;
через файл
config.yml.
Веб-интерфейс
В веб-интерфейсе Tarantool DB перейдите на вкладку Code.
Создайте файл
crud.yml. В нем будут храниться настройки ролиcrud.Укажите в файле конфигурацию ниже:
--- stats: true ...
Здесь:
stats– включение сбора метрик CRUD.
Нажмите кнопку Apply.

Через веб-интерфейс можно менять состояние работы статистики и другие параметры в реальном времени без перезапуска кластера или экземпляров. Для этого поменяйте значение параметра и нажмите кнопку Apply.
Файл config.yaml
Перейдите в директорию
bootstrap. В ней хранится файлconfig.yaml.В
config.yamlдобавьте секциюcrudсо следующими настройками:crud: stats: true
Структура файла теперь выглядит так:
