Использование Tarantool Clusters Federation | Tdb

Версия:

1.x
Руководство администратора Использование Tarantool Clusters Federation

Использование Tarantool Clusters Federation

Tarantool Clusters Federation позволяет выполнять репликацию шардированных данных между двумя независимыми кластерами Tarantool DB.

Для работы Tarantool Clusters Federation необходимы:

  • активный кластер Tarantool DB – с него идет чтение реплицируемых данных;

  • пассивный кластер Tarantool DB – на него идет запись реплицируемых данных;

  • etcd – для восстановления после сбоя (failover) кластеров Tarantool DB;

  • репликатор Tarantool Clusters Federation – бинарные файлы tcf-destination и tcf-gateway.

В примере показано, как запустить кластеры Tarantool DB в Docker в связке с Tarantool Clusters Federation и настроить работу репликатора между кластерами.

Содержание:

Пререквизиты

Для выполнения примера требуются:

  • установленный Docker-образ Tarantool DB;

  • приложение Docker compose;

  • исходные файлы примера tarantool_clusters_federation.

    Примечание

    Есть два способа получить исходные файлы примера:

    • Архив с полной документацией Tarantool DB, полученный по почте или скачанный в личном кабинете tarantool.io. Пример архива: tarantooldb-documentation-0.8.0.tar.gz. Пример tarantool_clusters_federation расположен в таком архиве в директории ./doc/examples/tarantool_clusters_federation/.

    • Отдельный архив tarantool_clusters_federation.tar.gz, скачанный c сайта Tarantool.

Запуск стенда

Перейдите в директорию с примером:

cd ./doc/examples/tarantool_clusters_federation/

Запустите кластер 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.4

После этого запустите кластеры Tarantool DB:

docker compose -f docker-compose-clusters.yml up --force-recreate -d

Дождитесь, пока поднимутся два кластера:

  • кластер А;

  • кластер B.

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

docker compose -f docker-compose-replicator.yml up --force-recreate -d --build

Запущенный стенд состоит из:

  • двух кластеров Tarantool DB,

  • кластера etcd из трех узлов;

  • сервиса репликатора Tarantool Clusters Federation.

На запущенном стенде настроена репликация из кластера А в кластер B.

Репликация

Подключитесь к роутеру-А, используя команду 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

  initial_status: active

  dml_users:
    - db_user

Кластер B

Конфигурация кластера приведена в файле ./bootstrap-B/config.yml:

cluster_federation:
  cluster_1: cluster_b
  cluster_2: cluster_a

  replication_user: replicator
  replication_password: SuPPerSECreT_PAssw0rd

  initial_status: passive

  dml_users:
    - db_user

Репликация из A в B

Конфигурация для репликации из A в B приведена в файле ./config_repl_AB.yaml:

gateway:
  metrics_enabled: true
  grpc_server:
    host: 0.0.0.0
    port: 10080
  prometheus:
    host: 0.0.0.0
    port: 10081
  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:
  metrics_enabled: true
  prometheus:
    host: 0.0.0.0
    port: 10082
  gateway:
    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

Репликация из B в A

Конфигурация для репликации из B в A приведена в файле ./config_repl_BA.yaml:

gateway:
  metrics_enabled: true
  grpc_server:
    host: 0.0.0.0
    port: 10180
  prometheus:
    host: 0.0.0.0
    port: 10181
  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:
  metrics_enabled: true
  prometheus:
    host: 0.0.0.0
    port: 10182
  gateway:
    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

Отключение стенда

Чтобы отключить стенд, выполните следующие команды:

docker compose -f docker-compose-replicator.yml down
docker compose -f docker-compose-clusters.yml down
docker compose -f docker-compose-etcd.yml down
Нашли ответ на свой вопрос?
Обратная связь