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

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

Сценарий установки доступен начиная с версии Tarantool DB 2.2.0.

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

Чтобы проверить, что данные успешно реплицируются с одного кластера на другой, на каждом из кластеров требуется создать спейс, затем добавить данные в спейс на одном кластере, а после проверить, что данные появились в спейсе на другом кластере. Спейсы, созданные в этих кластерах, должны быть идентичными. В инструкции для примера созданы два кластера – кластер A и кластер B. В каждом из этих кластеров создан спейс 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 при первоначальной миграции – так называется изменение схемы базы данных и данных в ней, возникающее во время разработки.

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

Подготовка серверов

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

Сервера в руководстве имеют следующие IP-адреса:

  • 192.168.64.9

    На этом сервере будут запущены:

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

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

    • TCF Destination – для применения изменений, пришедших с Cluster B на Cluster A;

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

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

  • 192.168.64.12

    На этом сервере будут запущены:

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

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

    • TCF Destination – для применения изменений, пришедших с Cluster A на Cluster B.

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

Дистрибутивы 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.

На каждом из серверов повторите следующие шаги:

  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. По умолчанию распаковка выполняется в директорию tcf-<tcf-version>:

    $ tar -xzf tcf-0.7.0.tar.gz
    

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

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

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

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

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

    credentials:
      users:
        replicator:
          password: 'topsecret'
          roles: [replication]
        client:
          password: 'secret'
          privileges:
            - permissions: [execute]
              universe: true
            - permissions: [read, write]
              spaces: [config_storage, config_storage_meta]
    iproto:
      advertise:
        peer: 
          login: replicator
    replication:
      failover: election
      timeout: 10
      synchro_timeout: 10
    database:
      use_mvcc_engine: true
    groups:
      group001:
        replicasets:
          replicaset001:
            roles:
              - config.storage
            instances:
              instance001:
                iproto:
                  listen:
                    - uri: "192.168.64.9:3301"
                  advertise:
                    client: "192.168.64.9:3301"
              instance002:
                iproto:
                  listen:
                    - uri: "192.168.64.9:3302"
                  advertise:
                    client: "192.168.64.9:3302"
              instance003:
                iproto:
                  listen: 
                    - uri: "192.168.64.9:3303"
                  advertise:
                    client: "192.168.64.9:3303"
    
  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]...
    
  6. Проверьте состояние узлов – параметр STATUS для всех экземпляров должен иметь значение RUNNING, например:

    $ 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  --  
    

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

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

