VK Docs logo
Помощь
Обновлена 27 ноября 2025 г. в 14:21

Настройка межкластерных репликаторов

В этом руководстве описано, как настроить репликаторы данных (компоненты Gateway/Destination) между двумя кластерами (Tarantool Cluster 1 и Tarantool Cluster 2).

Параметры Gateway и Destination задаются в файлах конфигурации YAML. Для каждого направления межкластерной репликации – из Tarantool Cluster 1 в Tarantool Cluster 2, из Tarantool Cluster 2 в Tarantool Cluster 1 – используется отдельный файл конфигурации. Полный список опций конфигурации репликаторов данных можно найти в разделе Конфигурация репликаторов данных.

Перед настройкой межкластерных репликаторов данных требуется подготовить:

кластер хранилища состояния на основе etcd или Tarantool;

Содержание:

Конфигурация файла для репликации данных с Tarantool Cluster 1 на Tarantool Cluster 2

Чтобы сконфигурировать репликаторы, создайте файл config_a_b.yaml в домашней директории.

  1. Укажите, что TCF Gateway будет инициировать репликацию:

    gateway:  grpc_server:    host: 127.0.0.1    port: 10080  http_server:    host: 127.0.0.1    port: 8001  metrics_enabled: true  replica_type: anonymous
    • gateway – основной блок настроек репликации;
    • grpc_server – адрес и порт gRPC-сервера, который управляет репликацией;
    • host – IP-адрес gRPC-сервера;
    • port – порт, на котором работает gRPC-сервер;
    • http_server – адрес, на котором запускается HTTP-сервер;
    • metrics_enabled – метрики Gateway. Для получения значений метрик используйте HTTP-endpoint ;
    • replica_type – тип репликации. Тип anonymous означает, что этот узел будет только получать данные без записи своего идентификатора в исходный кластер.
  2. Перечислите узлы типа storage для шардированного хранилища, с которых Gateway будет забирать информацию:

    gateway:  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
    • stream_instances – список экземпляров-источников данных в Tarantool Cluster 1. Здесь репликация данных идет с трех экземпляров Tarantool Cluster 2;
    • uri – адреса экземпляров кластера, с которых Gateway забирает данные. Первый узел в списке, с которого Gateway получает поток данных, использует порт 3304;
    • user – имя пользователя для подключения к экземпляру кластера;
    • password – пароль для подключения к экземпляру кластера.
  3. В секции destination.gateways укажите адрес и порт gRPC-сервера, который управляет репликацией:

    destination:  metrics_enabled: true  http_server:    host: 127.0.0.1    port: 8002  gateways:    - host: 127.0.0.1      port: 10080
    • destination – целевой кластер, в который реплицируются данные;
    • gateways – список шлюзов, через которые передаются данные;
    • host – gRPC-сервер, с которого Destination получает данные;
    • port – порт, на котором работает gRPC-сервер;
    • http_server – адрес, на котором запускается HTTP-сервер;
    • metrics_enabled – метрики Gateway. Для получения значений метрик используйте HTTP-endpoint ;
    • replica_type – тип репликации. Тип anonymous означает, что этот узел будет только получать данные без записи своего идентификатора в исходный кластер.
  4. Определите, что конечный пункт репликации – Tarantool Cluster 2. Укажите узлы типа router, с которых TCF Destination получает информацию о составе кластера:

    destination:  vshard_routers:    hosts:      - "127.0.0.1:3327"    user: tcf_replicator    password: secret
    • vshard_routers – список экземпляров типа router в Tarantool Cluster 2;
    • hosts – адреса узлов, которые работают как маршрутизаторы;
    • user – учетная запись для записи данных в Tarantool Cluster 2;
    • password – пароль для аутентификации.

В результате получится конфигурационный файл для передачи данных с Tarantool Cluster 1 на Tarantool Cluster 2:

Конфигурация файла для репликации данных с Tarantool Cluster 2 на Tarantool Cluster 1

Чтобы сконфигурировать репликаторы, создайте файл config_b_a.yaml в домашней директории. Этот файл аналогичен ранее созданному файлу config_a_b.yaml, но выполняет обратную задачу – репликацию данных из Tarantool Cluster 2 в Tarantool Cluster 1.

  1. Укажите, что TCF Gateway будет инициировать репликацию:

    gateway:   grpc_server:     host: 127.0.0.1     port: 10180   http_server:     host: 127.0.0.1     port: 8003   metrics_enabled: true
  2. Перечислите узлы типа storage для шардированного хранилища, с которых Gateway будет забирать информацию:

    gateway:   stream_instances:     - uri: 127.0.0.1:3324       user: tcf_replicator       password: secret     - uri: 127.0.0.1:3325       user: tcf_replicator       password: secret     - uri: 127.0.0.1:3326       user: tcf_replicator       password: secret
  3. В секции destination.gateways укажите адрес и порт gRPC-сервера, который управляет репликацией:

    destination:   gateways:     - host: 127.0.0.1       port: 10180   http_server:     host: 127.0.0.1     port: 8004   metrics_enabled: true
  4. Определите, что конечный пункт репликации – Tarantool Cluster 1. Укажите узлы типа router, с которых TCF Destination получает информацию о составе кластера:

    destination:    vshard_routers:     hosts:       - "127.0.0.1:3307"     user: tcf_replicator     password: secret

В результате получится конфигурационный файл для передачи данных с Tarantool Cluster 2 на Tarantool Cluster 1:

Запуск репликатора Tarantool Cluster 1 -> Tarantool Cluster 2

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

    $ ./tcf-gateway --config config_a_b.yaml
  2. Запустите 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
  3. Проверить статус 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 From="&{VClock:[0 3117] OwnerID:0 ConfirmedVClock:[]}"

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

Перед проверкой репликации убедитесь, что ранее был создан файл с миграцией 001_migration.lua из шага 9 раздела Создание кластеров.

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

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

  2. Подключитесь к узлу хранилища. Для этого нажмите на набор реплик replicaset001, выберите экземпляр instance004 и в открывшемся окне перейдите на вкладку 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.

Смена состояния кластеров

Чтобы проверить репликацию с Tarantool Cluster 2 на Tarantool Cluster 1, необходимо переключить состояние кластеров и сделать Tarantool Cluster 2 активным. Подробнее про смену состояния кластеров читайте в соответствующем разделе.

  1. Получите состояние Tarantool Cluster 1:

    $ curl -X GET --location "http://127.0.0.1:10080/tcf/status"   active
  2. Переключите состояние кластеров на противоположные. Для этого отправьте POST-запрос на адрес обработчика запроса вида /tcf/toggle:

    $ curl -X POST --location "http://127.0.0.1:10080/tcf/toggle"
  3. Проверьте состояние Tarantool Cluster 1:

    $ curl -X GET --location "http://127.0.0.1:10080/tcf/status"   passive
  4. Проверьте состояние Tarantool Cluster 2:

    $ curl -X GET --location "http://127.0.0.1:10180/tcf/status"   active

Запуск репликатора Tarantool Cluster 2 -> Tarantool Cluster 1

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

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

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

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

    2025-02-27T17:43:38+03:00 INFO src/pkg/ttpusher/pusher.go:427 "CDC State successfully fetched" Pusher=General/Subscribe
  3. Проверить статус 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 2 на Tarantool Cluster 1

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

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

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

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

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

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