Конфигурация и запуск кластеров¶
Для работы TCF требуется настроить два идентичных кластера, один из которых в системе TCF будет активным, а другой пассивным:
- активный кластер принимает запросы от приложения; 
- пассивный кластер содержит копию данных активного кластера, но не принимает запросы от приложения. 
В этом разделе описано, как задать конфигурацию для каждого из кластеров, а затем запустить их. В приведенном примере разворачиваются два кластера Tarantool DB, каждый кластер состоит из набора реплик с 4 узлами (1 роутером и 3 экземплярами хранилища). Для корректной работы примера необходимо использовать Tarantool DB версии 2.2.0 или выше. Поддерживаемые типы кластеров описаны в соответствующем разделе.
Начиная с версии 0.7.0, TCF поддерживает работу с расширениями журнала упреждающей записи (WAL extensions) и с кластерами, запущенными в режиме синхронной репликации. Использование расширений журнала упреждающей записи настоятельно рекомендуется при работе с TCF, поскольку они повышают надёжность и согласованность данных. Синхронная репликация остаётся опциональной и может быть включена при необходимости для повышения устойчивости. Подробнее см. в разделах Расширения WAL и Использование синхронных спейсов.
Внимание
Передача словарей Tarantool DB через TCF не поддерживается.
Перед настройкой и запуском кластеров требуется выполнить следующие шаги:
- Распаковать архивы с TCF и TDB версии 2.2.0 или выше. Для этого необходимо заранее выполнить шаги из соответствующего раздела руководства по установке. 
- Подготовить и запустить кластер хранилища состояния на основе etcd или Tarantool – в этом кластере хранятся конфигурация кластеров и их состояние активный-пассивный. В данном примере используется хранилище состояния на основе Tarantool. 
Создание конфигурации кластеров Tarantool DB¶
Конфигурация для каждого из кластеров задается в отдельном YAML-файле конфигурации. Эта конфигурация задает топологию кластера и параметры его экземпляров. Полный список опций конфигурации для кластеров Tarantool и продуктов на его основе приведен в справочнике в документации Tarantool.
Файлы с финальной конфигурацией активного и пассивного кластеров приведены в разделе Создание кластеров этого руководства.
Настройка пользователей и соединения¶
Создайте файл source.yaml, в который будет добавлена конфигурация активного кластера (далее Tarantool Cluster 1).
В созданном файле в секции credentials.users задайте пользователей, которые взаимодействуют с компонентами Tarantool или TCF и
укажите, какие права они имеют:
credentials:
  users:
    dbadmin:
      password: secret
      roles: [super]
    replicator:
      password: replicator_password
      roles: 
        - replication
        - dictionary_api_service
    tcm_tarantool:
      password: tcm_tarantool_password
      roles: [super]
    storage:
      password: storage_password
      roles: [sharding]
    tcf_replicator:
      password: secret
      roles: [super]
    tcf_dml:
      password: secret
      roles: [super]
Здесь:
- dbadmin– администратор TCF;
- replicator– пользователь для соединения узлов Tarantool Cluster 1 друг с другом;
- tcm_tarantool– пользователь для подключения TCM к экземплярам Tarantool Cluster 1;
- storage– пользователь используется при запросах роутера к экземплярам хранилища;
- tcf_replicator– пользователь для репликации между кластерами, которыми управляет TCF;
- tcf_dml– пользователь используется внешними пользователями/приложениями для выполнения операций с данными (DML – Data Manipulation Language).
Подробнее о пользователях, необходимых для корректной работы TCF, можно узнать в разделе Роли и пользователи.
Для корректной работы кластера Tarantool нужно настроить связь между его экземплярами. Параметры подключения можно задать в секции iproto:
iproto:
  advertise:
    peer:
      login: replicator
    sharding:
      login: storage
В секции credentials создаются пользователи replicator и storage.
iproto.advertise.peer.login указывает, что другие экземпляры Tarantool Cluster 1 должны подключаться к адресу, определенному в
опции iproto.listen, с помощью пользователя replicator.
iproto.advertise.sharding.login указывает, что роутер должен подключаться к экземплярам хранилища на адрес,
определенный в iproto.listen, с помощью пользователя storage.
Узнать больше: Конфигурация соединений в Tarantool.
Настройка репликации¶
Настройки репликации можно задать в секции replication:
replication:
  failover: manual
  bootstrap_strategy: config
