Установка TCF вручную поверх кластеров Tarantool DB | Clusters_Federation
Руководство по установке Установка TCF вручную поверх кластеров Tarantool DB

Установка TCF вручную поверх кластеров Tarantool DB

Сценарий установки доступен начиная с версии Tarantool DB 2.2.0. Поддерживаемые операционные системы описаны в разделе Требования к инфраструктуре для TCF.

В этом руководстве приведена инструкция по ручной установке отказоустойчивой системы из двух кластеров Tarantool DB 2.х с использованием Tarantool Clusters Federation (TCF). В руководстве кластеры развернуты вручную с помощью консольной утилиты tt CLI. В качестве хранилища конфигурации и состояния кластеров используется хранилище на основе Tarantool (Tarantool-based configuration storage). Подробная информация по настройке среды TCF + TDB приведена в соответствующем разделе.

В инструкции для примера созданы два кластера – Tarantool Cluster 1 и Tarantool Cluster 2.

Во время прохождения руководства будут запущены:

  • хранилище конфигурации на основе Tarantool – для хранения состояния кластеров;

  • активный кластер Tarantool DB (Tarantool Cluster 1), состоящий из роутера и набора реплик, в котором 3 экземпляра хранилища;

  • пассивный кластер Tarantool DB (Tarantool Cluster 2), состоящий из роутера и набора реплик, в котором 3 экземпляра хранилища;

  • веб-интерфейс Tarantool Cluster Manager (TCM);

  • TCF Gateway – репликатор для отправки изменений с Tarantool Cluster 1 на Tarantool Cluster 2;

  • TCF Destination – репликатор для применения изменений, пришедших с Tarantool Cluster 1 на Tarantool Cluster 2.

Чтобы проверить, что данные успешно реплицируются с одного кластера на другой, в руководстве:

  1. На каждом из кластеров создан спейс writers со следующим форматом:

    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'}) 
    

    Эти спейсы созданы в Tarantool DB при первоначальной миграции – так называется изменение схемы базы данных и данных в ней, возникающее во время разработки. Чтобы межкластерная репликация работала корректно, спейсы, созданные в этих кластерах, должны быть идентичными.

  2. Добавлены данные в спейс на одном кластере.

  3. Проверено, что данные появились в спейсе на другом кластере.

Руководство включает следующие шаги:

Подготовка архивов для установки

Дистрибутивы TCF и Tarantool DB распространяются в виде TGZ-архивов. Скачайте следующие файлы в личном кабинете на сайте tarantool.io:

  • сборку TCF в разделе tcf/release. Архив имеет название вида tcf-<tcf_version>.tar.gz, где <tcf_version> – версия TCF не ниже 0.5.0;

  • сборку Tarantool DB в разделе tarantooldb/release/for_deploy/. Архив имеет название вида tarantooldb-<tdb_version>.<os>.<arch>.tar.gz, где <tdb_version> – версия Tarantool DB не ниже 2.2.0.

Если у вас нет доступа к личному кабинету, свяжитесь с нами через форму обратной связи или напишите на sales@tarantool.io.

Для распаковки TGZ-архивов выполните следующие шаги:

  1. Загрузите на сервер дистрибутив Tarantool DB.

  2. Распакуйте архив с Tarantool DB. По умолчанию распаковка выполняется в директорию tarantooldb:

    $ tar -xzf tarantooldb-2.2.0.linux.x86_64.tar.gz
    
  3. Добавьте директорию tarantooldb в список директорий переменной PATH:

    $ export PATH=~/tarantooldb:$PATH
    
  4. Загрузите на сервер дистрибутив TCF.

  5. Распакуйте архив с TCF. По умолчанию распаковка выполняется в текущую директорию:

    $ tar -xzf tcf-0.9.0.tar.gz
    

