Руководство для начинающих | Clusters_Federation
Руководство для начинающих

Руководство для начинающих

В этом руководстве приведена инструкция по ручному разворачиванию отказоустойчивой системы из двух кластеров Tarantool DB 2.х с использованием Tarantool Clusters Federation (TCF). Узнать больше об архитектуре и элементах TCF вы можете на странице Архитектура.

В руководстве кластеры развернуты вручную с помощью утилиты tt CLI. Пример запуска кластеров Tarantool DB с TCF через Docker Compose можно найти в документации 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;

    • 1 узел etcd – для хранения состояния кластеров;

    • веб-интерфейс 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.

Установка и запуск etcd

В этом руководстве etcd запускается только на первой виртуальной машине (192.168.64.9). Поэтому перед разворачиванием кластеров Tarantool DB и TCF установите etcd на эту машину.

Перед запуском и настройкой кластеров запустите etcd на первой виртуальной машине с флагами –listen-client-urls и -advertise-client-urls:

$ etcd --listen-client-urls http://192.168.64.9:2379,http://127.0.0.1:2379 \
       --advertise-client-urls http://192.168.64.9:2379

Скачивание архивов для развертывания

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

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

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

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

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

Подготовка архивов для развертывания

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

  1. Скопируйте архив tarantooldb-<tdb_version>.<os>.<arch>.tar.gz в домашнюю директорию и распакуйте его:

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

    $ export PATH=~/tarantooldb:$PATH
    
  3. Скопируйте архив tcf-<tcf_version>.tar.gz в домашнюю директорию и распакуйте его:

    $ tar -xzf tcf-0.3.0.tar.gz
    

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

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

  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. Экземпляры в этой конфигурации принимают входящие запросы на порты 3301–3306:

    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 ]
        replicasets:
          router-msk:
            leader: router-msk
            instances:
              router-msk:
                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: etcd_v3
                    storage_params:
                      endpoints:
                        - http://127.0.0.1:2379
                        - http://192.168.64.9:2379
                    http:
                      listen: localhost:8081
                  roles.tcf-coordinator:
                    storage: etcd_v3
                    storage_params:
                      endpoints:
                      - http://127.0.0.1:2379
                      - http://192.168.64.9:2379
                iproto:
                  listen:
                    - uri: localhost:3301
                    - uri: 192.168.64.9:3301
                  advertise:
                    client: 192.168.64.9:3301
          router-spb:
            leader: router-spb
            instances:
              router-spb:
                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: etcd_v3
                    storage_params:
                      endpoints:
                        - http://127.0.0.1:2379
                        - http://192.168.64.9:2379
                    http:
                      listen: localhost:8082
                  roles.tcf-coordinator:
                    storage: etcd_v3
                    storage_params:
                      endpoints:
                      - http://127.0.0.1:2379
                      - http://192.168.64.9:2379
                iproto:
                  listen:
                    - uri: localhost:3302
                    - uri: 192.168.64.9:3302
                  advertise:
                    client: 192.168.64.9:3302
      storages:
        replication:
          failover: manual
        sharding:
          roles: [ storage ]
        roles: [ roles.crud-storage, roles.tcf-worker ]
        replicasets:
          storage-1:
            leader: storage-1-msk
            instances:
              storage-1-msk:
                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: etcd_v3
                    storage_params:
                      endpoints:
                        - http://127.0.0.1:2379
                        - http://192.168.64.9:2379
                    http:
                      listen: localhost:8083
                iproto:
                  listen:
                    - uri: localhost:3303
                    - uri: 192.168.64.9:3303
                  advertise:
                    client: 192.168.64.9:3303
              storage-1-spb:
                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: etcd_v3
                    storage_params:
                      endpoints:
                        - http://127.0.0.1:2379
                        - http://192.168.64.9:2379
                    http:
                      listen: localhost:8084
                iproto:
                  listen:
                    - uri: localhost:3304
                    - uri: 192.168.64.9:3304
                  advertise:
                    client: 192.168.64.9:3304
          storage-2:
            leader: storage-2-msk
            instances:
              storage-2-msk:
                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: etcd_v3
                    storage_params:
                      endpoints:
                        - http://127.0.0.1:2379
                        - http://192.168.64.9:2379
                    http:
                      listen: localhost:8085
                iproto:
                  listen:
                    - uri: localhost:3305
                    - uri: 192.168.64.9:3305
                  advertise:
                    client: 192.168.64.9:3305
              storage-2-spb:
                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: etcd_v3
                    storage_params:
                      endpoints:
                        - http://127.0.0.1:2379
                        - http://192.168.64.9:2379
                    http:
                      listen: localhost:8086
                iproto:
                  listen:
                    - uri: localhost:3306
                    - uri: 192.168.64.9:3306
                  advertise:
                    client: 192.168.64.9:3306
    
  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. Экземпляры в этой конфигурации принимают входящие запросы на порты 3301–3308:

    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 ]
        replicasets:
          router-msk:
            leader: router-msk
            instances:
              router-msk:
                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: etcd_v3
                    storage_params:
                      endpoints:
                        - http://127.0.0.1:2379
                        - http://192.168.64.9:2379
                    http:
                      listen: localhost:8081
                  roles.tcf-coordinator:
                    storage: etcd_v3
                    storage_params:
                      endpoints:
                      - http://127.0.0.1:2379
                      - http://192.168.64.9:2379
                iproto:
                  listen:
                    - uri: localhost:3301
                    - uri: 192.168.64.12:3301
                  advertise:
                    client: 192.168.64.12:3301
          router-spb:
            leader: router-spb
            instances:
              router-spb:
                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: etcd_v3
                    storage_params:
                      endpoints:
                        - http://127.0.0.1:2379
                        - http://192.168.64.9:2379
                    http:
                      listen: localhost:8082
                  roles.tcf-coordinator:
                    storage: etcd_v3
                    storage_params:
                      endpoints:
                      - http://127.0.0.1:2379
                      - http://192.168.64.9:2379
                iproto:
                  listen:
                    - uri: localhost:3302
                    - uri: 192.168.64.12:3302
                  advertise:
                    client: 192.168.64.12:3302
      storages:
        replication:
          failover: manual
        sharding:
          roles: [ storage ]
        roles: [ roles.crud-storage, roles.tcf-worker ]
        replicasets:
          storage-1:
            leader: storage-1-msk
            instances:
              storage-1-msk:
                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: etcd_v3
                    storage_params:
                      endpoints:
                        - http://127.0.0.1:2379
                        - http://192.168.64.9:2379
                    http:
                      listen: localhost:8083
                iproto:
                  listen:
                    - uri: localhost:3303
                    - uri: 192.168.64.12:3303
                  advertise:
                    client: 192.168.64.12:3303
              storage-1-spb:
                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: etcd_v3
                    storage_params:
                      endpoints:
                        - http://127.0.0.1:2379
                        - http://192.168.64.9:2379
                    http:
                      listen: localhost:8084
                iproto:
                  listen:
                    - uri: localhost:3304
                    - uri: 192.168.64.12:3304
                  advertise:
                    client: 192.168.64.12:3304
          storage-2:
            leader: storage-2-msk
            instances:
              storage-2-msk:
                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: etcd_v3
                    storage_params:
                      endpoints:
                        - http://127.0.0.1:2379
                        - http://192.168.64.9:2379
                    http:
                      listen: localhost:8085
                iproto:
                  listen:
                    - uri: localhost:3305
                    - uri: 192.168.64.12:3305
                  advertise:
                    client: 192.168.64.12:3305
              storage-2-spb:
                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: etcd_v3
                    storage_params:
                      endpoints:
                        - http://127.0.0.1:2379
                        - http://192.168.64.9:2379
                    http:
                      listen: localhost:8086
                iproto:
                  listen:
                    - uri: localhost:3306
                    - uri: 192.168.64.12:3306
                  advertise:
                    client: 192.168.64.12:3306
          storage-3:
            leader: storage-3-msk
            instances:
              storage-3-msk:
                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: etcd_v3
                    storage_params:
                      endpoints:
                        - http://127.0.0.1:2379
                        - http://192.168.64.9:2379
                    http:
                      listen: localhost:8087
                iproto:
                  listen:
                    - uri: localhost:3307
                    - uri: 192.168.64.12:3307
                  advertise:
                    client: 192.168.64.12:3307
              storage-3-spb:
                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: etcd_v3
                    storage_params:
                      endpoints:
                        - http://127.0.0.1:2379
                        - http://192.168.64.9:2379
                    http:
                      listen: localhost:8088
                iproto:
                  listen:
                    - uri: localhost:3308
                    - uri: 192.168.64.12:3308
                  advertise:
                    client: 192.168.64.12:3308
    
  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: etcd
    etcd:
        prefix: /tcm
        endpoints:
            - http://127.0.0.1:2379
            - http://192.168.64.9:2379