#..
groups:
  routers:
    replicasets:
      rsrouter001:
        leader: router001
        bootstrap_leader: router001
#..
Здесь:
- replication.failover– режим выбора узла лидера в наборе реплик. В примере узел лидера назначается явно в опции- <replicaset_name>.leader;
- replication.bootstrap_strategy– выбранная стратегия для первоначальной загрузки набора реплик. В примере узел для первоначальной загрузки задается в опции- <replicaset_name>.bootstrap_leader.
Конфигурация наборов реплик и экземпляров¶
Чтобы задать топологию кластера и определить настройки для конкретных экземпляров, в файле конфигурации используются секции
groups, replicasets и instances.
Узнать больше: Общая информация о конфигурации в Tarantool.
groups:
  routers:
    replicasets:
      rsrouter001:
        #...
        instances:
          router001:
            #...
            iproto:
              listen:
                - uri: 127.0.0.1:3307
              advertise:
                client: 127.0.0.1:3307
    app:
      module: app.vshard_bootstrapper
    sharding:
      roles: [router]
    #...
Здесь:
- iproto.listen.uri– адрес и порт для приема входящих запросов, заданный для конкретного экземпляра;
- iproto.advertise.client– адрес и порт, позволяющий другим экземплярам кластера или клиенту подключиться к текущему экземпляру.
Настройка технологических ролей¶
Технологическая роль – это модуль, реализующий определенные функции или логику. Подробная информация о технологических ролях приведена в документации Tarantool. Для работы непосредственно TCF в конфигурации кластеров используются две технологические роли – roles.tcf-worker и roles.tcf-coordinator. Другие технологические роли, заданные для экземпляров в этом руководстве, используются для работы самих кластеров Tarantool DB.
Включить или выключить нужную технологическую роль для конкретных экземпляров в конфигурации можно без перезапуска этих экземпляров. Технологическая роль запускается при загрузке или перезагрузке конфигурации.
groups:
  routers:
    #...
    roles: [ roles.tcf-worker, roles.tcf-coordinator, roles.httpd, roles.crud-router, dictionary.roles.router ]
Здесь roles – список технологических ролей, заданных на конкретных экземплярах кластера.
В этом руководстве в конфигурации кластера используются следующие технологические роли:
- roles.tcf-worker– TCF-worker инициализирует и координирует переключение статусов кластеров (активный ↔ пассивный) и предоставляет базовый HTTP API для управления TCF. Назначается всем экземплярам типа- storageи- routerв кластере Tarantool, которыми управляет TCF;
- roles.tcf-coordinator– TCF-координатор отвечает за автоматическое переключение состояния. Чтобы обеспечить отказоустойчивость, в каждом кластере должно быть запущено два и более экземпляра Tarantool с этой ролью. Назначается выборочным экземплярам типа- storageи- routerв кластере Tarantool, которыми управляет TCF;
- roles.httpd– работа с HTTP-запросами для управления TCF. Роль задается на всех экземплярах кластера. Адрес отправки HTTP-запроса для конкретного экземпляра определяется в секции- roles.httpd.default.listen;
- roles.crud-router– предоставляет IPROTO API для CRUD-операций (создание, чтение, обновление, удаление) на кластере. Задается на узлах-роутерах. Используется совместно с ролью- roles.crud-storage, которая задается на узлах типа- storageдля выполнения CRUD-операций. Узнать больше в документации Tarantool DB;
- dictionary.roles.router– внешнее управление словарями в Tarantool DB. Задается на узлах-роутерах. Используется совместно с ролью- dictionary.roles.storage, которая задается на узлах типа- storageдля хранения данных словарей. Узнать больше в документации Tarantool DB;
- roles.expirationd– контроль за устаревающими данными. Узнать больше в документации Tarantool DB.
Настройки технологических ролей для конкретного экземпляра или группы экземпляров задаются в секции roles_cfg.
Пример конфигурации roles.tcf-worker:
roles_cfg:
  roles.tcf-worker:
    cluster_1: cluster_a
    cluster_2: cluster_b
    initial_status: active
    dml_users: [ tcf_dml ]
    replication_user: tcf_replicator
    replication_password: secret
    storage: config_storage
    storage_params:
      endpoints:
        - uri: 127.0.0.1:3301
          login: tarantool_config_storage
          password: tarantool_config_storage_password
        - uri: 127.0.0.1:3302
          login: tarantool_config_storage
          password: tarantool_config_storage_password
        - uri: 127.0.0.1:3303
          login: tarantool_config_storage
          password: tarantool_config_storage_password