Настройка хранилища состояния кластеров

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

  1. Перейдите в интерфейс командной строки, создайте директорию config-env для хранилища конфигурации TCF и создайте в ней новое окружение для консольной утилиты tt. Директория config-env должна быть создана в домашней директории на одном уровне с директорией tarantoodb.

    $ mkdir config-env
    $ cd config-env/
    $ tt init
    
  2. Перейдите в директорию окружения instances.enabled, созданную автоматически при выполнении команды tt init. Создайте внутри директорию configstorage, а затем перейдите в нее.

    $ cd instances.enabled/
    $ mkdir configstorage
    $ cd configstorage/
    
  3. В директории configstorage подготовьте файл config.yaml с конфигурацией хранилища конфигурации на основе Tarantool. Пример конфигурации для набора реплик с 3 экземплярами хранилища, экземпляры в этой конфигурации принимают входящие запросы на порты 3301–3303:

    replication:
        failover: election
        timeout: 10
        synchro_timeout: 10
    iproto:
      advertise:
        peer:
          login: replicator
    credentials:
      users:
        replicator:
          password: topsecret
          roles: [replication]
        dbadmin:
          password: secret
          roles: [super]
        tcm_config_storage:
          password: tcm_config_storage_password
          privileges:
            - permissions: [execute]
              universe: true
            - permissions: [read, write]
              spaces: [config_storage, config_storage_meta]
        tarantool_config_storage:
          password: tarantool_config_storage_password
          privileges:
            - permissions: [execute]
            universe: true
            - permissions: [read, write]
            spaces: [config_storage, config_storage_meta]
    database:
      use_mvcc_engine: true
    groups:
      storages:
        replicasets:
          replicaset001:
            roles: [config.storage]
            instances:
              instance001:
                iproto:
                  listen:
                    - uri: 127.0.0.1:3301
                  advertise:
                    client: 127.0.0.1:3301
              instance002:
                iproto:
                  listen:
                    - uri: 127.0.0.1:3302
                  advertise:
                    client: 127.0.0.1:3302
              instance003:
                iproto:
                  listen:
                    - uri: 127.0.0.1:3303
                  advertise:
                    client: 127.0.0.1:3303
    

    В файле конфигурации в секции credentials.users заданы следующие пользователи:

    • replicator – пользователь для соединения узлов хранилища конфигурации друг с другом;

    • dbadmin – администратор БД;

    • tcm_config_storage – пользователь для подключения TCM к узлам хранилища конфигурации;

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

  4. В директории configstorage подготовьте файл instances.yaml, содержащий список узлов (экземпляров хранилища). Для примера конфигурации выше список будет таким:

    instance001:
    instance002:
    instance003:
    
  5. Запустите настроенное хранилище состояний:

    $ tt start configstorage
    

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

    • Starting an instance [configstorage:instance001]...
    • Starting an instance [configstorage:instance002]...
    • Starting an instance [configstorage:instance003]...
    
  1. Проверьте состояние запущенных узлов:

    $ tt status configstorage
    
    INSTANCE                   STATUS   PID    MODE  CONFIG   BOX     UPSTREAM 
    configstorage:instance001  RUNNING  26302  RW    ready   running   --       
    configstorage:instance002  RUNNING  26303  RO    ready   running   --       
    configstorage:instance003  RUNNING  26304  RO    ready   running   --  
    

    Указанные параметры для каждого узла должны иметь такие значения:

    • параметр STATUSRUNNING;

    • параметр CONFIGready;

    • параметры BOXrunning.

    tt status позволяет определить, какой из запущенных экземпляров является master-узлом. В примере экземпляр instance001 работает в режиме RW – чтения и записи (см. параметр узлов MODE). Это означает, что instance001 является master-узлом.

Настройка и запуск кластеров

Создание приложения