Повторите следующие шаги на указанных серверах:

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

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

    • cluster_a – на первом сервере (192.168.64.9);

    • cluster_b – на втором сервере (192.168.64.12).

  3. В директории instances.enabled/cluster_a на первом сервере (192.168.64.9) создайте файл config.yml. Этот файл содержит конфигурацию кластера A. Экземпляры в этой конфигурации принимают входящие запросы на порты 3311–3316:

    credentials:
      users:
        admin:
          password: 'secret-cluster-cookie'
          roles: [ super, sharding ]
        tcf-replicator:
          password: secret
          roles: [ super ]
        tcf-dml:
          password: secret
          roles: [ super ]
    iproto:
      advertise:
        peer:
          login: admin
        sharding:
          login: admin
    sharding:
      bucket_count: 3000
    groups:
      routers:
        replication:
          failover: manual
        sharding:
          roles: [ router ]
        roles: [ roles.tcf-worker, roles.tcf-coordinator, roles.crud-router, roles.httpd ]
        replicasets:
          router-msk:
            leader: router-msk
            instances:
              router-msk:
                roles_cfg:
                  roles.httpd:
                    default:
                      listen: localhost:8081
                  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: 192.168.64.9:3301
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3302
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3303
                          login: client
                          password: secret
                      timeout: 3
                  roles.tcf-coordinator:
                    failover_timeout: 20
                    health_check_delay: 2
                    max_suspect_counts: 3
                iproto:
                  listen:
                    - uri: localhost:3311
                    - uri: 192.168.64.9:3311
                  advertise:
                    client: 192.168.64.9:3311
          router-spb:
            leader: router-spb
            instances:
              router-spb:
                roles_cfg:
                  roles.httpd:
                    default:
                      listen: localhost:8082
                  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: 192.168.64.9:3301
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3302
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3303
                          login: client
                          password: secret
                      timeout: 3
                  roles.tcf-coordinator:
                    failover_timeout: 20
                    health_check_delay: 2
                    max_suspect_counts: 3
                iproto:
                  listen:
                    - uri: localhost:3312
                    - uri: 192.168.64.9:3312
                  advertise:
                    client: 192.168.64.9:3312
      storages:
        replication:
          failover: manual
        sharding:
          roles: [ storage ]
        roles: [ roles.crud-storage, roles.tcf-worker, roles.httpd ]
        replicasets:
          storage-1:
            leader: storage-1-msk
            instances:
              storage-1-msk:
                roles_cfg:
                  roles.httpd:
                    default:
                      listen: localhost:8083
                  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: 192.168.64.9:3301
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3302
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3303
                          login: client
                          password: secret
                      timeout: 3
                iproto:
                  listen:
                    - uri: localhost:3313
                    - uri: 192.168.64.9:3313
                  advertise:
                    client: 192.168.64.9:3313
              storage-1-spb:
                roles_cfg:
                  roles.httpd:
                    default:
                      listen: localhost:8084
                  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: 192.168.64.9:3301
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3302
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3303
                          login: client
                          password: secret
                      timeout: 3
                iproto:
                  listen:
                    - uri: localhost:3314
                    - uri: 192.168.64.9:3314
                  advertise:
                    client: 192.168.64.9:3314
          storage-2:
            leader: storage-2-msk
            instances:
              storage-2-msk:
                roles_cfg:
                  roles.httpd:
                    default:
                      listen: localhost:8085
                  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: 192.168.64.9:3301
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3302
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3303
                          login: client
                          password: secret
                      timeout: 3
                iproto:
                  listen:
                    - uri: localhost:3315
                    - uri: 192.168.64.9:3315
                  advertise:
                    client: 192.168.64.9:3315
              storage-2-spb:
                roles_cfg:
                  roles.httpd:
                    default:
                      listen: localhost:8086
                  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: 192.168.64.9:3301
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3302
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3303
                          login: client
                          password: secret
                      timeout: 3
                iproto:
                  listen:
                    - uri: localhost:3316
                    - uri: 192.168.64.9:3316
                  advertise:
                    client: 192.168.64.9:3316
    

    Note

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

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

    router-msk:
    router-spb:
    storage-1-msk:
    storage-1-spb:
    storage-2-msk:
    storage-2-spb:
    
  5. В директории instances.enabled/cluster_b на втором сервере (192.168.64.12) создайте файл config.yml с конфигурацией кластера B. Экземпляры в этой конфигурации принимают входящие запросы на порты 3321–3328:

    credentials:
      users:
        admin:
          password: 'secret-cluster-cookie'
          roles: [ super, sharding ]
        tcf-replicator:
          password: secret
          roles: [ super ]
        tcf-dml:
          password: secret
          roles: [ super ]
    iproto:
      advertise:
        peer:
          login: admin
        sharding:
          login: admin
    sharding:
      bucket_count: 3000
    groups:
      routers:
        replication:
          failover: manual
        sharding:
          roles: [ router ]
        roles: [ roles.tcf-worker, roles.tcf-coordinator, roles.crud-router, roles.httpd ]
        replicasets:
          router-msk:
            leader: router-msk
            instances:
              router-msk:
                roles_cfg:
                  roles.httpd:
                    default:
                      listen: localhost:8081
                  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: 192.168.64.9:3301
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3302
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3303
                          login: client
                          password: secret
                      timeout: 3
                  roles.tcf-coordinator:
                    failover_timeout: 20
                    health_check_delay: 2
                    max_suspect_counts: 3
                iproto:
                  listen:
                    - uri: localhost:3321
                    - uri: 192.168.64.12:3321
                  advertise:
                    client: 192.168.64.12:3321
          router-spb:
            leader: router-spb
            instances:
              router-spb:
                roles_cfg:
                  roles.httpd:
                    default:
                      listen: localhost:8082
                  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: 192.168.64.9:3301
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3302
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3303
                          login: client
                          password: secret
                      timeout: 3
                  roles.tcf-coordinator:
                    failover_timeout: 20
                    health_check_delay: 2
                    max_suspect_counts: 3
                iproto:
                  listen:
                    - uri: localhost:3322
                    - uri: 192.168.64.12:3322
                  advertise:
                    client: 192.168.64.12:3322
      storages:
        replication:
          failover: manual
        sharding:
          roles: [ storage ]
        roles: [ roles.crud-storage, roles.tcf-worker, roles.httpd ]
        replicasets:
          storage-1:
            leader: storage-1-msk
            instances:
              storage-1-msk:
                roles_cfg:
                  roles.httpd:
                    default:
                      listen: localhost:8083
                  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: 192.168.64.9:3301
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3302
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3303
                          login: client
                          password: secret
                      timeout: 3
                iproto:
                  listen:
                    - uri: localhost:3323
                    - uri: 192.168.64.12:3323
                  advertise:
                    client: 192.168.64.12:3323
              storage-1-spb:
                roles_cfg:
                  roles.httpd:
                    default:
                      listen: localhost:8084
                  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: 192.168.64.9:3301
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3302
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3303
                          login: client
                          password: secret
                      timeout: 3
                iproto:
                  listen:
                    - uri: localhost:3324
                    - uri: 192.168.64.12:3324
                  advertise:
                    client: 192.168.64.12:3324
          storage-2:
            leader: storage-2-msk
            instances:
              storage-2-msk:
                roles_cfg:
                  roles.httpd:
                    default:
                      listen: localhost:8085
                  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: 192.168.64.9:3301
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3302
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3303
                          login: client
                          password: secret
                      timeout: 3
                iproto:
                  listen:
                    - uri: localhost:3325
                    - uri: 192.168.64.12:3325
                  advertise:
                    client: 192.168.64.12:3325
              storage-2-spb:
                roles_cfg:
                  roles.httpd:
                    default:
                      listen: localhost:8086
                  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: 192.168.64.9:3301
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3302
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3303
                          login: client
                          password: secret
                      timeout: 3
                iproto:
                  listen:
                    - uri: localhost:3326
                    - uri: 192.168.64.12:3326
                  advertise:
                    client: 192.168.64.12:3326
          storage-3:
            leader: storage-3-msk
            instances:
              storage-3-msk:
                roles_cfg:
                  roles.httpd:
                    default:
                      listen: localhost:8087
                  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: 192.168.64.9:3301
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3302
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3303
                          login: client
                          password: secret
                      timeout: 3
                iproto:
                  listen:
                    - uri: localhost:3327
                    - uri: 192.168.64.12:3327
                  advertise:
                    client: 192.168.64.12:3327
              storage-3-spb:
                roles_cfg:
                  roles.httpd:
                    default:
                      listen: localhost:8088
                  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: 192.168.64.9:3301
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3302
                          login: client
                          password: secret
                        - uri: 192.168.64.9:3303
                          login: client
                          password: secret
                      timeout: 3
                iproto:
                  listen:
                    - uri: localhost:3328
                    - uri: 192.168.64.12:3328
                  advertise:
                    client: 192.168.64.12:3328
    
  6. В директории instances.enabled/cluster_b на втором сервере (192.168.64.12) создайте файл instances.yml:

    router-msk:
    router-spb:
    storage-1-msk:
    storage-1-spb:
    storage-2-msk:
    storage-2-spb:
    storage-3-msk:
    storage-3-spb:
    
  7. На каждом из серверов в директориях 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.

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

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

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