В примере настройки технологической роли roles.tcf-worker заданы на верхнем уровне конфигурации (global level), поскольку
эти настройки одинаковые для всех экземпляров кластера.
Здесь:
- cluster_1– имя кластера, для которого применяется конфигурация;
- cluster_2– имя соседнего кластера в системе TCF. Для кластера B значения параметров- cluster_1и- cluster_2меняются местами:- сluster_1:- cluster_b;
- сluster_2:- cluster_a;
 
- initial_status– состояние (активный-пассивный), в которое кластер переходит при первом запуске с использованием TCF. Для Tarantool Cluster 1 состояние при первом запуске будет- active, для Tarantool Cluster 2 –- passive;
- dml_users– список пользователей, доступ которым заблокирован на пассивном кластере;
- replication_userи- replication_password– имя и пароль пользователя для подключения репликаторов TCF;
- storage– тип хранилища конфигурации;
- storage_params– параметры хранилища конфигурации:- endpoints.uri– адреса узлов хранилища конфигурации;
- endpoints.login– пользователь для подключения экземпляров кластера к узлам хранилища конфигурации;
- endpoints.password– пароль для подключения экземпляров кластера к узлам хранилища конфигурации.
 
Пример конфигурации roles.tcf-coordinator:
replicasets:
  rsrouter001:
    #...
    instances:
      router001:
        roles_cfg:
          #...
          roles.tcf-coordinator:
            storage: config_storage
            storage_params:
              endpoints:
                - uri: 127.0.0.1:3301
                  login: tarantool_config_storage
                  password: tarantool_config_storage_password
                - uri: 127.0.0.1:3302
                  login: tarantool_config_storage
                  password: tarantool_config_storage_password
                - uri: 127.0.0.1:3303
                  login: tarantool_config_storage
                  password: tarantool_config_storage_password
Примечание
Если для хранения конфигурации кластера и состояния TCF используется одно и то же хранилище конфигурации, секции
roles.tcf-coordinator.storage и roles.tcf-coordinator.storage_params в конфигурации можно опустить.
Полный список поддерживаемых опций конфигурации roles.tcf-worker и roles.tcf-coordinator можно найти в разделе
Конфигурация кластера в YAML (Tarantool 3.x).
Расширения WAL¶
Начиная с версии 0.7.0, TCF поддерживает расширения журнала упреждающей записи (WAL extensions).
Такие расширения позволяют добавлять дополнительную информацию к каждой записи в журнале WAL.
В частности, расширения WAL позволяют хранить старый и новый кортежи вместе с ключом шардирования
(bucket_id) для каждой совершённой CRUD-операции.
В шардированном кластере ключ bucket_id используется для отправки запросов UPDATE и DELETE на конкретный набор реплик,
что повышает производительность обработки таких операций на больших кластерах.
Чтобы включить расширения WAL в конфигурации Tarantool 3.x, используйте опцию wal.ext.*:
wal:
  ext:
    new: true
    old: true