Повторите следующие шаги:

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

  2. В директории instances.enabled созданного tt-окружения создайте директории кластеров и назовите их следующим образом:

  • cluster_a;

  • cluster_b.

  1. В директории instances.enabled/cluster_a создайте файл config.yaml. Этот файл содержит конфигурацию кластера Tarantool Cluster 1. Экземпляры в этой конфигурации принимают входящие запросы на порты 3304–3307:

    replication:
      failover: manual
      bootstrap_strategy: config
    iproto:
      advertise:
        peer:
          login: replicator
        sharding:
          login: storage
    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]
          privileges:
            - permissions: ['execute']
              functions: ['box.info']
        tcf_dml:
          password: secret
          roles: [super]
    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.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:
          rsrouter-a-001:
            leader: router-a-001
            bootstrap_leader: router-a-001
            instances:
              router-a-001:
                iproto:
                  listen:
                    - uri: 127.0.0.1:3307
                  advertise:
                    client: 127.0.0.1:3307
                roles_cfg:
                  roles.httpd:
                    default:
                        listen: localhost:10001
        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: storage-a-001
            bootstrap_leader: storage-a-001
            instances:
              storage-a-001:
                roles_cfg:
                  roles.httpd:
                    default:
                      listen: localhost:10101
                iproto:
                  listen:
                    - uri: 127.0.0.1:3304
                  advertise:
                    client: 127.0.0.1:3304
              storage-a-002:
                roles_cfg:
                  roles.httpd:
                    default:
                      listen: localhost:10102
                iproto:
                  listen:
                    - uri: 127.0.0.1:3305
                  advertise:
                    client: 127.0.0.1:3305
              storage-a-003:
                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: []
    

    В файле конфигурации в секции credentials.users заданы следующие пользователи:

    • dbadmin – администратор БД;

    • replicator – используется для соединения узлов кластера друг с другом;

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

    • storage – пользователь используется при запросах роутера к экземплярам хранилища;

    • tcf_replicator – пользователь используется для репликации между кластерами;

    • tcf_dml – пользователь предназначен для выполнения DML-операций с данными от имени сервисных компонентов TCF.

      Note

      Начиная с TCF 0.5.0, рекомендуется явно указывать роль roles.httpd в конфигурации кластера. При этом адрес для HTTP-запросов для конкретного экземпляра задается в секции roles_cfg.roles.httpd.default.listen. В версиях до 0.5.0 такой адрес указывается в секции roles_cfg.roles.tcf-worker.http.listen.

  2. В директории instances.enabled/cluster_a создайте файл instances.yaml – список экземпляров, которые будут запущены в текущем окружении:

    router-a-001:
    storage-a-001:
    storage-a-002:
    storage-a-003:
    
  3. В директории instances.enabled/cluster_b создайте файл config.yaml с конфигурацией кластера Tarantool Cluster 2. Экземпляры в этой конфигурации принимают входящие запросы на порты 3324–3327:

    replication:
      failover: manual
      bootstrap_strategy: config
    iproto:
      advertise:
        peer:
          login: replicator
        sharding:
          login: storage
    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]
          privileges:
            - permissions: ['execute']
              functions: ['box.info']
        tcf_replicator:
          password: secret
          roles: [super]
        tcf_dml:
          password: secret
          roles: [super]
    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.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:
          rsrouter-b-001:
            leader: router-b-001
            bootstrap_leader: router-b-001
            instances:
              router-b-001:
                roles_cfg:
                  roles.httpd:
                    default:
                      listen: localhost:20001
                iproto:
                  listen:
                    - uri: 127.0.0.1:3327
                  advertise:
                    client: 127.0.0.1:3327
        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: storage-b-001
            bootstrap_leader: storage-b-001
            instances:
              storage-b-001:
                roles_cfg:
                  roles.httpd:
                    default:
                      listen: localhost:21101
                iproto:
                  listen:
                    - uri: 127.0.0.1:3324
                  advertise:
                    client: 127.0.0.1:3324
              storage-b-002:
                roles_cfg:
                  roles.httpd:
                    default:
                      listen: localhost:21102
                iproto:
                  listen:
                    - uri: 127.0.0.1:3325
                  advertise:
                    client: 127.0.0.1:3325
              storage-b-003:
                roles_cfg:
                  roles.httpd:
                    default:
                      listen: localhost:21103
                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: []
    
  4. В директории instances.enabled/cluster_b создайте файл instances.yaml:

    router-b-001:
    storage-b-001:
    storage-b-002:
    storage-b-003:
    
  5. В каждой из директорий 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.

  6. Перейдите в домашнюю директорию, где хранится директория tarantooldb. Скопируйте директорию с модулями .rocks в директории instances.enabled/cluster_a и instances.enabled/cluster_b:

    $ sudo cp -r tarantooldb/.rocks tarantooldb/instances.enabled/cluster_a
    $ sudo cp -r tarantooldb/.rocks tarantooldb/instances.enabled/cluster_b
    

Настройка и запуск Tarantool Cluster Manager

В качестве веб-интерфейса кластеров Tarantool DB используется Tarantool Cluster Manager, или TCM. Tarantool Cluster Manager – это инструмент для настройки и отслеживания кластеров Tarantool EE и управления ими. Подробная информация о TCM приведена в документации Tarantool.