http:
    host: 0.0.0.0
    port: 8080

storage:
    provider: tarantool
    tarantool:
        prefix: /tcm
        endpoints:
          - http://192.168.64.9:3301
          - http://192.168.64.9:3302
          - http://192.168.64.9:3303

security:
  bootstrap-password: secret

initial-settings:
  clusters:
    - name: Cluster A
      id: 00000000-0000-0000-0000-000000000000
      storage-connection:
        provider: tarantool
        tarantool-connection:
          prefix: /tdb1
          username: client
          password: secret
          endpoints:
            - http://192.168.64.9:3301
            - http://192.168.64.9:3302
            - http://192.168.64.9:3303
      tarantool-connection:
        username: "admin"
        password: "secret-cluster-cookie"
    - name: Cluster B
      storage-connection:
        provider: tarantool
        tarantool-connection:
          prefix: /tdb2
          username: client
          password: secret
          endpoints:
            - http://192.168.64.9:3301
            - http://192.168.64.9:3302
            - http://192.168.64.9:3303
      tarantool-connection:
        username: "admin"
        password: "secret-cluster-cookie"

Здесь:

  • http – имя и порт хоста, на котором запущен TCM. По умолчанию, TCM запускается на порту 8080;

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

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

  • initial-settings – сущности, которые создаются автоматически при первом запуске TCM. Сущности в примере – это два кластера Tarantool DB. Кластеры используют общее хранилище конфигурации, но имеют различные префиксы – /tdb1 и /tdb2.

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