В конфигурации Tarantool 2.x на основе Cartridge это можно сделать с помощью опции wal_ext:
cartridge.cfg {
    {}, -- cartridge params
    {
        wal_ext = { old = true, new = true },
    },
}
Использование синхронных спейсов¶
Начиная с версии 0.7.0, TCF поддерживает работу с синхронными спейсами в кластерах. Синхронная репликация повышает консистентность данных и надежность их хранения внутри кластера: каждая синхронная транзакция проходит коммит лишь после репликации на определенном количестве экземпляров, и только тогда клиенту приходит подтверждение о завершении транзакции.
Примечание
Синхронная репликация поддерживается только внутри самих кластеров Tarantool. Репликация между кластерами TCF работает в асинхронном режиме.
В кластерах Tarantool по умолчанию используется асинхронная репликация. Синхронную репликацию при этом можно настроить для отдельных спейсов. TCF предоставляет одинаковые гарантии для кластеров как с асинхронными, так и с синхронными спейсами. TCF отправляет транзакции на пассивный кластер в момент их записи (коммита):
- синхронные транзакции – после репликации на определенном количестве экземпляров, в момент подтверждения транзакций; 
- асинхронные транзакции – сразу, не ожидая репликации на другие экземпляры. 
Порядок выполнения коммитов соответствует порядку вызова метода box.commit()
для каждой из транзакций, независимо от того, синхронные транзакции или асинхронные.
Если для одной из синхронных транзакций истечет время ожидания, эта транзакция будет отменена (rollback).
Вместе с ней будут отменены все последующие транзакции в очереди на репликацию.
Транзакции отменяются в порядке, обратном порядку вызова box.commit() для каждой из них, независимо от того,
синхронные транзакции или асинхронные.
Репликатор данных Gateway обрабатывает синхронные транзакции следующим образом:
- пропускает в пассивный кластер транзакции, подтвержденные в активном кластере; 
- отбрасывает транзакции, отмененные в активном кластере, чтобы они не попали в пассивный кластер. 
Компонент Destination обрабатывает полученные операции как асинхронные. Целевой спейс на пассивном кластере может быть как синхронным, так и асинхронным.
Внимание
Одновременное использование синхронных и асинхронных транзакций не рекомендуется. Если вы планируете использовать их совместно, свяжитесь с нами через форму обратной связи или напишите на sales@tarantool.io.
Включение синхронной репликации¶
Чтобы включить синхронную репликацию для спейса в кластере, задайте опцию
space_opts.is_sync при создании
или изменении этого спейса:
local space = box.schema.space.create('writers', { is_sync = true })
space:format({
    {name = 'id', type = 'number'},
    {name = 'bucket_id', type = 'number'},
    {name = 'name', type = 'string'},
    {name = 'age', type = 'number'},
})
space:create_index('primary', {parts = {'id'}})
space:create_index('bucket_id', {parts = {'bucket_id'}})
Примечание
Cинхронная репликация в кластерах с TCF настраивается так же, как и для кластеров Tarantool без TCF. Менять настройки компонентов Gateway и Destination при включении синхронной репликации в кластере не требуется.
Узнать больше:
- кластер Tarantool DB 2.x: Пример использования синхронной репликации 
- кластер Tarantool 3.x: Синхронная репликация 
- кластер Tarantool 2.x на основе Cartridge: Настройка синхронной репликации 
Настройка кластеров Tarantool DB¶
Создание кластеров¶
- Перейдите в директорию - tarantooldbи выполните в ней команду tt init. Команда создаст новое окружение для консольной утилиты tt CLI, в том числе файл конфигурации- tt.yaml.
- В директории - instances.enabledсозданного окружения создайте директории кластеров- cluster_aи- cluster_b.
- В директории - instances.enabled/cluster_aдобавьте файл- source.yamlс конфигурацией Tarantool Cluster 1, приведенной ниже. Экземпляры в этой конфигурации принимают входящие запросы на порты 3304–3307. Особенности конфигурации кластеров были описаны ранее в разделе Создание конфигурации кластеров Tarantool DB.- credentials: users: dbadmin: password: secret roles: [super] replicator: password: replicator_password roles: - replication - dictionary_api_service tcm_tarantool: password: tcm_tarantool_password roles: [super] storage: password: storage_password roles: [sharding] tcf_replicator: password: secret roles: [super] tcf_dml: password: secret roles: [super] replication: failover: manual bootstrap_strategy: config iproto: advertise: peer: login: replicator sharding: login: storage roles_cfg: roles.tcf-worker: cluster_1: cluster_a cluster_2: cluster_b initial_status: active dml_users: [ tcf_dml ] replication_user: tcf_replicator replication_password: secret storage: config_storage storage_params: endpoints: - uri: 127.0.0.1:3301 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3302 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3303 login: tarantool_config_storage password: tarantool_config_storage_password groups: routers: replicasets: rsrouter001: leader: router001 bootstrap_leader: router001 instances: router001: roles_cfg: roles.tcf-coordinator: storage: config_storage storage_params: endpoints: - uri: 127.0.0.1:3301 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3302 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3303 login: tarantool_config_storage password: tarantool_config_storage_password roles.httpd: default: listen: localhost:10001 iproto: listen: - uri: 127.0.0.1:3307 advertise: client: 127.0.0.1:3307 app: module: app.vshard_bootstrapper sharding: roles: [router] roles: - roles.tcf-worker - roles.tcf-coordinator - roles.httpd - roles.crud-router - dictionary.roles.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 storages: memtx: memory: 536870912 #512MiB replicasets: replicaset001: leader: instance004 bootstrap_leader: instance004 instances: instance004: roles_cfg: roles.httpd: default: listen: localhost:10101 roles.tcf-worker: cluster_1: cluster_a cluster_2: cluster_b initial_status: active dml_users: [ tcf_dml ] replication_user: tcf_replicator replication_password: secret storage: config_storage storage_params: endpoints: - uri: 127.0.0.1:3301 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3302 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3303 login: tarantool_config_storage password: tarantool_config_storage_password iproto: listen: - uri: 127.0.0.1:3304 advertise: client: 127.0.0.1:3304 instance005: roles_cfg: roles.httpd: default: listen: localhost:10102 iproto: listen: - uri: 127.0.0.1:3305 advertise: client: 127.0.0.1:3305 instance006: roles_cfg: roles.httpd: default: listen: localhost:10103 iproto: listen: - uri: 127.0.0.1:3306 advertise: client: 127.0.0.1:3306 sharding: roles: [storage] roles: - roles.tcf-worker - roles.httpd - roles.crud-storage - roles.expirationd - dictionary.roles.storage roles_cfg: roles.expirationd: [] 
- В директории - instances.enabled/cluster_aсоздайте файл- instances.yaml– список экземпляров, которые будут запущены в текущем окружении:- instance004: instance005: instance006: router001: 
- В директории - instances.enabled/cluster_aсоздайте файл- config.yaml– с настройками хранилища конфигурации на основе Tarantool, запущенного ранее.- config: storage: endpoints: - uri: 127.0.0.1:3301 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3302 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3303 login: tarantool_config_storage password: tarantool_config_storage_password prefix: /cluster1 - Здесь: - config.storage.endpoints.uri– адреса узлов хранилища конфигурации;
- config.storage.endpoints.login– пользователь для подключения экземпляров кластера к узлам хранилища конфигурации;
- config.storage.endpoints.password– пароль для подключения экземпляров кластера к узлам хранилища конфигурации;
- config.storage.prefix– префикс кластера, под которым хранится конфигурация для конкретного кластера.
 
