Конфигурация и запуск кластеров | Clusters_Federation
Руководство по эксплуатации Настройка среды TCF + TDB Конфигурация и запуск кластеров

Конфигурация и запуск кластеров

Для работы TCF требуется настроить два идентичных кластера, один из которых в системе TCF будет активным, а другой пассивным:

  • активный кластер принимает запросы от приложения;

  • пассивный кластер содержит копию данных активного кластера, но не принимает запросы от приложения.

В этом разделе описано, как задать конфигурацию для каждого из кластеров, а затем запустить их. В приведенном примере разворачиваются два кластера Tarantool DB, каждый кластер состоит из набора реплик с 4 узлами (1 роутером и 3 экземплярами хранилища). Для корректной работы примера необходимо использовать Tarantool DB версии 2.2.0 или выше. Поддерживаемые типы кластеров описаны в соответствующем разделе.

Начиная с версии 0.7.0, TCF поддерживает работу с расширениями журнала упреждающей записи (WAL extensions) и с кластерами, запущенными в режиме синхронной репликации. Использование расширений журнала упреждающей записи настоятельно рекомендуется при работе с TCF, поскольку они повышают надёжность и согласованность данных. Синхронная репликация остаётся опциональной и может быть включена при необходимости для повышения устойчивости. Подробнее см. в разделах Расширения WAL и Использование синхронных спейсов.

Внимание

Передача словарей Tarantool DB через TCF не поддерживается.

Перед настройкой и запуском кластеров требуется выполнить следующие шаги:

  1. Распаковать архивы с TCF и TDB версии 2.2.0 или выше. Для этого необходимо заранее выполнить шаги из соответствующего раздела руководства по установке.

  2. Подготовить и запустить кластер хранилища состояния на основе 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 2passive;

  • 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

Создание кластеров

  1. Перейдите в директорию tarantooldb и выполните в ней команду tt init. Команда создаст новое окружение для консольной утилиты tt CLI, в том числе файл конфигурации tt.yaml.

  2. В директории instances.enabled созданного окружения создайте директории кластеров cluster_a и cluster_b.

  3. В директории 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: []
    
  4. В директории instances.enabled/cluster_a создайте файл instances.yaml – список экземпляров, которые будут запущены в текущем окружении:

    instance004:
    instance005:
    instance006:
    router001:
    
  5. В директории 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 – префикс кластера, под которым хранится конфигурация для конкретного кластера.

  6. В директории 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: []
    
  7. В директории instances.enabled/cluster_b создайте файл instances.yaml:

    instance007:
    instance008:
    instance009:
    router002:
    
  8. В директории 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, должен быть уникальным для каждого из двух кластеров.

  9. На каждом из серверов в директориях 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 и задать необходимые настройки.

  1. Определите текущий 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    --
    
  2. Вернитесь в домашнюю директорию и загрузите файл конфигурации 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
    
  3. Чтобы войти в TCM, откройте в браузере адрес http://localhost:8080. Логин и пароль для входа:

    • Username: admin

    • Password: secret

    Пароль для входа указан в конфигурации TCM в файле tcm.yaml (см. опцию TCM security.bootstrap-password).

  4. При успешном применении конфигурации топология Tarantool Cluster 1 появится на вкладке Stateboard. Состояние экземпляров Tarantool Cluster 1 при этом будет отображаться как неактивное, так как они еще не запущены.

Настройка конфигурации Tarantool Cluster 2

Перед запуском экземпляров Tarantool Cluster 1 и Tarantool Cluster 2 нужно создать Tarantool Cluster 2 в TCM и настроить его конфигурацию. Для этого:

  1. В TCM откройте вкладку Clusters и нажмите кнопку Add.

  2. На первом экране настройки (General) введите имя нового кластера Tarantool Cluster 2 в поле Name.

  3. Переключитесь на второй экран настройки (Config storage connection), нажав кнопку Next.

  4. На втором экране настройки (Config storage connection) укажите следующие значения:

    • в поле Providertarantool;

    • в поле 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
      
    • в поле Usernametcm_config_storage;

    • в поле Passwordtcm_config_storage_password.

  5. Переключитесь на третий экран настройки (Tarantool connection), нажав кнопку Next.

  6. На третьем экране настройки (Tarantool connection) укажите следующие значения:

    • в поле Usernametcm_tarantool;

    • в поле Passwordtcm_tarantool_password.

  7. Нажмите Add, чтобы сохранить настройки нового кластера.

  8. Загрузите файл конфигурации 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
    

Запуск активного кластера

  1. Скопируйте директории модулей в директории 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
    
  2. Перейдите в директорию 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]..
    
  3. Проверьте состояние запущенных узлов 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  --
    
  4. Загрузите файл миграции 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"
    
  5. Примените загруженные миграции:

    $ 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
    

Запуск пассивного кластера

  1. Запустите пассивный 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]..
    
  2. Проверьте состояние запущенных узлов 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  --
    
  3. Загрузите файл миграции 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"
    
  4. Примените загруженные миграции:

    $ 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
    

Проверка работы кластеров

  1. Чтобы проверить состояние кластеров, в TCM выберите нужный кластер (Tarantool Cluster 1 или Tarantool Cluster 2) над вкладкой Stateboard в выпадающем списке Clusters. Всё настроено правильно, если на вкладке Stateboard все узлы в кластере подсвечены зеленым цветом.

  2. Чтобы проверить примененную миграцию, перейдите на вкладку Tuples. При успешной миграции в списке появится спейс writers.

  3. Чтобы проверить текущее состояние кластеров, откройте вкладку TCF. Видно, что cluster_a перешел в активное состояние, а cluster_b – в пассивное.

    Примечание

    В Tarantool DB вкладка TCF в TCM поддерживается начиная с версии Tarantool DB 2.1.0. В более ранних версиях Tarantool DB 2.x используйте для проверки состояния кластеров соответствующий HTTP GET-запрос.

Нашли ответ на свой вопрос?
Обратная связь