Запуск кластеров Tarantool DB с TCF и настройка репликатора¶
В этом руководстве показано, как запустить два независимых кластера Tarantool DB в Docker в связке с Tarantool Clusters Federation (TCF) и настроить работу репликатора между кластерами.
Примечание
TCF поддерживает репликацию шардированных данных в спейсах с асинхронным режимом репликации. Это означает, что передача словарей через TCF недоступна.
Для работы Tarantool Clusters Federation необходимы:
- активный кластер Tarantool DB – с него идет чтение реплицируемых данных; 
- пассивный кластер Tarantool DB – на него идет запись реплицируемых данных; 
- etcd – для восстановления после сбоя (failover) кластеров Tarantool DB; 
- репликатор Tarantool Clusters Federation – бинарные файлы - tcf-destinationи- tcf-gateway. Инструкция о том, как получить эти файлы, приведена ниже, в секции Запуск стенда.
Содержание:
Пререквизиты¶
Для выполнения примера требуются:
- установленный Docker-образ Tarantool DB; 
- архив для развёртывания TCF версии 0.9.0. Архив можно скачать в личном кабинете tarantool.io, в разделе tcf/release/; 
- приложение Docker compose; 
- исходные файлы примера - tarantool_clusters_federation.- Примечание - Есть два способа получить исходные файлы примера: - Архив с полной документацией Tarantool DB, полученный по почте или скачанный в личном кабинете tarantool.io. Пример архива: - tarantooldb-documentation-1.0.0.tar.gz. Пример- tarantool_clusters_federationрасположен в таком архиве в директории- ./doc/examples/tarantool_clusters_federation/.
- Отдельный архив tarantool_clusters_federation.tar.gz, скачанный c сайта Tarantool. 
 
Важно
Версия TCF должна соответствовать версии Tarantool DB 1.x, установленной в вашем окружении.
Например, TCF 0.9.0 поддерживается начиная с версии Tarantool DB 1.2.4.
Использование несовместимых версий может привести к ошибкам запуска или проблемам в работе компонентов.
Запуск стенда¶
Перейдите в директорию с примером:
cd ./doc/examples/tarantool_clusters_federation/
Загрузите в эту директорию архив для развёртывания TCF и распакуйте его в новой папке tcf_archive:
mkdir tcf_archive
tar -xzvf tcf-<VERSION>.tar.gz --directory tcf_archive
Здесь:
- VERSION– версия продукта.
Пример: tcf-0.9.0.tar.gz.
Создайте директорию bin и скопируйте в нее бинарные файлы tcf-destination и tcf-gateway из созданной директории tcf_archive:
mkdir bin
cp tcf_archive/tcf-destination bin && cp tcf_archive/tcf-gateway bin
Для запуска примера не требуются архив с TCF и другие файлы из директории tcf_archive, так что их можно удалить:
rm -r tcf_archive
rm -r tcf-<VERSION>.tar.gz
Запустите кластер etcd:
docker compose -f docker-compose-etcd.yml up -d
Просмотреть логи можно с помощью следующей команды:
docker compose -f docker-compose-etcd.yml logs etcd1
Дождитесь в логах появления такого сообщения:
tarantool_cluster_federation-etcd1-1  | 2024-04-02 12:37:41.475318 I | etcdserver/api: enabled capabilities for version 3.5
После этого запустите кластеры Tarantool DB:
docker compose -f docker-compose-clusters.yml up --force-recreate -d
Дождитесь, пока поднимутся два кластера:
Запустите репликатор:
docker compose -f docker-compose-replicator.yml up --force-recreate -d --build
Запущенный стенд состоит из:
- двух кластеров Tarantool DB, 
- кластера etcd из трех узлов; 
- сервиса репликатора Tarantool Clusters Federation. 
На запущенном стенде настроена репликация из кластера А в кластер B. Настройки TCF доступны в веб-интерфейсе Tarantool DB по адресу http://localhost:8081 на вкладке TCF. Подробная информация о доступных опциях конфигурации TCF и настройке TCF через веб-интерфейс приведена в документации Tarantool Clusters Federation.
Репликация¶
Подключитесь к роутеру А, используя команду tt connect:
tt connect admin:cookie-A@localhost:3300
Запустите вставку данных с помощью следующей команды:
localhost:3300> box.schema.func.call('__start_data_stream')
После этого откройте веб-интерфейс Tarantool DB и перейдите на вкладку Space explorer. На этой вкладке вы увидите, как реплицируются данные из кластера A в кластер B.
Чтобы отключить запись данных, выполните следующую команду:
box.schema.func.call('__stop_data_stream')
Файлы конфигурации Tarantool Clusters Federation¶
Файлы конфигурации Tarantool Clusters Federation расположены в корневой директории примера tarantool_clusters_federation.
Кластер A¶
Конфигурация кластера приведена в файле ./bootstrap-A/config.yml:
cluster_federation:
  cluster_1: cluster_a
  cluster_2: cluster_b
  replication_user: replicator
  replication_password: SuPPerSECreT_PAssw0rd
  status_ttl: 4
  enable_system_check: true
  failover_timeout: 20
  health_check_delay: 3
  max_suspect_counts: 3
  initial_status: active
  dml_users:
    - db_user