- В директории - instances.enabled/cluster_bсоздайте файл- source.yamlс конфигурацией Tarantool Cluster 2, приведенной ниже. Экземпляры в этой конфигурации принимают входящие запросы на порты 3324–3327. Особенности конфигурации кластеров были описаны ранее в разделе Создание конфигурации кластеров Tarantool DB.- credentials: users: dbadmin: password: secret roles: [super] replicator: password: replicator_password roles: - replication - dictionary_api_service tcm_tarantool: password: tcm_tarantool_password roles: [super] storage: password: storage_password roles: [sharding] tcf_replicator: password: secret roles: [super] tcf_dml: password: secret roles: [super] replication: failover: manual bootstrap_strategy: config iproto: advertise: peer: login: replicator sharding: login: storage roles_cfg: roles.tcf-worker: cluster_1: cluster_b cluster_2: cluster_a initial_status: passive dml_users: [ tcf_dml ] replication_user: tcf_replicator replication_password: secret storage: config_storage storage_params: endpoints: - uri: 127.0.0.1:3301 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3302 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3303 login: tarantool_config_storage password: tarantool_config_storage_password groups: routers: replicasets: rsrouter002: leader: router002 bootstrap_leader: router002 instances: router002: roles_cfg: roles.tcf-coordinator: storage: config_storage storage_params: endpoints: - uri: 127.0.0.1:3301 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3302 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3303 login: tarantool_config_storage password: tarantool_config_storage_password roles.httpd: default: listen: localhost:20001 iproto: listen: - uri: 127.0.0.1:3327 advertise: client: 127.0.0.1:3327 app: module: app.vshard_bootstrapper sharding: roles: [router] roles: - roles.tcf-worker - roles.tcf-coordinator - roles.httpd - roles.crud-router - dictionary.roles.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 storages: memtx: memory: 536870912 #512MiB replicasets: replicaset002: leader: instance007 bootstrap_leader: instance007 instances: instance007: roles_cfg: roles.httpd: default: listen: localhost:11101 iproto: listen: - uri: 127.0.0.1:3324 advertise: client: 127.0.0.1:3324 instance008: roles_cfg: roles.httpd: default: listen: localhost:11102 iproto: listen: - uri: 127.0.0.1:3325 advertise: client: 127.0.0.1:3325 instance009: roles_cfg: roles.httpd: default: listen: localhost:11103 iproto: listen: - uri: 127.0.0.1:3326 advertise: client: 127.0.0.1:3326 sharding: roles: [storage] roles: - roles.tcf-worker - roles.httpd - roles.crud-storage - roles.expirationd - dictionary.roles.storage roles_cfg: roles.expirationd: [] 
- В директории - instances.enabled/cluster_bсоздайте файл- instances.yaml:- instance007: instance008: instance009: router002: 
- В директории - instances.enabled/cluster_aсоздайте файл- config.yamlс настройками хранилища конфигурации на основе Tarantool, запущенного ранее.- config: storage: endpoints: - uri: 127.0.0.1:3301 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3302 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3303 login: tarantool_config_storage password: tarantool_config_storage_password prefix: /cluster2 - Примечание - Префикс, заданный в - storage.prefix, должен быть уникальным для каждого из двух кластеров.
- На каждом из серверов в директориях - instances.enabled/cluster_aи- instances.enabled/cluster_bсоответственно создайте директорию- migrations/scenario. В этой директории создайте файл миграции- 001_migration.lua:- local helpers = require('tt-migrations.helpers') local function apply_scenario() local space = box.schema.space.create('writers') space:format({ {name = 'id', type = 'number'}, {name = 'bucket_id', type = 'number'}, {name = 'name', type = 'string'}, {name = 'age', type = 'number'}, }) space:create_index('primary', {parts = {'id'}}) space:create_index('bucket_id', {parts = {'bucket_id'}}) helpers.register_sharding_key('writers', {'id'}) end return { apply = { scenario = apply_scenario, }, } - В миграции создан шардированный спейс - writersс ключом шардирования- idи первичным индексом- primary.
Запуск TCM¶
В качестве веб-интерфейса кластеров Tarantool DB используется Tarantool Cluster Manager, или TCM. Tarantool Cluster Manager – это инструмент для настройки и отслеживания кластеров Tarantool EE и управления ими. Подробная информация о TCM приведена в документации Tarantool.
Задать настройки для запуска TCM можно в файле конфигурации.
Для этого перейдите в директорию Tarantool Cluster 1 tarantooldb/instances.enabled/cluster_a и создайте в ней файл tcm.yaml
со следующей конфигурацией:
mode: production
cluster:
  connection-rate-limit: 512
  tarantool-timeout: 10s
  tarantool-ping-timeout: 5s
  tt-command: tt
  refresh-state-period: 5s
  refresh-state-timeout: 4s
  discovery-period: 4s
  sharding-index: bucket_id
  skew-time: 30s