Задать настройки для запуска TCM можно в файле конфигурации. Для этого создайте файл tcm.yaml в директории instances.enabled/cluster_a:

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: stdout
    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 – имя и порт хоста, на котором запущен TCM. По умолчанию, TCM запускается на порту 8080;

  • storage – настройки хранилища конфигурации и его узлов, настроенных и запущенных ранее;

  • security – настройки безопасности TCM;

  • initial-settings – кластеры, которые создаются автоматически при первом запуске TCM. В конфигурации TCM автоматически создан кластер Tarantool Cluster 1. Второй кластер (Tarantool Cluster 2) будет создан позже вручную через веб-интерфейс TCM. Кластеры используют общее хранилище конфигурации, но имеют различные префиксы – /default1 и /default2.

Полная информация об опциях конфигурации TCM приведена в документации TCM.

Чтобы запустить TCM с конфигурацией из файла,

  1. Откройте новую вкладку терминала.

  2. Перейдите в директорию instances.enabled/cluster_a.

  3. Выполните команду:

    $ tcm -c tcm.yaml
    

См. также Начало работы с TCM.

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

Запустите активный кластер (Tarantool Cluster 1). Для этого:

  1. Перейдите в директорию tarantooldb:

    $ cd tarantooldb
    
  2. Загрузите конфигурацию кластера в централизованное хранилище из YAML-файла, используя команду tt cluster publish:

    $ tt cluster publish http://dbadmin:secret@127.0.0.1:3301/default1 ./instances.enabled/cluster_a/config.yaml
    

    Здесь:

    • http://dbadmin:secret@127.0.0.1:3301/default1 – адрес master-узла хранилища конфигурации, переданный вместе с именем и паролем администратора БД. Определить master-узел можно с помощью команды tt status configstorage – в примере это узел instance001, имеющий адрес 127.0.0.1:3301;

    • ./instances.enabled/cluster_a/config.yaml – публикуемый файл конфигурации.

  3. Запустите кластер:

    $ tt start cluster_a
    
  4. Проверьте статус кластера:

    $ tt status cluster_a
    
  5. Запустите модуль шардирования vshard:

    $ tt bootstrap vshard cluster_a
    
  6. Загрузите миграции в кластер:

    $ tt migrations publish http://dbadmin:secret@127.0.0.1:3301/default1 ./instances.enabled/cluster_a/migrations
    
  7. Примените загруженные миграции:

    $ tt migrations apply http://dbadmin:secret@127.0.0.1:3301/default1 --tarantool-username=admin --tarantool-password=secret
    

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

Запустите пассивный кластер (Tarantool Cluster 2). Для этого:

  1. Перейдите в директорию tarantooldb:

    $ cd tarantooldb
    
  2. Загрузите конфигурацию кластера в централизованное хранилище из YAML-файла, используя команду tt cluster publish:

    $ tt cluster publish http://dbadmin:secret@127.0.0.1:3301/default2 ./instances.enabled/cluster_b/config.yaml
    

    Здесь:

    • http://dbadmin:secret@http://127.0.0.1:3301/default2 – адрес master-узла хранилища конфигурации, переданный вместе с именем и паролем администратора БД. Определить master-узел можно с помощью команды tt status configstorage – в примере это узел instance001, имеющий адрес 127.0.0.1:3301;

    • ./instances.enabled/cluster_b/config.yaml – публикуемый файл конфигурации.

  3. Запустите кластер:

    $ tt start cluster_b
    
  4. Проверьте статус кластера:

    $ tt status cluster_b
    
  5. Запустите модуль шардирования vshard:

    $ tt bootstrap vshard cluster_b
    
  6. Загрузите миграции в кластер:

    $ tt migrations publish http://dbadmin:secret@127.0.0.1:3301/default2 ./instances.enabled/cluster_b/migrations
    
  7. Примените загруженные миграции:

    $ tt migrations apply http://dbadmin:secret@127.0.0.1:3301/default2 --tarantool-username=admin --tarantool-password=secret
    

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

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

  1. Для входа в TCM откройте в браузере адрес http://localhost:8080. Логин и пароль для входа:

    • Username: admin;

    • Password: secret.

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

  3. На первом экране настройки (General) введите имя нового кластера в поле Name. Имя кластера может быть любое, в примере используется имя Tarantool Cluster 2.

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

  1. Перейдите во вкладку Config storage connection, нажав кнопку Next.

  2. Во вкладке Config storage connection укажите следующие значения:

  • в поле Providertarantool;

  • в поле Prefix/default2;

  • в поле Endpoints укажите узлы хранилища конфигурации:

    127.0.0.1:3301
    127.0.0.1:3302
    127.0.0.1:3303
    
  • в поле Usernametcm_config_storage;

  • в поле Passwordtcm_config_storage_password.

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

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

  • в поле Usernametcm_tarantool;

  • в поле Passwordtcm_tarantool_password.

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

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