Запустить TCM с конфигурацией из файла можно так:

$ tcm -c=tcm.yml

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

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

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

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

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

    $ tt cluster publish http://192.168.64.9:3301/tdb1 ./instances.enabled/cluster_a/config.yml
    

    Здесь:

    • http://192.168.64.9:3301/tdb1 – адрес узла хранилища конфигурации;

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

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

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

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

    $ tt migrations publish http://192.168.64.9:3301/tdb1 ./instances.enabled/cluster_a/migrations
    
  6. Примените загруженные миграции:

    $ tt migrations apply http://192.168.64.9:3301/tdb1 --tarantool-username=admin --tarantool-password=secret-cluster-cookie
    

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

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

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

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

    $ tt cluster publish http://192.168.64.9:3301/tdb2 ./instances.enabled/cluster_b/config.yml
    

    Здесь:

    • http://192.168.64.9:3301/tdb2 – адрес узла хранилища конфигурации;

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

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

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

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

    $ tt migrations publish http://192.168.64.9:3301/tdb2 ./instances.enabled/cluster_b/migrations
    
  6. Примените загруженные миграции:

    $ tt migrations apply http://192.168.64.9:3301/tdb2 --tarantool-username=admin --tarantool-password=secret-cluster-cookie
    

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

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

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

    • Username: admin

    • Password: secret

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

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

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

    Note

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

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

    $ tt connect 192.168.64.9:3311 -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)
    

Настройка и запуск репликатора данных с кластера A на кластер B

  1. Чтобы сконфигурировать репликаторы данных (компоненты Gateway и Destination) для репликации с кластера A на кластер B, на каждом из двух серверов в директории tcf-<tcf-version>, которая была создана при распаковке архива, создайте файл config_a_b.yaml и вставьте следующую конфигурацию:

    gateway:
      grpc_server:
        host: 192.168.64.9
        port: 10080
      replica_type: anonymous
      stream_instances:
        - uri: 192.168.64.9:3313
          user: tcf-replicator
          password: secret
        - uri: 192.168.64.9:3314
          user: tcf-replicator
          password: secret
        - uri: 192.168.64.9:3315
          user: tcf-replicator
          password: secret
        - uri: 192.168.64.9:3316
          user: tcf-replicator
          password: secret
    destination:
      gateways:
        - host: 192.168.64.9
          port: 10080
      vshard_routers:
        hosts:
          - "192.168.64.12:3321"
          - "192.168.64.12:3322"
        user: tcf-replicator
        password: secret
    

    Attention

    Начиная с TCF 0.5.0, параметр destination.gateway заменен на destination.gateways. В версиях до 0.5.0 используется старая версия параметра. Убедитесь, что ваша конфигурация соответствует версии TCF.

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

  2. На первом сервере (192.168.64.9) запустите TCF Gateway для отправки изменений с Cluster A на Cluster B:

    $ ./tcf-gateway --config config_a_b.yaml
    
  3. На втором сервере (192.168.64.12) запустите TCF Destination для применения изменений, пришедших с Cluster A на Cluster B:

    $ ./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:[]}"
    

Проверка репликации с кластера A на кластер B

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

  1. Откройте TCM по адресу http://192.168.64.9:8080/. В TCM над вкладкой Stateboard выберите кластер Cluster A в выпадающем списке Clusters.

  2. Подключитесь к роутеру router-msk. Для этого на вкладке Stateboard нажмите на набор реплик router-msk. Выберите узел router-msk и в открывшемся окне перейдите на вкладку Terminal (TT Connect).

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

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

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

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

Found what you were looking for?
Feedback