Настройка межкластерных репликаторов
В этом руководстве описано, как настроить репликаторы данных (компоненты 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
- Конфигурация файла для репликации данных с Tarantool Cluster 2 на Tarantool Cluster 1
- Запуск репликатора Tarantool Cluster 1 -> Tarantool Cluster 2
- Проверка репликации с Tarantool Cluster 1 на Tarantool Cluster 2
- Смена состояния кластеров
- Запуск репликатора Tarantool Cluster 2 -> Tarantool Cluster 1
- Проверка репликации с Tarantool Cluster 2 на Tarantool Cluster 1
Чтобы сконфигурировать репликаторы, создайте файл config_a_b.yaml в домашней директории.
-
Укажите, что TCF Gateway будет инициировать репликацию:
gateway:grpc_server:host: 127.0.0.1port: 10080http_server:host: 127.0.0.1port: 8001metrics_enabled: truereplica_type: anonymousgateway– основной блок настроек репликации;grpc_server– адрес и порт gRPC-сервера, который управляет репликацией;host– IP-адрес gRPC-сервера;port– порт, на котором работает gRPC-сервер;http_server– адрес, на котором запускается HTTP-сервер;metrics_enabled– метрики Gateway. Для получения значений метрик используйте HTTP-endpoint ;replica_type– тип репликации. Типanonymousозначает, что этот узел будет только получать данные без записи своего идентификатора в исходный кластер.
-
Перечислите узлы типа
storageдля шардированного хранилища, с которых Gateway будет забирать информацию:gateway:stream_instances:- uri: 127.0.0.1:3304user: tcf_replicatorpassword: secret- uri: 127.0.0.1:3305user: tcf_replicatorpassword: secret- uri: 127.0.0.1:3306user: tcf_replicatorpassword: secretstream_instances– список экземпляров-источников данных в Tarantool Cluster 1. Здесь репликация данных идет с трех экземпляров Tarantool Cluster 2;uri– адреса экземпляров кластера, с которых Gateway забирает данные. Первый узел в списке, с которого Gateway получает поток данных, использует порт3304;user– имя пользователя для подключения к экземпляру кластера;password– пароль для подключения к экземпляру кластера.
-
В секции
destination.gatewaysукажите адрес и порт gRPC-сервера, который управляет репликацией:destination:metrics_enabled: truehttp_server:host: 127.0.0.1port: 8002gateways:- host: 127.0.0.1port: 10080destination– целевой кластер, в который реплицируются данные;gateways– список шлюзов, через которые передаются данные;host– gRPC-сервер, с которого Destination получает данные;port– порт, на котором работает gRPC-сервер;http_server– адрес, на котором запускается HTTP-сервер;metrics_enabled– метрики Gateway. Для получения значений метрик используйте HTTP-endpoint ;replica_type– тип репликации. Типanonymousозначает, что этот узел будет только получать данные без записи своего идентификатора в исходный кластер.
-
Определите, что конечный пункт репликации – Tarantool Cluster 2. Укажите узлы типа
router, с которых TCF Destination получает информацию о составе кластера:destination:vshard_routers:hosts:- "127.0.0.1:3327"user: tcf_replicatorpassword: secretvshard_routers– список экземпляров типаrouterв Tarantool Cluster 2;hosts– адреса узлов, которые работают как маршрутизаторы;user– учетная запись для записи данных в Tarantool Cluster 2;password– пароль для аутентификации.
В результате получится конфигурационный файл для передачи данных с Tarantool Cluster 1 на Tarantool Cluster 2:
Чтобы сконфигурировать репликаторы, создайте файл config_b_a.yaml в домашней директории.
Этот файл аналогичен ранее созданному файлу config_a_b.yaml, но выполняет обратную задачу – репликацию данных из Tarantool Cluster 2 в Tarantool Cluster 1.
-
Укажите, что TCF Gateway будет инициировать репликацию:
gateway:grpc_server:host: 127.0.0.1port: 10180http_server:host: 127.0.0.1port: 8003metrics_enabled: true -
Перечислите узлы типа
storageдля шардированного хранилища, с которых Gateway будет забирать информацию:gateway:stream_instances:- uri: 127.0.0.1:3324user: tcf_replicatorpassword: secret- uri: 127.0.0.1:3325user: tcf_replicatorpassword: secret- uri: 127.0.0.1:3326user: tcf_replicatorpassword: secret -
В секции
destination.gatewaysукажите адрес и порт gRPC-сервера, который управляет репликацией:destination:gateways:- host: 127.0.0.1port: 10180http_server:host: 127.0.0.1port: 8004metrics_enabled: true -
Определите, что конечный пункт репликации – Tarantool Cluster 1. Укажите узлы типа
router, с которых TCF Destination получает информацию о составе кластера:destination:vshard_routers:hosts:- "127.0.0.1:3307"user: tcf_replicatorpassword: secret
В результате получится конфигурационный файл для передачи данных с Tarantool Cluster 2 на Tarantool Cluster 1:
-
Запустите TCF Gateway для отправки изменений с Tarantool Cluster 1 на Tarantool Cluster 2:
$ ./tcf-gateway --config config_a_b.yaml -
Запустите 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 -
Проверить статус 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:[]}"
Перед проверкой репликации убедитесь, что ранее был создан файл с миграцией 001_migration.lua из шага 9 раздела Создание кластеров.
Чтобы проверить успешную репликацию данных с Tarantool Cluster 1 на Tarantool Cluster 2:
-
В TCM над вкладкой Stateboard выберите кластер Tarantool Cluster 1 в выпадающем списке Clusters.
-
Подключитесь к узлу хранилища. Для этого нажмите на набор реплик
replicaset001, выберите экземплярinstance004и в открывшемся окне перейдите на вкладку Terminal (TT Connect). -
Добавьте в созданный ранее спейс
writersновый кортеж:crud.insert_object('writers', {id = 1,name = 'Haruki Murakami',age = 75}, {noreturn = true}) -
Проверьте, что в спейсе появились данные. Для этого перейдите на вкладку Tuples и выберите в списке спейс
writers. В открывшейся вкладке видно, что в спейс добавлен новый кортежHaruki Murakami. -
Переключитесь на Tarantool Cluster 2 и перейдите на вкладку Tuples.
-
Выберите в списке спейс
writersи проверьте, что в открывшейся вкладке также появился кортежHaruki Murakami.
Чтобы проверить репликацию с Tarantool Cluster 2 на Tarantool Cluster 1, необходимо переключить состояние кластеров и сделать Tarantool Cluster 2 активным. Подробнее про смену состояния кластеров читайте в соответствующем разделе.
-
Получите состояние Tarantool Cluster 1:
$ curl -X GET --location "http://127.0.0.1:10080/tcf/status"active -
Переключите состояние кластеров на противоположные. Для этого отправьте POST-запрос на адрес обработчика запроса вида
/tcf/toggle:$ curl -X POST --location "http://127.0.0.1:10080/tcf/toggle" -
Проверьте состояние Tarantool Cluster 1:
$ curl -X GET --location "http://127.0.0.1:10080/tcf/status"passive -
Проверьте состояние Tarantool Cluster 2:
$ curl -X GET --location "http://127.0.0.1:10180/tcf/status"active
-
Запустите TCF Gateway для отправки изменений с Tarantool Cluster 2 на Tarantool Cluster 1:
$ ./tcf-gateway --config config_b_a.yaml -
Запустите 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 -
Проверить статус 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:[]}"
-
В TCM над вкладкой Stateboard выберите кластер Tarantool Cluster 2 в выпадающем списке Clusters.
-
Подключитесь к узлу хранилища. Для этого нажмите на набор реплик
replicaset001, выберите экземплярstorage-b-001и в открывшемся окне перейдите на вкладку Terminal (TT Connect). -
Во вкладке Terminal добавьте в спейс новый кортеж:
crud.insert_object('writers', {id = 2,name = 'Eiji Mikage',age = 41}, {noreturn = true}) -
Проверьте, что в спейсе появились данные. Для этого перейдите на вкладку Tuples и выберите в списке спейс
writers. В открывшейся вкладке видно, что в спейс добавлен новый кортежEiji Mikage. -
Переключитесь на Tarantool Cluster 1 и перейдите на вкладку Tuples.
-
Выберите в списке спейс
writersи проверьте, что в открывшейся вкладке также появился кортежEiji Mikage.