Конфигурация и запуск кластеров | Clusters_Federation
Руководство пользователя Конфигурация и запуск кластеров

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

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

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

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

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

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

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

  2. Подготовить и запустить кластер хранилища состояния на основе etcd или Tarantool – в этом кластере хранятся конфигурация кластеров и их состояние активный-пассивный. В данном примере используется хранилище состояния на основе Tarantool.

Создание конфигурации кластеров Tarantool DB

Конфигурация для каждого из кластеров задается в отдельном YAML-файле конфигурации. Эта конфигурация задает топологию кластера и параметры его экземпляров. Полный список опций конфигурации для кластеров Tarantool и продуктов на его основе приведен в справочнике в документации Tarantool.

Файлы с финальной конфигурацией активного и пассивного кластеров config_cluster_a.yml и config_cluster_b.yml приведены в разделе Создание кластеров этого руководства.

Настройка пользователей и соединения

Создайте файл config_cluster_a.yml, в который будет добавлена конфигурация активного кластера (далее кластер А). В созданном файле в секции 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 – пользователь для соединения узлов кластера А друг с другом;

  • tcm_tarantool – пользователь для подключения TCM к экземплярам кластера А;

  • 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 указывает, что другие экземпляры кластера А должны подключаться к адресу, определенному в опции 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. Для кластера А состояние при первом запуске будет active, для кластера B – 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

Note

Если для хранения конфигурации кластера и состояния TCF используется одно и то же хранилище конфигурации, секции roles.tcf-coordinator.storage и roles.tcf-coordinator.storage_params` в конфигурации можно опустить.

Полный список поддерживаемых опций конфигурации roles.tcf-worker и roles.tcf-coordinator можно найти в разделе Конфигурация кластера в YAML (Tarantool 3.x).

Настройка кластеров Tarantool DB

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

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

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

  3. В директории instances.enabled/cluster_a добавьте файл cluster_config_a.yml с конфигурацией кластера А, приведенной ниже. Экземпляры в этой конфигурации принимают входящие запросы на порты 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.yml – список экземпляров, которые будут запущены в текущем окружении:

    instance004:
    instance005:
    instance006:
    router001:
    
  5. В директории instances.enabled/cluster_a создайте файл config.yml – с настройками хранилища конфигурации на основе 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: /default1
    

    Здесь:

    • config.storage.endpoints.uri – адреса узлов хранилища конфигурации;

    • config.storage.endpoints.login – пользователь для подключения экземпляров кластера к узлам хранилища конфигурации;

    • config.storage.endpoints.password – пароль для подключения экземпляров кластера к узлам хранилища конфигурации;

    • config.storage.prefix – префикс кластера, под которым хранится конфигурация для конкретного кластера.

  6. В директории instances.enabled/cluster_b создайте файл cluster_config_b.yml с конфигурацией кластера B, приведенной ниже. Экземпляры в этой конфигурации принимают входящие запросы на порты 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.yml:

    instance007:
    instance008:
    instance009:
    router002:
    
  8. В директории instances.enabled/cluster_a создайте файл config.yml с настройками хранилища конфигурации на основе 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: /default2
    

    Note

    Префикс, заданный в 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 можно в файле конфигурации. Для этого перейдите в директорию кластера А tarantooldb/instances.enabled/cluster_a и создайте в ней файл tcm.yml со следующей конфигурацией:

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: /default1
          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, но должны иметь различные префиксы. В конфигурации выше задан префикс /default1 для кластера 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.

Настройка конфигурации кластера А

Перед запуском кластеров нужно загрузить их конфигурацию в 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. Вернитесь в домашнюю директорию и загрузите файл конфигурации кластера А cluster_config_a.yml в хранилище конфигурации. В параметрах команды при необходимости обновите адрес текущего master-узла хранилища конфигурации:

    $ tt cluster publish http://dbadmin:secret@127.0.0.1:3303/default1 tarantooldb/instances.enabled/cluster_a/cluster_config_a.yml
    
  3. Чтобы войти в TCM, откройте в браузере адрес http://localhost:8080. Логин и пароль для входа:

    • Username: admin

    • Password: secret

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

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

Настройка конфигурации кластера B

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

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

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

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

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

    • в поле Providertarantool;

    • в поле Prefix/default2. Префиксы кластеров А и B должны отличаться друг от друга. В примере кластер А имеет префикс /default1, а кластер B -- /default2;

    • в поле 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. Загрузите файл конфигурации кластера B cluster_config_b.yml в хранилище конфигурации. В параметрах команды при необходимости обновите адрес текущего master-узла хранилища конфигурации TCF.

    $ tt cluster publish http://dbadmin:secret@127.0.0.1:3303/default2 tarantooldb/instances.enabled/cluster_b/cluster_config_b.yml
    

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

  1. Скопируйте директории модулей в директории кластеров А и В:

    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 и запустите активный кластер А:

    $ 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. Проверьте состояние запущенных узлов кластера А:

    $ 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 в кластер А:

    $ tt migrations publish http://dbadmin:secret@127.0.0.1:3303/default1 ./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/default1 --tarantool-username=dbadmin --tarantool-password=secret
    
    • replicaset001:           
    •     001_migration.lua: successfully applied
    • rsrouter001:             
    •     001_migration.lua: successfully applied
    

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

  1. Запустите пассивный кластер B:

    $ 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. Проверьте состояние запущенных узлов кластера В:

    $ 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 в кластер В:

    $ tt migrations publish http://dbadmin:secret@127.0.0.1:3303/default2 ./instances.enabled/cluster_b/migrations
    
    • 001_migration.lua: successfully published to key "001_migration.lua"
    
  4. Примените загруженные миграции:

    $ tt migrations apply http://192.168.64.9:3301/tdb2 --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 – в пассивное.

    Note

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

Found what you were looking for?
Feedback