Локальная конфигурация кластера и экземпляра
Конфигурация кластера в Tarantool задает общие параметры кластера, одинаковые для всех узлов кластера, и клиентский код миграций.
Копия такой конфигурации хранится на каждом экземпляре, входящем в состав кластера, а сам кластер автоматически синхронизирует
эти копии.
Конфигурация кластера определяет топологию кластера, восстановление после сбоев (failover),
параметры vshard, настройки аутентификации, управление списками контроля доступа (ACL), а также настройки, устанавливаемые пользователем.
Конфигурация кластера не содержит параметры для конкретного экземпляра — порты, рабочие каталоги и настройки
памяти.
Содержание:
- Представление кластерной конфигурации
- Настройка параметров роли
- Загрузка конфигурации кластера
- Пример работы с кластерной конфигурацией
Представить кластерную конфигурацию можно двумя способами:
-
Единый YAML-файл — заданные секции конфигурации собраны в одном файле
config.yml. Секции конфигурации представлены в виде соответствующего блока внутри файла. Это представление конфигурации компактно, его удобно использовать для хранения и передачи данных. -
Несколько YAML-файлов — каждая секция конфигурации находится в отдельном файле. Этот подход позволяет гибко управлять конфигурацией и редактировать отдельные ее части.
Пример единого файла конфигурации config.yml:
# config.yml---auth: { ... }crud: { ... }metrics: { ... }migrations: { ... }topology: { ... }schema: { ... }user_custom_config: { ... }vshard_groups: { ... }...
В файловой системе схема конфигурации кластера имеет вид древовидной структуры.
Директория 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.
Чтобы обновить конфигурацию через веб-интерфейс, выполните следующие шаги:
- В веб-интерфейсе перейдите на вкладку Configuration files.
- При необходимости скачайте текущую версию конфигурационного файла, нажав на кнопку Download.
- Внесите необходимые изменения в конфигурационный файл.
Добавлять, изменять и удалять можно любые разделы, кроме системных (например,
topology,vshard,vshard_groups). - Нажмите кнопку Upload configuration, чтобы применить обновленный файл конфигурации. Кластер проверяет изменения, отклоняя неприемлемые, а затем распространяет новую конфигурацию по всем узлам кластера. Если файл обновлен успешно, появится соответствующее сообщение в нижней части экрана. Если при попытке применить новые настройки возникла проблема, появится сообщение об ошибке.
Чтобы объединить несколько конфигураций в единый файл, можно использовать 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-операции при балансировке могут завершаться с ошибками. Для исправления ошибок требуется повторно выполнить соответствующие запросы;
-
Когда
*_many-запрос выполняется над данными из нескольких шардов, на роутере эти данные автоматически разбиваются на пачки по шардам и параллельно отправляются на соответствующие узлы хранилища. Во время балансировки запрос может завершиться с ошибкой на некоторых хранилищах. В этом случае операция будет выполнена частично, а пользователю вернется ошибка с указанием хранилища, где не удалось выполнить запрос. Пользователю нужно быть готовым к тому, что операция может быть выполнена не полностью, и при необходимости повторить соответствующие запросы или выполнить другие необходимые действия; -
При выполнении операций SELECT во время балансировки часть записей в ответе может дублироваться или наоборот отсутствовать. Вероятность такого сценария увеличивается, если запросы на выборку выполняются по большому количеству шардов.
В примере добавлена роль 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 -
Структура файла теперь выглядит так:
