Установка TCF вручную поверх кластеров Tarantool DB¶
Сценарий установки доступен начиная с версии Tarantool DB 2.2.0.
В этом руководстве приведена инструкция по ручной установке отказоустойчивой системы из двух кластеров Tarantool DB 2.х с использованием Tarantool Clusters Federation (TCF). В руководстве кластеры развернуты вручную с помощью консольной утилиты tt CLI. В качестве хранилища конфигурации и состояния кластеров используется хранилище на базе Tarantool (Tarantool-based configuration storage).
Чтобы проверить, что данные успешно реплицируются с одного кластера на другой, на каждом из кластеров требуется создать спейс,
затем добавить данные в спейс на одном кластере, а после проверить, что данные появились в спейсе на другом кластере.
Спейсы, созданные в этих кластерах, должны быть идентичными.
В инструкции для примера созданы два кластера – кластер A и кластер B.
В каждом из этих кластеров создан спейс writers
со следующим форматом:
local space = box.schema.space.create('writers')
space:format({
{name = 'id', type = 'number'},
{name = 'bucket_id', type = 'number'},
{name = 'name', type = 'string'},
{name = 'age', type = 'number'},
})
space:create_index('primary', {parts = {'id'}})
space:create_index('bucket_id', {parts = {'bucket_id'}})
helpers.register_sharding_key('writers', {'id'})
Данные спейсы созданы в Tarantool DB при первоначальной миграции – так называется изменение схемы базы данных и данных в ней, возникающее во время разработки.
Руководство включает следующие шаги:
Подготовка серверов¶
В руководстве рассматривается топология из двух серверов, которые могут взаимодействовать между собой по сети. Поддерживаемые операционные системы описаны в разделе Требования к инфраструктуре для TCF.
Сервера в руководстве имеют следующие IP-адреса:
192.168.64.9
На этом сервере будут запущены:
активный кластер Tarantool DB (Cluster A), состоящий из 2 роутеров и 2 наборов реплик, содержащих по 2 хранилища каждый;
TCF Gateway – для отправки изменений с Cluster A на Cluster B;
TCF Destination – для применения изменений, пришедших с Cluster B на Cluster A;
3 узла хранилища конфигурации на базе Tarantool – для хранения состояния кластеров;
веб-интерфейс Tarantool Cluster Manager (TCM).
192.168.64.12
На этом сервере будут запущены:
пассивный кластер Tarantool DB (Cluster B), состоящий из 2 роутеров и 3 наборов реплик, содержащих по 2 хранилища каждый;
TCF Gateway – для отправки изменений с Cluster B на Cluster A;
TCF Destination – для применения изменений, пришедших с Cluster A на Cluster B.
Подготовка архивов для установки¶
Дистрибутивы TCF и Tarantool DB распространяются в виде TGZ-архивов. Скачайте следующие файлы в личном кабинете на сайте `tarantool.io:
сборку TCF в разделе tcf/release. Архив имеет название вида
tcf-<tcf_version>.tar.gz
, где<tcf_version>
– версия TCF не ниже 0.5.0;сборку Tarantool DB в разделе tarantooldb/release/for_deploy/. Архив имеет название вида
tarantooldb-<tdb_version>.<os>.<arch>.tar.gz
, где<tdb_version>
– версия Tarantool DB не ниже 2.2.0.
Если у вас нет доступа к личному кабинету, свяжитесь с нами через форму обратной связи или напишите на sales@tarantool.io.
На каждом из серверов повторите следующие шаги:
Загрузите на сервер дистрибутив Tarantool DB.
Распакуйте архив с Tarantool DB. По умолчанию распаковка выполняется в директорию
tarantooldb
:$ tar -xzf tarantooldb-2.2.0.linux.x86_64.tar.gz
Добавьте директорию
tarantooldb
в список директорий переменнойPATH
:$ export PATH=~/tarantooldb:$PATH
Загрузите на сервер дистрибутив TCF.
Распакуйте архив с TCF. По умолчанию распаковка выполняется в директорию
tcf-<tcf-version>
:$ tar -xzf tcf-0.7.0.tar.gz
Настройка хранилища состояния кластеров¶
Перед запуском и настройкой TCF необходимо настроить и запустить среду для хранения и управления конфигурацией TCF.
Для этой цели используются экземпляры хранилища на базе Tarantool.
В руководстве хранилище состояний будет запущено на первом сервере (192.168.64.9
).
Перейдите в интерфейс командной строки, создайте директорию
config-env
для хранилища конфигурации TCF и создайте в ней новое окружение для консольной утилиты tt. Директорияconfig-env
должна быть создана в домашней директории на одном уровне с директориямиtarantoodb
иtcf-<tcf-version>
.$ mkdir config-env $ cd config-env/ $ tt init
Перейдите в директорию
instances.enabled
, создайте внутри директориюconfigstorage
, а затем перейдите в нее.$ cd instances.enabled/ $ mkdir configstorage $ cd configstorage/
В директории
configstorage
подготовьте файлconfig.yaml
с конфигурацией хранилища конфигурации на базе Tarantool. Пример конфигурации для набора реплик с 3 экземплярами хранилища, экземпляры в этой конфигурации принимают входящие запросы на порты 3301–3303:credentials: users: replicator: password: 'topsecret' roles: [replication] client: password: 'secret' privileges: - permissions: [execute] universe: true - permissions: [read, write] spaces: [config_storage, config_storage_meta] iproto: advertise: peer: login: replicator replication: failover: election timeout: 10 synchro_timeout: 10 database: use_mvcc_engine: true groups: group001: replicasets: replicaset001: roles: - config.storage instances: instance001: iproto: listen: - uri: "192.168.64.9:3301" advertise: client: "192.168.64.9:3301" instance002: iproto: listen: - uri: "192.168.64.9:3302" advertise: client: "192.168.64.9:3302" instance003: iproto: listen: - uri: "192.168.64.9:3303" advertise: client: "192.168.64.9:3303"
В директории
configstorage
подготовьте файлinstances.yaml
, содержащий список узлов (экземпляров хранилища). Для примера конфигурации выше список будет таким:instance001: instance002: instance003:
Запустите настроенное хранилище состояний:
$ tt start configstorage
Вывод результатов работы команды будет выглядеть следующим образом:
• Starting an instance [configstorage:instance001]... • Starting an instance [configstorage:instance002]... • Starting an instance [configstorage:instance003]...
Проверьте состояние узлов – параметр
STATUS
для всех экземпляров должен иметь значениеRUNNING
, например:$ tt status configstorage INSTANCE STATUS PID MODE CONFIG BOX UPSTREAM configstorage:instance001 RUNNING 26302 RW ready running -- configstorage:instance002 RUNNING 26303 RO ready running -- configstorage:instance003 RUNNING 26304 RO ready running --
Настройка и запуск кластеров¶
Создание приложения¶
Повторите следующие шаги на указанных серверах:
На каждом из серверов перейдите в директорию
tarantooldb
и выполните в ней команду tt init. Команда создаст окружениеtt
, в том числе файл конфигурацииtt.yaml
, который используется консольной утилитой tt CLI.В директории
instances.enabled
созданногоtt
-окружения создайте директорию приложения и назовите ее следующим образом:cluster_a
– на первом сервере (192.168.64.9
);cluster_b
– на втором сервере (192.168.64.12
).
В директории
instances.enabled/cluster_a
на первом сервере (192.168.64.9
) создайте файлconfig.yml
. Этот файл содержит конфигурацию кластера A. Экземпляры в этой конфигурации принимают входящие запросы на порты 3311–3316:credentials: users: admin: password: 'secret-cluster-cookie' roles: [ super, sharding ] tcf-replicator: password: secret roles: [ super ] tcf-dml: password: secret roles: [ super ] iproto: advertise: peer: login: admin sharding: login: admin sharding: bucket_count: 3000 groups: routers: replication: failover: manual sharding: roles: [ router ] roles: [ roles.tcf-worker, roles.tcf-coordinator, roles.crud-router, roles.httpd ] replicasets: router-msk: leader: router-msk instances: router-msk: roles_cfg: roles.httpd: default: listen: localhost:8081 roles.tcf-worker: cluster_1: cluster_a cluster_2: cluster_b initial_status: active dml_users: [ tcf-dml ] replication_user: tcf-replicator replication_password: secret storage: config_storage storage_params: endpoints: - uri: 192.168.64.9:3301 login: client password: secret - uri: 192.168.64.9:3302 login: client password: secret - uri: 192.168.64.9:3303 login: client password: secret timeout: 3 roles.tcf-coordinator: failover_timeout: 20 health_check_delay: 2 max_suspect_counts: 3 iproto: listen: - uri: localhost:3311 - uri: 192.168.64.9:3311 advertise: client: 192.168.64.9:3311 router-spb: leader: router-spb instances: router-spb: roles_cfg: roles.httpd: default: listen: localhost:8082 roles.tcf-worker: cluster_1: cluster_a cluster_2: cluster_b initial_status: active dml_users: [ tcf-dml ] replication_user: tcf-replicator replication_password: secret storage: config_storage storage_params: endpoints: - uri: 192.168.64.9:3301 login: client password: secret - uri: 192.168.64.9:3302 login: client password: secret - uri: 192.168.64.9:3303 login: client password: secret timeout: 3 roles.tcf-coordinator: failover_timeout: 20 health_check_delay: 2 max_suspect_counts: 3 iproto: listen: - uri: localhost:3312 - uri: 192.168.64.9:3312 advertise: client: 192.168.64.9:3312 storages: replication: failover: manual sharding: roles: [ storage ] roles: [ roles.crud-storage, roles.tcf-worker, roles.httpd ] replicasets: storage-1: leader: storage-1-msk instances: storage-1-msk: roles_cfg: roles.httpd: default: listen: localhost:8083 roles.tcf-worker: cluster_1: cluster_a cluster_2: cluster_b initial_status: active dml_users: [ tcf-dml ] replication_user: tcf-replicator replication_password: secret storage: config_storage storage_params: endpoints: - uri: 192.168.64.9:3301 login: client password: secret - uri: 192.168.64.9:3302 login: client password: secret - uri: 192.168.64.9:3303 login: client password: secret timeout: 3 iproto: listen: - uri: localhost:3313 - uri: 192.168.64.9:3313 advertise: client: 192.168.64.9:3313 storage-1-spb: roles_cfg: roles.httpd: default: listen: localhost:8084 roles.tcf-worker: cluster_1: cluster_a cluster_2: cluster_b initial_status: active dml_users: [ tcf-dml ] replication_user: tcf-replicator replication_password: secret storage: config_storage storage_params: endpoints: - uri: 192.168.64.9:3301 login: client password: secret - uri: 192.168.64.9:3302 login: client password: secret - uri: 192.168.64.9:3303 login: client password: secret timeout: 3 iproto: listen: - uri: localhost:3314 - uri: 192.168.64.9:3314 advertise: client: 192.168.64.9:3314 storage-2: leader: storage-2-msk instances: storage-2-msk: roles_cfg: roles.httpd: default: listen: localhost:8085 roles.tcf-worker: cluster_1: cluster_a cluster_2: cluster_b initial_status: active dml_users: [ tcf-dml ] replication_user: tcf-replicator replication_password: secret storage: config_storage storage_params: endpoints: - uri: 192.168.64.9:3301 login: client password: secret - uri: 192.168.64.9:3302 login: client password: secret - uri: 192.168.64.9:3303 login: client password: secret timeout: 3 iproto: listen: - uri: localhost:3315 - uri: 192.168.64.9:3315 advertise: client: 192.168.64.9:3315 storage-2-spb: roles_cfg: roles.httpd: default: listen: localhost:8086 roles.tcf-worker: cluster_1: cluster_a cluster_2: cluster_b initial_status: active dml_users: [ tcf-dml ] replication_user: tcf-replicator replication_password: secret storage: config_storage storage_params: endpoints: - uri: 192.168.64.9:3301 login: client password: secret - uri: 192.168.64.9:3302 login: client password: secret - uri: 192.168.64.9:3303 login: client password: secret timeout: 3 iproto: listen: - uri: localhost:3316 - uri: 192.168.64.9:3316 advertise: client: 192.168.64.9:3316
Note
Начиная с TCF 0.5.0, рекомендуется явно указывать роль
roles.httpd
в конфигурации кластера. При этом адрес для HTTP-запросов для конкретного экземпляра задается в секцииroles_cfg.roles.httpd.default.listen
. В версиях до 0.5.0 такой адрес указывается в секцииroles_cfg.roles.tcf-worker.http.listen
.В директории
instances.enabled/cluster_a
на первом сервере (192.168.64.9
) создайте файлinstances.yml
– список экземпляров, которые будут запущены в текущем окружении:router-msk: router-spb: storage-1-msk: storage-1-spb: storage-2-msk: storage-2-spb:
В директории
instances.enabled/cluster_b
на втором сервере (192.168.64.12
) создайте файлconfig.yml
с конфигурацией кластера B. Экземпляры в этой конфигурации принимают входящие запросы на порты 3321–3328:credentials: users: admin: password: 'secret-cluster-cookie' roles: [ super, sharding ] tcf-replicator: password: secret roles: [ super ] tcf-dml: password: secret roles: [ super ] iproto: advertise: peer: login: admin sharding: login: admin sharding: bucket_count: 3000 groups: routers: replication: failover: manual sharding: roles: [ router ] roles: [ roles.tcf-worker, roles.tcf-coordinator, roles.crud-router, roles.httpd ] replicasets: router-msk: leader: router-msk instances: router-msk: roles_cfg: roles.httpd: default: listen: localhost:8081 roles.tcf-worker: cluster_1: cluster_b cluster_2: cluster_a initial_status: passive dml_users: [ tcf-dml ] replication_user: tcf-replicator replication_password: secret storage: config_storage storage_params: endpoints: - uri: 192.168.64.9:3301 login: client password: secret - uri: 192.168.64.9:3302 login: client password: secret - uri: 192.168.64.9:3303 login: client password: secret timeout: 3 roles.tcf-coordinator: failover_timeout: 20 health_check_delay: 2 max_suspect_counts: 3 iproto: listen: - uri: localhost:3321 - uri: 192.168.64.12:3321 advertise: client: 192.168.64.12:3321 router-spb: leader: router-spb instances: router-spb: roles_cfg: roles.httpd: default: listen: localhost:8082 roles.tcf-worker: cluster_1: cluster_b cluster_2: cluster_a initial_status: passive dml_users: [ tcf-dml ] replication_user: tcf-replicator replication_password: secret storage: config_storage storage_params: endpoints: - uri: 192.168.64.9:3301 login: client password: secret - uri: 192.168.64.9:3302 login: client password: secret - uri: 192.168.64.9:3303 login: client password: secret timeout: 3 roles.tcf-coordinator: failover_timeout: 20 health_check_delay: 2 max_suspect_counts: 3 iproto: listen: - uri: localhost:3322 - uri: 192.168.64.12:3322 advertise: client: 192.168.64.12:3322 storages: replication: failover: manual sharding: roles: [ storage ] roles: [ roles.crud-storage, roles.tcf-worker, roles.httpd ] replicasets: storage-1: leader: storage-1-msk instances: storage-1-msk: roles_cfg: roles.httpd: default: listen: localhost:8083 roles.tcf-worker: cluster_1: cluster_b cluster_2: cluster_a initial_status: passive dml_users: [ tcf-dml ] replication_user: tcf-replicator replication_password: secret storage: config_storage storage_params: endpoints: - uri: 192.168.64.9:3301 login: client password: secret - uri: 192.168.64.9:3302 login: client password: secret - uri: 192.168.64.9:3303 login: client password: secret timeout: 3 iproto: listen: - uri: localhost:3323 - uri: 192.168.64.12:3323 advertise: client: 192.168.64.12:3323 storage-1-spb: roles_cfg: roles.httpd: default: listen: localhost:8084 roles.tcf-worker: cluster_1: cluster_b cluster_2: cluster_a initial_status: passive dml_users: [ tcf-dml ] replication_user: tcf-replicator replication_password: secret storage: config_storage storage_params: endpoints: - uri: 192.168.64.9:3301 login: client password: secret - uri: 192.168.64.9:3302 login: client password: secret - uri: 192.168.64.9:3303 login: client password: secret timeout: 3 iproto: listen: - uri: localhost:3324 - uri: 192.168.64.12:3324 advertise: client: 192.168.64.12:3324 storage-2: leader: storage-2-msk instances: storage-2-msk: roles_cfg: roles.httpd: default: listen: localhost:8085 roles.tcf-worker: cluster_1: cluster_b cluster_2: cluster_a initial_status: passive dml_users: [ tcf-dml ] replication_user: tcf-replicator replication_password: secret storage: config_storage storage_params: endpoints: - uri: 192.168.64.9:3301 login: client password: secret - uri: 192.168.64.9:3302 login: client password: secret - uri: 192.168.64.9:3303 login: client password: secret timeout: 3 iproto: listen: - uri: localhost:3325 - uri: 192.168.64.12:3325 advertise: client: 192.168.64.12:3325 storage-2-spb: roles_cfg: roles.httpd: default: listen: localhost:8086 roles.tcf-worker: cluster_1: cluster_b cluster_2: cluster_a initial_status: passive dml_users: [ tcf-dml ] replication_user: tcf-replicator replication_password: secret storage: config_storage storage_params: endpoints: - uri: 192.168.64.9:3301 login: client password: secret - uri: 192.168.64.9:3302 login: client password: secret - uri: 192.168.64.9:3303 login: client password: secret timeout: 3 iproto: listen: - uri: localhost:3326 - uri: 192.168.64.12:3326 advertise: client: 192.168.64.12:3326 storage-3: leader: storage-3-msk instances: storage-3-msk: roles_cfg: roles.httpd: default: listen: localhost:8087 roles.tcf-worker: cluster_1: cluster_b cluster_2: cluster_a initial_status: passive dml_users: [ tcf-dml ] replication_user: tcf-replicator replication_password: secret storage: config_storage storage_params: endpoints: - uri: 192.168.64.9:3301 login: client password: secret - uri: 192.168.64.9:3302 login: client password: secret - uri: 192.168.64.9:3303 login: client password: secret timeout: 3 iproto: listen: - uri: localhost:3327 - uri: 192.168.64.12:3327 advertise: client: 192.168.64.12:3327 storage-3-spb: roles_cfg: roles.httpd: default: listen: localhost:8088 roles.tcf-worker: cluster_1: cluster_b cluster_2: cluster_a initial_status: passive dml_users: [ tcf-dml ] replication_user: tcf-replicator replication_password: secret storage: config_storage storage_params: endpoints: - uri: 192.168.64.9:3301 login: client password: secret - uri: 192.168.64.9:3302 login: client password: secret - uri: 192.168.64.9:3303 login: client password: secret timeout: 3 iproto: listen: - uri: localhost:3328 - uri: 192.168.64.12:3328 advertise: client: 192.168.64.12:3328
В директории
instances.enabled/cluster_b
на втором сервере (192.168.64.12
) создайте файлinstances.yml
:router-msk: router-spb: storage-1-msk: storage-1-spb: storage-2-msk: storage-2-spb: storage-3-msk: storage-3-spb:
На каждом из серверов в директориях
instances.enabled/cluster_a
иinstances.enabled/cluster_b
соответственно создайте директориюmigrations/scenario
. В этой директории создайте файл миграции001_migration.lua
:local helpers = require('tt-migrations.helpers') local function apply_scenario() local space = box.schema.space.create('writers') space:format({ {name = 'id', type = 'number'}, {name = 'bucket_id', type = 'number'}, {name = 'name', type = 'string'}, {name = 'age', type = 'number'}, }) space:create_index('primary', {parts = {'id'}}) space:create_index('bucket_id', {parts = {'bucket_id'}}) helpers.register_sharding_key('writers', {'id'}) end return { apply = { scenario = apply_scenario, }, }
В миграции создан шардированный спейс
writers
с ключом шардированияid
и первичным индексомprimary
.
Настройка и запуск Tarantool Cluster Manager¶
В качестве веб-интерфейса кластеров Tarantool DB используется Tarantool Cluster Manager, или TCM. Tarantool Cluster Manager – это инструмент для настройки и отслеживания кластеров Tarantool EE и управления ими. Подробная информация о TCM приведена в документации Tarantool.
Задать настройки для запуска TCM можно в файле конфигурации.
Для этого создайте файл tcm.yml
в директории instances.enabled/cluster_a
на первом сервере (192.168.64.9
):
http:
host: 0.0.0.0
port: 8080
storage:
provider: tarantool
tarantool:
prefix: /tcm
endpoints:
- http://192.168.64.9:3301
- http://192.168.64.9:3302
- http://192.168.64.9:3303
security:
bootstrap-password: secret
initial-settings:
clusters:
- name: Cluster A
id: 00000000-0000-0000-0000-000000000000
storage-connection:
provider: tarantool
tarantool-connection:
prefix: /tdb1
username: client
password: secret
endpoints:
- http://192.168.64.9:3301
- http://192.168.64.9:3302
- http://192.168.64.9:3303
tarantool-connection:
username: "admin"
password: "secret-cluster-cookie"
- name: Cluster B
storage-connection:
provider: tarantool
tarantool-connection:
prefix: /tdb2
username: client
password: secret
endpoints:
- http://192.168.64.9:3301
- http://192.168.64.9:3302
- http://192.168.64.9:3303
tarantool-connection:
username: "admin"
password: "secret-cluster-cookie"
Здесь:
http
– имя и порт хоста, на котором запущен TCM. По умолчанию, TCM запускается на порту 8080;storage
– настройки хранилища конфигурации и его узлов, настроенных и запущенных ранее;security
– настройки безопасности TCM;initial-settings
– сущности, которые создаются автоматически при первом запуске TCM. Сущности в примере – это два кластера Tarantool DB. Кластеры используют общее хранилище конфигурации, но имеют различные префиксы –/tdb1
и/tdb2
.
Полная информация об опциях конфигурации TCM приведена в документации TCM.
Запустить TCM с конфигурацией из файла можно так:
$ tcm -c=tcm.yml
См. также Начало работы с TCM.
Запуск активного кластера¶
Запустите активный кластер (Cluster A) на первом сервере (192.168.64.9
).
Для этого:
Перейдите в директорию
tarantooldb
:$ cd tarantooldb
Загрузите конфигурацию кластера в централизованное хранилище из YAML-файла, используя команду tt cluster publish:
$ tt cluster publish http://192.168.64.9:3301/tdb1 ./instances.enabled/cluster_a/config.yml
Здесь:
http://192.168.64.9:3301/tdb1
– адрес узла хранилища конфигурации;./instances.enabled/cluster_a/config.yml
– публикуемый файл конфигурации.
Запустите кластер:
$ tt start cluster_a
Запустите модуль шардирования
vshard
:$ tt replicaset vshard bootstrap cluster_a
Загрузите миграции в кластер:
$ tt migrations publish http://192.168.64.9:3301/tdb1 ./instances.enabled/cluster_a/migrations
Примените загруженные миграции:
$ tt migrations apply http://192.168.64.9:3301/tdb1 --tarantool-username=admin --tarantool-password=secret-cluster-cookie
Запуск пассивного кластера¶
Запустите пассивный кластер (Cluster B) на втором сервере (192.168.64.12
).
Для этого:
Перейдите в директорию
tarantooldb
:$ cd tarantooldb
Загрузите конфигурацию кластера в централизованное хранилище из YAML-файла, используя команду tt cluster publish:
$ tt cluster publish http://192.168.64.9:3301/tdb2 ./instances.enabled/cluster_b/config.yml
Здесь:
http://192.168.64.9:3301/tdb2
– адрес узла хранилища конфигурации;./instances.enabled/cluster_b/config.yml
– публикуемый файл конфигурации.
Запустите кластер:
$ tt start cluster_b
Запустите модуль шардирования
vshard
:$ tt replicaset vshard bootstrap cluster_b
Загрузите миграции в кластер:
$ tt migrations publish http://192.168.64.9:3301/tdb2 ./instances.enabled/cluster_b/migrations
Примените загруженные миграции:
$ tt migrations apply http://192.168.64.9:3301/tdb2 --tarantool-username=admin --tarantool-password=secret-cluster-cookie
Проверка работы кластеров¶
Чтобы проверить состояние кластеров, выполните следующие шаги:
Для входа в веб-интерфейс TCM откройте в браузере адрес
http://192.168.64.9:8080/
. Логин и пароль для входа:Username:
admin
Password:
secret
Чтобы проверить состояние кластеров, выберите нужный кластер (Cluster A или Cluster B) над вкладкой Stateboard в выпадающем списке Clusters. Всё настроено правильно, если на вкладке Stateboard все узлы в кластере подсвечены зеленым цветом.
Чтобы проверить примененную миграцию, перейдите на вкладку Tuples. При успешной миграции в списке появится спейс
writers
.Чтобы проверить текущее состояние кластеров, перейдите на вкладку TCF. Видно, что Cluster A перешел в активное состояние, а Cluster B – в пассивное.
Note
В Tarantool DB вкладка TCF в TCM поддерживается начиная с версии Tarantool DB 2.1.0. В более ранних версиях Tarantool DB 2.x используйте для проверки состояния кластеров соответствующий HTTP GET-запрос. Пример использования такого запроса приведен в соответствующем разделе Руководства для начинающих.
Также проверьте с помощью команды tt connect, что пассивный кластер заблокирован для пользователя
tcf-dml
:$ tt connect 192.168.64.9:3311 -u tcf-dml -p secret • Connecting to the instance... ⨯ failed to run interactive console: failed to create new console: failed to connect: failed to authenticate: DML is blocked, cluster is passive (ClientError, code 0x1ff)
Настройка и запуск репликатора данных с кластера A на кластер B¶
Чтобы сконфигурировать репликаторы данных (компоненты Gateway и Destination) для репликации с кластера A на кластер B, на каждом из двух серверов в директории
tcf-<tcf-version>
, которая была создана при распаковке архива, создайте файлconfig_a_b.yaml
и вставьте следующую конфигурацию:gateway: grpc_server: host: 192.168.64.9 port: 10080 replica_type: anonymous stream_instances: - uri: 192.168.64.9:3313 user: tcf-replicator password: secret - uri: 192.168.64.9:3314 user: tcf-replicator password: secret - uri: 192.168.64.9:3315 user: tcf-replicator password: secret - uri: 192.168.64.9:3316 user: tcf-replicator password: secret destination: gateways: - host: 192.168.64.9 port: 10080 vshard_routers: hosts: - "192.168.64.12:3321" - "192.168.64.12:3322" user: tcf-replicator password: secret
Attention
Начиная с TCF 0.5.0, параметр
destination.gateway
заменен наdestination.gateways
. В версиях до 0.5.0 используется старая версия параметра. Убедитесь, что ваша конфигурация соответствует версии TCF.Подробная инструкция по настройке репликаторов данных приведена в разделе Настройка межкластерных репликаторов. Полный список опций конфигурации репликаторов можно найти в соответствующем разделе справочника.
На первом сервере (
192.168.64.9
) запустите TCF Gateway для отправки изменений с Cluster A на Cluster B:$ ./tcf-gateway --config config_a_b.yaml
На втором сервере (
192.168.64.12
) запустите TCF Destination для применения изменений, пришедших с Cluster A на Cluster B:$ ./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 Host=localhost:13303 From="&{VClock:[0 3117] OwnerID:0 ConfirmedVClock:[]}"
Проверка репликации с кластера A на кластер B¶
Чтобы проверить успешную репликацию данных с Cluster A на Cluster B:
Откройте TCM по адресу
http://192.168.64.9:8080/
. В TCM над вкладкой Stateboard выберите кластер Cluster A в выпадающем списке Clusters.Подключитесь к роутеру
router-msk
. Для этого на вкладке Stateboard нажмите на набор репликrouter-msk
. Выберите узелrouter-msk
и в открывшемся окне перейдите на вкладку Terminal (TT Connect).Во вкладке Terminal добавьте в спейс
writers
новый кортеж:crud.insert_object('writers', { id = 1, name = 'Haruki Murakami', age = 75 }, { noreturn = true })
Проверьте, что в спейсе появились данные. Для этого перейдите на вкладку Tuples и выберите в списке спейс
writers
. В открывшейся вкладке видно, что в спейс добавлен новый кортежHaruki Murakami
.Переключитесь на Cluster B и перейдите на вкладку Tuples.
Выберите в списке спейс
writers
и проверьте, что в открывшейся вкладке также появился кортежHaruki Murakami
.