Конфигурация кластера¶
Tarantool позволяет настроить полную топологию кластера, определить параметры для отдельных экземпляров и задать клиентский код миграций. Каждый экземпляр использует эту конфигурацию при запуске, чтобы организовать кластер. Конфигурация кластера определяет топологию кластера, восстановление после сбоев (failover), параметры шардирования, настройки модулей, настройки аутентификации, управление списками контроля доступа (ACL), а также настройки, заданные пользователем. В конфигурации также можно задать параметры для конкретного экземпляра, например настройки подключения, память, рабочие каталоги и параметры снимков данных (snapshots).
Доступны два способа хранения конфигурации:
Централизованная конфигурация. Данные конфигурации хранятся в едином месте – в хранилище на базе etcd или Tarantool, все изменения конфигурации экземпляры кластера получают из этого централизованного хранилища;
Локальная конфигурация в YAML-файле для каждого экземпляра в составе кластера. Такой способ предполагает, что все экземпляры кластера используют идентичные файлы конфигурации. Копия конфигурации хранится на каждом экземпляре кластера, а сам кластер автоматически синхронизирует эти копии.
Узнать больше о способах настройки конфигурации можно в документации Tarantool.
Содержание:
Представление кластерной конфигурации¶
Представить кластерную конфигурацию можно двумя способами:
Единый YAML-файл – заданные секции конфигурации собраны в одном файле
config.yml
. Секции конфигурации представлены в виде соответствующих блоков внутри файла. Это представление конфигурации компактно, его удобно использовать для хранения и передачи данных.Несколько YAML-файлов – конфигурация разбита на несколько файлов. Вместе эти файлы составляют единую конфигурацию кластера. Этот подход можно использовать, чтобы организовать конфигурацию в большом кластере. В веб-интерфейсе TCM все файлы, которые формируют конфигурацию кластера, отображаются в списке на вкладке Configuration.
Пример единого файла конфигурации config.yml
:
credentials:
users:
admin:
password: 'secret-cluster-cookie'
roles: [super]
client:
password: 'secret'
roles: [super]
replicator:
password: 'secret'
roles: [replication]
storage:
password: 'secret'
roles: [sharding]
iproto:
advertise:
peer:
login: replicator
sharding:
login: storage
sharding:
bucket_count: 30000
roles_cfg:
roles.metrics-export:
http:
- endpoints:
- format: prometheus
path: /metrics
listen: 8081
groups:
routers:
replication:
failover: manual
sharding:
roles: [router]
roles:
- roles.crud-router
- roles.metrics-export
- roles.dictionary-router
roles_cfg:
roles.crud-router:
stats: true
stats_driver: metrics
stats_quantiles: true
stats_quantile_tolerated_error: 0.001
stats_quantile_age_buckets_count: 5
stats_quantile_max_age_time: 180
replicasets:
router-msk:
leader: router-msk
instances:
router-msk:
iproto:
listen:
- uri: tarantool-router-msk:3301
advertise:
client: tarantool-router-msk:3301
router-spb:
leader: router-spb
instances:
router-spb:
iproto:
listen:
- uri: tarantool-router-spb:3301
advertise:
client: tarantool-router-spb:3301
storages:
replication:
failover: election
sharding:
roles: [storage]
roles:
- roles.crud-storage
- roles.metrics-export
- roles.dictionary-storage
roles_cfg:
roles.expirationd: [ ]
replicasets:
storage-1:
instances:
storage-1-msk:
iproto:
listen:
- uri: tarantool-storage-1-msk:3301
advertise:
client: tarantool-storage-1-msk:3301
storage-1-spb:
iproto:
listen:
- uri: tarantool-storage-1-spb:3301
advertise:
client: tarantool-storage-1-spb:3301
storage-1-brn:
iproto:
listen:
- uri: tarantool-storage-1-brn:3301
advertise:
client: tarantool-storage-1-brn:3301
storage-2:
instances:
storage-2-msk:
iproto:
listen:
- uri: tarantool-storage-2-msk:3301
advertise:
client: tarantool-storage-2-msk:3301
storage-2-spb:
iproto:
listen:
- uri: tarantool-storage-2-spb:3301
advertise:
client: tarantool-storage-2-spb:3301
storage-2-brn:
iproto:
listen:
- uri: tarantool-storage-2-brn:3301
advertise:
client: tarantool-storage-2-brn:3301
Загрузка конфигурации кластера¶
Загрузить новую конфигурацию кластера или обновить уже существующую можно двумя способами:
Перед обновлением существующей конфигурации кластера, например, при добавлении новых наборов реплик или перераспределении данных между узлами, требуется выполнить несколько предварительных шагов. Эти шаги необходимы для обеспечения стабильной работы запросов к данным.
Перед изменением конфигурации кластера:
Приостановите любые DML-операции (insert, update, delete) во всех компонентах системы.
Выполните масштабирование или инициируйте ребалансировку.
Дождитесь полного завершения процесса миграции бакетов.
На всех роутерах выполните сброс маршрутов:
vshard.router._route_map_clear()
Возобновите выполнение DML-операций.
После этого вы можете выполнить изменение конфигурации кластера.
Важно
Несоблюдение этой последовательности шагов перед изменением конфигурации может привести к некорректной маршрутизации запросов, в том числе к дублированию записей, потерянным обновлениям или несогласованными данными между наборами реплик в процессе миграции бакетов.
Загрузка конфигурации через веб-интерфейс¶
Чтобы обновить конфигурацию через TCM, выполните следующие шаги:
В TCM перейдите на вкладку Configuration.
При необходимости скачайте текущую версию конфигурационного файла. Для этого выберите нужный файли и нажмите на кнопку Download в появившемся меню.
Внесите необходимые изменения в конфигурационный файл.
Чтобы сохранить черновик конфигурации без отправки в централизованное хранилище конфигурации, нажмите Save. Чтобы применить обновленный файл конфигурации и загрузить его в централизованное хранилище, нажмите Apply. Кластер проверяет изменения, отклоняя неприемлемые, а затем распространяет новую конфигурацию по всем узлам кластера. Если файл обновлен успешно, появится соответствующее сообщение в нижней части экрана. Если при попытке применить новые настройки возникла проблема, появится сообщение об ошибке.
Загрузка конфигурации через tt CLI¶
Обновить конфигурацию через утилиту tt можно следующим образом:
Перейдите в директорию, где хранится файл конфигурации
config.yaml
.Загрузите конфигурацию кластера в централизованное хранилище из YAML-файла, используя команду tt cluster publish:
tt cluster publish http://etcd1:2379/tdb config.yml
Здесь:
http://etcd1:2379/tdb
– адрес одного из узлов ETCD;config.yml
– публикуемый файл конфигурации.
Пример работы с кластерной конфигурацией¶
В конфигурации кластера можно хранить данные и параметры для конкретной роли.
Гибкость конфигурации кластера позволяет изменять систему под различные потребности, в том числе под требования конкретных ролей.
В примере добавлены роли crud
, которые позволяют выполнять на кластере CRUD-операции
(создание, чтение, обновление, удаление) через IPROTO API.
Чтобы добавить роль crud
в запущенный кластер через TCM:
В TCM перейдите на вкладку Configuration.
Создайте файл
crud.yml
. В нем будут храниться настройки ролиcrud
.Укажите в файле такую конфигурацию:
roles: - roles.crud-router - roles.crud-storage roles_cfg: roles.crud-router: crud: stats: true stats_driver: metrics stats_quantiles: false stats_quantile_tolerated_error: 0.001 stats_quantile_age_buckets_count: 5 stats_quantile_max_age_time: 180
Здесь:
опция roles включает технологические роли
roles.crud-router
иroles.crud-storage
;опция roles_cfg задает конфигурацию ролей
crud
для роутера и хранилищ.
Узнать больше: Включение и настройка ролей.
Подробное описание опций crud
можно прочитать в справочнике конфигурации.
Нажмите кнопку Apply.
Через TCM можно менять состояние работы статистики и другие параметры в реальном времени без перезапуска кластера или экземпляров. Для этого поменяйте значение параметра и нажмите кнопку Apply.