security:
  bootstrap-password: secret
http:
  host: 127.0.0.1
  port: 8080
  show-stack-trace: False
  trace: False
  network: tcp
  tls:
    enabled: False
    cert-file:
    key-file:
    server-name:
    min-version: 0
    max-version: 0
    curve-preferences: []
    cipher-suites: []
log:
  default:
    show-stack-trace: False
    add-source: False
    level: INFO
    format: struct
    output: file
    file:
      name: /var/log/tarantool/cluster-manager/tcm.log
      maxsize: 1073741824
      maxage: 0
      maxbackups: 10
      compress: True
storage:
  provider: tarantool
  tarantool:
    username: tcm_config_storage
    password: tcm_config_storage_password
    addrs:
     - 127.0.0.1:3301
     - 127.0.0.1:3302
     - 127.0.0.1:3303
addon:
  enabled: False
  addons-dir:
  max-upload-size: 104857600
  dev-addons-dir: []
limits:
  users-count: 1000
  clusters-count: 10
  roles-count: 100
  webhooks-count: 200
  user-secrets-count: 10
  user-websessions-count: 10
  linked-cluster-users: 10
feature:
    ttgraph: False
    column-store: False
    tqe: False
    api-token: False
    tcf: True
initial-settings:
  clusters:
    - name: Tarantool Cluster 1
      id: 00000000-0000-0000-0000-000000000000
      storage-connection:
        provider: tarantool
        tarantool-connection:
          prefix: /cluster1
          username: tcm_config_storage
          password: tcm_config_storage_password
          endpoints:
            - 127.0.0.1:3301
            - 127.0.0.1:3302
            - 127.0.0.1:3303
      tarantool-connection:
        username: tcm_tarantool
        password: tcm_tarantool_password
Здесь:
- http.host– адрес и порт, на которых будет запущен TCM. Если порт в команде не указан, TCM будет по умолчанию запущен на порту 8080;
- security.bootstrap-password– пароль для первичного входа в TCM;
- storage– настройки хранилища конфигурации и его узлов:- provider– тип хранилища конфигурации;
- tarantool.username– имя пользователя для подключения TCM к хранилищу конфигурации на основе Tarantool;
- tarantool.password– пароль пользователя для подключения TCM к хранилищу конфигурации на основе Tarantool;
 