Полный список поддерживаемых опций конфигурации кластера приведен в разделе Конфигурация кластера в YAML (Cartridge) в документации TCF.
Настроить кластер можно также в веб-интерфейсе Tarantool DB на вкладке TCF. Узнать больше: Конфигурация кластера в веб-интерфейсе (Cartridge).
Кластер B¶
Конфигурация кластера приведена в файле ./bootstrap-B/config.yml:
cluster_federation:
  cluster_1: cluster_b
  cluster_2: cluster_a
  replication_user: replicator
  replication_password: SuPPerSECreT_PAssw0rd
  status_ttl: 4
  enable_system_check: true
  failover_timeout: 20
  health_check_delay: 3
  max_suspect_counts: 3
  initial_status: passive
  dml_users:
    - db_user
Полный список опций конфигурации кластера приведен в разделе Конфигурация кластера в YAML (Cartridge) в документации TCF.
Настроить кластер можно также в веб-интерфейсе Tarantool DB на вкладке TCF. Узнать больше: Конфигурация кластера в веб-интерфейсе (Cartridge).
Репликация из A в B¶
Конфигурация для репликации из A в B приведена в файле ./config_repl_AB.yaml:
gateway:
  grpc_server:
    host: 0.0.0.0
    port: 10080
  replica_type: anonymous
  max_cpu: 2
  log_level: debug
  log_type: plain # plain/json
  log_path: gateway_AB.log,stdout
  report_interval: 10
  stream_instances:
    - uri: tarantool-storage-A-1-1:3301
      user: replicator
      password: SuPPerSECreT_PAssw0rd
    - uri: tarantool-storage-A-1-2:3301
      user: replicator
      password: SuPPerSECreT_PAssw0rd
    - uri: tarantool-storage-A-2-1:3301
      user: replicator
      password: SuPPerSECreT_PAssw0rd
    - uri: tarantool-storage-A-2-2:3301
      user: replicator
      password: SuPPerSECreT_PAssw0rd
destination:
  gateways:
    - host: localhost
      port: 10080
  # size of every channel for replicaset events. Zero will make it unbuffered
  buffer_size: 10000
  log_type: plain # plain/json
  log_level: debug
  log_path: destination_AB.log,stdout
  report_interval: 10
  vshard_routers:
    hosts:
      - "tarantool-router-B:3301"
    user: replicator
    password: SuPPerSECreT_PAssw0rd
  # Optional parameters
  start_retry_delay: 200 #  milliseconds
  max_retry_delay: 1500 # milliseconds
  retry_attempts: 10 # milliseconds
  max_cpu: 2
Полный список опций конфигурации для репликатора приведен в разделе Конфигурация репликаторов данных в документации TCF.
Репликация из B в A¶
Конфигурация для репликации из B в A приведена в файле ./config_repl_BA.yaml:
gateway:
  grpc_server:
    host: 0.0.0.0
    port: 10180
  replica_type: anonymous
  max_cpu: 2
  log_level: debug
  log_type: plain # plain/json
  log_path: gateway_BA.log,stdout
  stream_instances:
    - uri: tarantool-storage-B-1-1:3301
      user: replicator
      password: SuPPerSECreT_PAssw0rd
    - uri: tarantool-storage-B-1-2:3301
      user: replicator
      password: SuPPerSECreT_PAssw0rd
    - uri: tarantool-storage-B-2-1:3301
      user: replicator
      password: SuPPerSECreT_PAssw0rd
    - uri: tarantool-storage-B-2-2:3301
      user: replicator
      password: SuPPerSECreT_PAssw0rd
destination:
  gateways:
    - host: localhost
      port: 10180
  # size of every channel for replicaset events. Zero will make it unbuffered
  buffer_size: 10000
  log_type: plain # plain/json
  log_level: debug
  log_path: destination_BA.log,stdout
  vshard_routers:
    hosts:
      - "tarantool-router-A:3301"
    user: replicator
    password: SuPPerSECreT_PAssw0rd
  # Optional parameters
  start_retry_delay: 200 #  milliseconds
  max_retry_delay: 1500 # milliseconds
  retry_attempts: 10 # milliseconds
  max_cpu: 2
Полный список опций конфигурации для репликатора приведен в разделе Конфигурация репликаторов данных в документации TCF.
Отключение стенда¶
Чтобы отключить стенд, выполните следующие команды:
docker compose -f docker-compose-replicator.yml down
docker compose -f docker-compose-clusters.yml down
docker compose -f docker-compose-etcd.yml down