Запуск кластеров 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.3.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.
Запуск стенда¶
Перейдите в директорию с примером:
cd ./doc/examples/tarantool_clusters_federation/
Загрузите в эту директорию архив для развёртывания TCF и распакуйте его в новой папке tcf_archive
:
mkdir tcf_archive
tar -xzvf tcf-<VERSION>.tar.gz --directory tcf_archive
Здесь:
VERSION
– версия продукта.
Пример: tcf-0.3.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.4
После этого запустите кластеры 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
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
initial_status: passive
dml_users:
- db_user
Полный список опций конфигурации кластера приведен в разделе Конфигурация кластера в YAML (Cartridge) в документации TCF.
Настроить кластер можно также в веб-интерфейсе Tarantool DB на вкладке TCF. Узнать больше: Конфигурация кластера в веб-интерфейсе (Cartridge).
Репликация из 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
Полный список опций конфигурации для репликатора приведен в разделе Конфигурация репликаторов данных в документации TCF.
Репликация из 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
Полный список опций конфигурации для репликатора приведен в разделе Конфигурация репликаторов данных в документации 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