security:
  bootstrap-password: secret

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

Здесь:

  • http – имя и порт хоста, на котором работает TCM;

  • storage – настройки хранилища данных TCM;

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

  • initial-settings – сущности, которые создаются автоматически при первом запуске TCM. Сущности в примере – это два кластера Tarantool DB. Кластеры используют общий etcd, но имеют различные префиксы – /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://127.0.0.1:2379/tdb1 ./instances.enabled/cluster_a/config.yml --force
    

    Здесь:

    • http://127.0.0.1:2379/tdb1 – адрес узла etcd;

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

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

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

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

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

    $ tt migrations apply http://127.0.0.1:2379/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:2379/tdb2 ./instances.enabled/cluster_b/config.yml --force
    

    Здесь:

    • http://192.168.64.9:2379/tdb2 – адрес узла etcd;

    • ./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:2379/tdb2 ./instances.enabled/cluster_b/migrations
    
  6. Примените загруженные миграции:

    $ tt migrations apply http://192.168.64.9:2379/tdb1 --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) в выпадающем списке Clusters над вкладкой Stateboard. Перейдите на вкладку Stateboard. Всё настроено правильно, если все узлы в кластере подсвечены зеленым цветом.

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

  4. Проверьте, что Cluster A перешел в активное состояние. Для этого выполните в локальном терминале следующую команду:

    $ curl 192.168.64.9:8081/tcf/status
    active
    
  5. Проверьте, что Cluster B перешел в пассивное состояние. Для этого выполните в локальном терминале следующую команду:

    $ curl 192.168.64.12:8081/tcf/status
    passive
    
  6. Также проверьте, что пассивный кластер заблокирован для пользователя tcf-dml, с помощью команды tt connect:

    $ tt connect 192.168.64.9:3301 -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. Создайте файл config_a_b.yaml в домашней директории и вставьте следующую конфигурацию для репликации данных с Cluster A на Cluster B:

    gateway:
      grpc_server:
        host: 192.168.64.9
        port: 10080
      replica_type: anonymous
      stream_instances:
        - uri: 192.168.64.9:3303
          user: tcf-replicator
          password: secret
        - uri: 192.168.64.9:3304
          user: tcf-replicator
          password: secret
        - uri: 192.168.64.9:3305
          user: tcf-replicator
          password: secret
        - uri: 192.168.64.9:3306
          user: tcf-replicator
          password: secret
    destination:
      gateways:
        - host: 192.168.64.9
          port: 10080
      vshard_routers:
        hosts:
          - "192.168.64.12:3301"
          - "192.168.64.12:3302"
        user: tcf-replicator
        password: secret
    
  2. Создайте файл config_b_a.yaml в домашней директории и вставьте следующую конфигурацию для репликации данных с Cluster B на Cluster A:

    gateway:
      grpc_server:
        host: 192.168.64.12
        port: 10080
      replica_type: anonymous
      stream_instances:
        - uri: 192.168.64.12:3303
          user: tcf-replicator
          password: secret
        - uri: 192.168.64.12:3304
          user: tcf-replicator
          password: secret
        - uri: 192.168.64.12:3305
          user: tcf-replicator
          password: secret
        - uri: 192.168.64.12:3306
          user: tcf-replicator
          password: secret
        - uri: 192.168.64.12:3307
          user: tcf-replicator
          password: secret
        - uri: 192.168.64.12:3308
          user: tcf-replicator
          password: secret
    
    destination:
      gateways:
        - host: 192.168.64.12
          port: 10080
      vshard_routers:
        hosts:
          - "192.168.64.9:3301"
          - "192.168.64.9:3302"
        user: tcf-replicator
        password: secret
    

