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

Version:

latest
Руководство администратора Использование 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
Found what you were looking for?
Feedback