- initial-settings– сущности, которые создаются автоматически при первом запуске TCM. Сущности в примере – это два кластера Tarantool DB.- clusters.<cluster>.prefix– префикс кластера. Кластеры используют общее хранилище конфигурации на основе Tarantool, но должны иметь различные префиксы. В конфигурации выше задан префикс- /cluster1для кластера Tarantool Cluster 1. Префикс для второго кластера будет задан позже в веб-интерфейсе TCF;
- clusters.<cluster>.storage-connection.tarantool-connection.username– имя пользователя для подключения TCM к хранилищу конфигурации;
- clusters.<cluster>.storage-connection.tarantool-connection.password– пароль пользователя для подключения TCM к хранилищу конфигурации;
- clusters.<cluster>.storage-connection.tarantool-connection.endpoints– адреса узлов хранилища конфигурации;
- clusters.<cluster>.tarantool-connection.username– имя пользователя для подключения TCM к экземплярам кластера;
- clusters.<cluster>.tarantool-connection.password– пароль пользователя для подключения TCM к экземплярам кластера.
 
Полная информация об опциях конфигурации TCM (в частности, опции настройки etcd) приведена в документации TCM.
Запустить TCM с конфигурацией из файла можно так:
$ tcm -c tcm.yaml
См. также Начало работы с TCM.
Настройка конфигурации Tarantool Cluster 1¶
Перед запуском кластеров нужно загрузить их конфигурацию в TCM и задать необходимые настройки.
- Определите текущий master-узел хранилища конфигурации с помощью команды - tt status. В этом руководстве это узел- instance003, имеющий адрес- 127.0.0.1:3303:- tt status configstorage INSTANCE STATUS PID MODE CONFIG BOX UPSTREAM configstorage:instance001 RUNNING 269163 RO ready running -- configstorage:instance002 RUNNING 269164 RO ready running -- configstorage:instance003 RUNNING 269165 RW ready running -- 
- Вернитесь в домашнюю директорию и загрузите файл конфигурации Tarantool Cluster 1 - source.yamlв хранилище конфигурации. В параметрах команды при необходимости обновите адрес текущего master-узла хранилища конфигурации:- $ tt cluster publish http://dbadmin:secret@127.0.0.1:3303/cluster1 tarantooldb/instances.enabled/cluster_a/source.yaml 
- Чтобы войти в TCM, откройте в браузере адрес http://localhost:8080. Логин и пароль для входа: - Username: - admin
- Password: - secret
 - Пароль для входа указан в конфигурации TCM в файле - tcm.yaml(см. опцию TCM- security.bootstrap-password).
- При успешном применении конфигурации топология Tarantool Cluster 1 появится на вкладке Stateboard. Состояние экземпляров Tarantool Cluster 1 при этом будет отображаться как неактивное, так как они еще не запущены. 
Настройка конфигурации Tarantool Cluster 2¶
Перед запуском экземпляров Tarantool Cluster 1 и Tarantool Cluster 2 нужно создать Tarantool Cluster 2 в TCM и настроить его конфигурацию. Для этого:
- В TCM откройте вкладку Clusters и нажмите кнопку Add. 
- На первом экране настройки (General) введите имя нового кластера - Tarantool Cluster 2в поле Name.
- Переключитесь на второй экран настройки (Config storage connection), нажав кнопку Next. 
- На втором экране настройки (Config storage connection) укажите следующие значения: - в поле Provider – - tarantool;
- в поле Prefix – - /cluster2. Префиксы Tarantool Cluster 1 и Tarantool Cluster 2 должны отличаться друг от друга. В примере Tarantool Cluster 1 имеет префикс- /cluster1, а Tarantool Cluster 2 –- /cluster2;
- в поле Endpoints укажите узлы хранилища конфигурации: - 127.0.0.1:3301 127.0.0.1:3302 127.0.0.1:3303 
- в поле Username – - tcm_config_storage;
- в поле Password – - tcm_config_storage_password.
 
- Переключитесь на третий экран настройки (Tarantool connection), нажав кнопку Next. 
- На третьем экране настройки (Tarantool connection) укажите следующие значения: - в поле Username – - tcm_tarantool;
- в поле Password – - tcm_tarantool_password.
 