Attention

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

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

Запуск репликатора Cluster A -> Cluster B

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

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

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

Запуск репликатора Cluster B -> Cluster A

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

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

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

Проверка репликации Cluster A -> Сluster B

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

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

  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.

Переключение состояния кластеров

TCF поддерживает два способа переключения состояния кластеров активный-пассивный:

Чтобы направление репликации в кластерах изменилось автоматически, нужно нарушить состояние активного кластера (Cluster A). Для этого остановите один из его узлов хранилища:

$ tt stop cluster_a:storage-1-msk

Смена состояния кластера может занять несколько секунд: Cluster A при этом сначала перейдет в состояние volatile, а затем – в состояние passive. Проверьте, что Cluster A перешел в пассивное состояние. Для этого на первой виртуальной машине (192.168.64.9 в этом руководстве) выполните в терминале следующую команду:

$ curl localhost:8081/tcf/status
passive

Проверьте, что Cluster B перешел в активное состояние. Для этого на второй виртуальной машине (192.168.64.12 в этом руководстве) выполните в терминале следующую команду:

$ curl localhost:8081/tcf/status
active

Видно, что направление репликации переключилось – теперь второй кластер стал активным, а первый – пассивным.

Теперь восстановите работу экземпляра в первом кластере:

$ tt start cluster_a:storage-1-msk

Проверка репликации Cluster B -> Сluster A

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

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

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

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

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

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

Found what you were looking for?
Feedback