Чтобы проверить состояние кластеров, выполните следующие шаги:

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

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

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

    Note

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

  4. Также проверьте с помощью команды tt connect, что пассивный кластер заблокирован для пользователя tcf_dml:

    $ tt connect 127.0.0.1:3327 -u tcf_dml -p secret
    • Connecting to the instance...
    ⨯ failed to run interactive console: failed to create new console: failed to connect: failed to authenticate: DML is blocked, cluster is passive (ClientError, code 0x1ff)
    

Настройка и запуск репликации данных с активного кластера на пассивный

  1. Чтобы сконфигурировать репликаторы данных (компоненты Gateway и Destination) для репликации с кластера Tarantool Cluster 1 на кластер Tarantool Cluster 2, в директории с распакованным архивом TCF создайте файл config_a_b.yaml и вставьте следующую конфигурацию:

    gateway:
      grpc_server:
        host: 127.0.0.1
        port: 10080
      http_server:
        host: 127.0.0.1
        port: 8000
      replica_type: anonymous
      max_cpu: 4
      stream_instances:
        - uri: 127.0.0.1:3304
          user: tcf_replicator
          password: secret
        - uri: 127.0.0.1:3305
          user: tcf_replicator
          password: secret
        - uri: 127.0.0.1:3306
          user: tcf_replicator
          password: secret
    destination:
      metrics_enabled: true
      http_server:
        host: 127.0.0.1
        port: 8001
      gateways:
        - host: 127.0.0.1
          port: 10080
      buffer_size: 10000
      vshard_routers:
        hosts:
          - 127.0.0.1:3327
        user: tcf_replicator
        password: secret
      start_retry_delay: 200
      max_retry_delay: 1500
      retry_attempts: 10
      max_cpu: 4
    

    Подробная инструкция по настройке репликаторов данных приведена в разделе Настройка межкластерных репликаторов. Полный список опций конфигурации репликаторов можно найти в соответствующем разделе справочника.

  2. Запустите TCF Gateway для отправки изменений с Tarantool Cluster 1 на Tarantool Cluster 2:

    $ ./tcf-gateway --config config_a_b.yaml
    
  3. Запустите TCF Destination для применения изменений, пришедших с Tarantool Cluster 1 на Tarantool Cluster 2:

    $ ./tcf-destination --config config_a_b.yaml
    

    Когда компонент TCF Destination будет готов к работе, вывод результатов работы команды может выглядеть так:

    2025-02-27T17:43:38+03:00 INFO src/pkg/ttpusher/pusher.go:427 "CDC State successfully fetched" Pusher=General/Subscribe
    
  4. Проверить статус TCF Gateway необходимо после запуска компонента Destination. Когда компонент Gateway готов к работе, вывод результатов работы команды может выглядеть так:

    2025-02-27T17:42:53+03:00 INFO src/internal/gateway/server.go:512 Connected "Replica set"=e0f5488a-00c5-4c53-9b3a-ec052610357b Host=localhost:13303 From="&{VClock:[0 3117] OwnerID:0 ConfirmedVClock:[]}"
    

Проверка репликации с Tarantool Cluster 1 на Tarantool Cluster 2

Чтобы проверить успешную репликацию данных с Tarantool Cluster 1 на Tarantool Cluster 2:

  1. В TCM над вкладкой Stateboard выберите кластер Tarantool Cluster 1 в выпадающем списке Clusters.

  2. Подключитесь к узлу хранилища. Для этого нажмите на набор реплик replicaset001, выберите экземпляр storage-a-001 и в открывшемся окне перейдите на вкладку Terminal (TT Connect).

  3. Добавьте в созданный ранее спейс writers новый кортеж:

    crud.insert_object('writers', {
        id = 1,
        name = 'Haruki Murakami',
        age = 75
    }, {
        noreturn = true
    })
    
  4. Проверьте, что в спейсе появились данные. Для этого перейдите на вкладку Tuples и выберите в списке спейс writers. В открывшейся вкладке видно, что в спейс добавлен новый кортеж Haruki Murakami.

  5. Переключитесь на Tarantool Cluster 2 и перейдите на вкладку Tuples.

  6. Выберите в списке спейс writers и проверьте, что в открывшейся вкладке также появился кортеж Haruki Murakami.

Found what you were looking for?
Feedback