- Нажмите Add, чтобы сохранить настройки нового кластера. 
- Загрузите файл конфигурации Tarantool Cluster 2 - source.yamlв хранилище конфигурации. В параметрах команды при необходимости обновите адрес текущего master-узла хранилища конфигурации TCF.- $ tt cluster publish http://dbadmin:secret@127.0.0.1:3303/cluster2 tarantooldb/instances.enabled/cluster_b/source.yaml 
Запуск активного кластера¶
- Скопируйте директории модулей в директории Tarantool Cluster 1 и Tarantool Cluster 2: - cp -r tarantooldb/.rocks tarantooldb/instances.enabled/cluster_a cp -r tarantooldb/.rocks tarantooldb/instances.enabled/cluster_b cp -r tarantooldb/app tarantooldb/instances.enabled/cluster_a cp -r tarantooldb/app tarantooldb/instances.enabled/cluster_b 
- Перейдите в директорию - tarantooldbи запустите активный Tarantool Cluster 1:- $ cd tarantooldb $ tt start cluster_a • Starting an instance [cluster_a:instance004]... • Starting an instance [cluster_a:instance005]... • Starting an instance [cluster_a:instance006]... • Starting an instance [cluster_a:router001].. 
- Проверьте состояние запущенных узлов Tarantool Cluster 1: - $ tt status cluster_a INSTANCE STATUS PID MODE CONFIG BOX UPSTREAM cluster_a:instance004 RUNNING 417847 RW ready running -- cluster_a:instance005 RUNNING 417848 RO ready running -- cluster_a:instance006 RUNNING 417849 RO ready running -- cluster_a:router001 RUNNING 417850 RW ready running -- 
- Загрузите файл миграции - 001_migration.luaв Tarantool Cluster 1:- $ tt migrations publish http://dbadmin:secret@127.0.0.1:3303/cluster1 ./instances.enabled/cluster_a/migrations • 001_migration.lua: successfully published to key "001_migration.lua" 
- Примените загруженные миграции: - $ tt migrations apply http://dbadmin:secret@127.0.0.1:3302/cluster1 --tarantool-username=dbadmin --tarantool-password=secret • replicaset001: • 001_migration.lua: successfully applied • rsrouter001: • 001_migration.lua: successfully applied 
Запуск пассивного кластера¶
- Запустите пассивный Tarantool Cluster 2: - $ tt start cluster_b • Starting an instance [cluster_b:instance007]... • Starting an instance [cluster_b:instance008]... • Starting an instance [cluster_b:instance009]... • Starting an instance [cluster_b:router002].. 
- Проверьте состояние запущенных узлов Tarantool Cluster 2: - $ tt status cluster_b INSTANCE STATUS PID MODE CONFIG BOX UPSTREAM cluster_b:instance007 RUNNING 418077 RW ready running -- cluster_b:instance008 RUNNING 418078 RO ready running -- cluster_b:instance009 RUNNING 418079 RO ready running -- cluster_b:router002 RUNNING 418080 RW ready running -- 
- Загрузите файл миграции - 001_migration.luaв Tarantool Cluster 2:- $ tt migrations publish http://dbadmin:secret@127.0.0.1:3303/cluster2 ./instances.enabled/cluster_b/migrations • 001_migration.lua: successfully published to key "001_migration.lua" 
- Примените загруженные миграции: - $ tt migrations apply http://127.0.0.1:3303/cluster2 --tarantool-username=admin --tarantool-password=secret-cluster-cookie • replicaset002: • 001_migration.lua: successfully applied • rsrouter002: • 001_migration.lua: successfully applied 
Проверка работы кластеров¶
- Чтобы проверить состояние кластеров, в TCM выберите нужный кластер (Tarantool Cluster 1 или Tarantool Cluster 2) над вкладкой Stateboard в выпадающем списке Clusters. Всё настроено правильно, если на вкладке Stateboard все узлы в кластере подсвечены зеленым цветом. 
- Чтобы проверить примененную миграцию, перейдите на вкладку Tuples. При успешной миграции в списке появится спейс - writers.
- Чтобы проверить текущее состояние кластеров, откройте вкладку TCF. Видно, что - cluster_aперешел в активное состояние, а- cluster_b– в пассивное.- Примечание - В Tarantool DB вкладка TCF в TCM поддерживается начиная с версии Tarantool DB 2.1.0. В более ранних версиях Tarantool DB 2.x используйте для проверки состояния кластеров соответствующий HTTP GET-запрос.