Руководство для начинающих¶
В этом руководстве приведена инструкция по ручному разворачиванию отказоустойчивой системы из двух кластеров Tarantool DB 2.х с использованием Tarantool Clusters Federation (TCF). Узнать больше об архитектуре и элементах TCF вы можете на странице Архитектура.
В руководстве кластеры развернуты вручную с помощью утилиты tt CLI. Пример запуска кластеров Tarantool DB с TCF через Docker Compose можно найти в документации Tarantool DB.
Руководство включает следующие шаги:
Во время прохождения руководства будут запущены:
хранилище конфигурации etcd – для хранения конфигурации кластеров и их состояния;
активный кластер Tarantool DB (Tarantool Cluster 1), состоящий из 1 роутера и 1 набора реплик из 3 хранилищ;
пассивный кластер Tarantool DB (Tarantool Cluster 2), состоящий из 1 роутера и 1 набора реплик из 3 хранилищ;
веб-интерфейс Tarantool Cluster Manager (TCM);
TCF Gateway – для отправки изменений с Tarantool Cluster 1 на Tarantool Cluster 2;
TCF Destination – для применения изменений, пришедших с Tarantool Cluster 1 на Tarantool Cluster 2.
Подготовка архивов для развертывания¶
TCF и Tarantool DB распространяются в виде TGZ-архивов.
Скачайте следующие файлы в личном кабинете tarantool.io:
сборку TCF в разделе tcf/release. Архив имеет название вида
tcf-<tcf_version>.tar.gz, где<tcf_version>– версия TCF не ниже 0.9.0;сборку Tarantool DB в разделе tarantooldb/release/for_deploy/. Архив имеет название вида
tarantooldb-<tdb_version>.<os>.<arch>.tar.gz, где<tdb_version>– версия Tarantool DB не ниже 2.0.0.
Если у вас нет доступа к личному кабинету, свяжитесь с нами через форму обратной связи или напишите на sales@tarantool.io.
Скопируйте архив
tarantooldb-<tdb_version>.<os>.<arch>.tar.gzв домашнюю директорию и распакуйте его:$ tar -xzf tarantooldb-2.2.1.linux.x86_64.tar.gz
Добавьте директорию
tarantooldbв список директорий переменнойPATH:$ export PATH=~/tarantooldb:$PATH
Скопируйте архив
tcf-<tcf_version>.tar.gzв домашнюю директорию и распакуйте его:$ tar -xzf tcf-0.9.0.tar.gz
Установка и запуск etcd¶
Перед разворачиванием кластеров Tarantool DB и TCF установите etcd. Подробнее о настройке хранилища конфигурации и состояния можно узнать в соответствующем разделе.
Запустите etcd с флагами --listen-client-urls и --advertise-client-urls:
$ etcd --listen-client-urls http://127.0.0.1:2379 \
--advertise-client-urls http://127.0.0.1:2379
Настройка и запуск кластеров¶
Создание приложения¶
Перейдите в директорию
tarantooldbи выполните в ней команду tt init. Команда создаст окружениеtt, в том числе файл конфигурацииtt.yaml, который используется утилитой tt CLI.В директории
instances.enabledсозданногоtt-окружения создайте директорииcluster1иcluster2.В директории
instances.enabled/cluster1создайте файлsource.yaml. Этот файл содержит конфигурацию Tarantool Cluster 1. Экземпляры в этой конфигурации принимают входящие запросы на порты 3301–3304:credentials: users: dbadmin: password: secret roles: [super] peer: password: peer_password roles: ['replication'] privileges: - permissions: ['execute'] lua_call: ['box.info'] storage: password: storage_password roles: [sharding] tcm_tarantool: password: tcm_tarantool_password roles: [super] tcf_replicator: password: replicator_password roles: [super] tcf_dml: password: dml_password roles: [super] iproto: advertise: peer: login: peer sharding: login: storage sharding: bucket_count: 3000 roles_cfg: roles.tcf-worker: cluster_1: cluster1 cluster_2: cluster2 initial_status: active dml_users: [ tcf_dml ] replication_user: tcf_replicator replication_password: replicator_password status_ttl: 4 enable_system_check: true roles.tcf-coordinator: failover_timeout: 20 health_check_delay: 2 max_suspect_counts: 3 groups: routers: sharding: roles: [router] replicasets: router-001: instances: router-001-a: roles_cfg: roles.httpd: default: listen: 8081 iproto: listen: - uri: 127.0.0.1:3301 advertise: client: 127.0.0.1:3301 roles: - roles.tcf-worker - roles.tcf-coordinator - roles.httpd - roles.crud-router roles_cfg: roles.crud-router: stats: true stats_driver: metrics stats_quantiles: true stats_quantile_tolerated_error: 0.001 stats_quantile_age_buckets_count: 5 stats_quantile_max_age_time: 180 storages: sharding: roles: [storage] replication: failover: manual replicasets: storage-001: leader: storage-001-a instances: storage-001-a: roles_cfg: roles.httpd: default: listen: 8082 iproto: listen: - uri: 127.0.0.1:3302 advertise: client: 127.0.0.1:3302 storage-001-b: roles_cfg: roles.httpd: default: listen: 8083 iproto: listen: - uri: 127.0.0.1:3303 advertise: client: 127.0.0.1:3303 storage-001-c: roles_cfg: roles.httpd: default: listen: 8084 iproto: listen: - uri: 127.0.0.1:3304 advertise: client: 127.0.0.1:3304 roles: - roles.tcf-worker - roles.httpd - roles.crud-storage - roles.expirationd roles_cfg: roles.expirationd: []
В файле конфигурации в секции
credentials.usersзаданы следующие пользователи:dbadmin– администратор TCF;peer– пользователь для репликации внутри кластера;storage– пользователь используется при запросах роутера к экземплярам хранилища;tcm_tarantool– пользователь для подключения TCM к экземплярам Tarantool Cluster 1;tcf_replicator– пользователь используется для репликации между кластерами;tcf_dml– пользователь предназначен для выполнения DML-операций с данными от имени сервисных компонентов TCF.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/cluster1создайте файлinstances.yaml– список экземпляров, которые будут запущены в текущем окружении:router-001-a: storage-001-a: storage-001-b: storage-001-c:
В директории
instances.enabled/cluster1создайте файлconfig.yaml. Этот файл содержит конфигурацию централизованного хранилища etcd.config: etcd: endpoints: - http://127.0.0.1:2379 prefix: /cluster1 http: request: timeout: 3
В директории
instances.enabled/cluster2создайте файлsource.yamlс конфигурацией кластера B. Экземпляры в этой конфигурации принимают входящие запросы на порты 13301-13304:credentials: users: dbadmin: password: secret roles: [super] peer: password: peer_password roles: ['replication'] privileges: - permissions: ['execute'] lua_call: ['box.info'] storage: password: storage_password roles: [sharding] tcm_tarantool: password: tcm_tarantool_password roles: [super] tcf_replicator: password: replicator_password roles: [super] tcf_dml: password: dml_password roles: [super] iproto: advertise: peer: login: peer sharding: login: storage sharding: bucket_count: 3000 roles_cfg: roles.tcf-worker: cluster_1: cluster2 cluster_2: cluster1 initial_status: passive dml_users: [ tcf_dml ] replication_user: tcf_replicator replication_password: replicator_password status_ttl: 4 enable_system_check: true roles.tcf-coordinator: failover_timeout: 20 health_check_delay: 2 max_suspect_counts: 3 groups: routers: sharding: roles: [router] replicasets: router-001: instances: router-001-a: roles_cfg: roles.httpd: default: listen: 18081 iproto: listen: - uri: 127.0.0.1:13301 advertise: client: 127.0.0.1:13301 roles: - roles.tcf-worker - roles.tcf-coordinator - roles.httpd - roles.crud-router roles_cfg: roles.crud-router: stats: true stats_driver: metrics stats_quantiles: true stats_quantile_tolerated_error: 0.001 stats_quantile_age_buckets_count: 5 stats_quantile_max_age_time: 180 storages: sharding: roles: [storage] replication: failover: manual replicasets: storage-001: leader: storage-001-a instances: storage-001-a: roles_cfg: roles.httpd: default: listen: 18082 iproto: listen: - uri: 127.0.0.1:13302 advertise: client: 127.0.0.1:13302 storage-001-b: roles_cfg: roles.httpd: default: listen: 18083 iproto: listen: - uri: 127.0.0.1:13303 advertise: client: 127.0.0.1:13303 storage-001-c: roles_cfg: roles.httpd: default: listen: 18084 iproto: listen: - uri: 127.0.0.1:13304 advertise: client: 127.0.0.1:13304 roles: - roles.tcf-worker - roles.httpd - roles.crud-storage - roles.expirationd roles_cfg: roles.expirationd: []
В директории
instances.enabled/cluster2создайте файлinstances.yaml:router-001-b: storage-001-b: storage-002-b: storage-003-c:
В директории
instances.enabled/cluster2создайте файлconfig.yaml.config: etcd: endpoints: - http://127.0.0.1:2379 prefix: /cluster2 http: request: timeout: 3
В директории
instances.enabledсоздайте директорию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.yaml в директории instances.enabled/cluster1:
mode: production
cluster:
connection-rate-limit: 512
tarantool-timeout: 10s
tarantool-ping-timeout: 5s
tt-command: tt
refresh-state-period: 5s
refresh-state-timeout: 4s
discovery-period: 4s
sharding-index: bucket_id
skew-time: 30s
security:
bootstrap-password: secret
http:
host: 127.0.0.1
port: 8080
show-stack-trace: False
trace: False
network: tcp
tls:
enabled: False
cert-file:
key-file:
server-name:
min-version: 0
max-version: 0
curve-preferences: []
cipher-suites: []
log:
default:
show-stack-trace: False
add-source: False
level: INFO
format: struct
output: stdout
file:
name: /var/log/tarantool/cluster-manager/tcm.log
maxsize: 1073741824
maxage: 0
maxbackups: 10
compress: True
addon:
enabled: False
addons-dir:
max-upload-size: 104857600
dev-addons-dir: []
limits:
users-count: 1000
clusters-count: 10
roles-count: 100
webhooks-count: 200
user-secrets-count: 10
user-websessions-count: 10
linked-cluster-users: 10
feature:
ttgraph: False
column-store: False
tqe: False
api-token: False
tcf: True
storage:
provider: etcd
etcd:
prefix: /tcm
endpoints:
- http://127.0.0.1:2379
initial-settings:
clusters:
- name: Tarantool Cluster 1
id: 00000000-0000-0000-0000-000000000000
storage-connection:
provider: etcd
etcd-connection:
prefix: /cluster1
endpoints:
- http://127.0.0.1:2379
tarantool-connection:
username: tcm_tarantool
password: tcm_tarantool_password
- name: Tarantool Cluster 2
storage-connection:
provider: etcd
etcd-connection:
prefix: /cluster2
endpoints:
- http://127.0.0.1:2379
tarantool-connection:
username: tcm_tarantool
password: tcm_tarantool_password
Здесь:
http– имя и порт хоста, на котором запущен TCM. По умолчанию, TCM запускается на порту 8080;storage– настройки хранилища конфигурации и узлов etcd, настроенных и запущенных ранее;security– настройки безопасности TCM;initial-settings– кластеры, которые создаются автоматически при первом запуске TCM. В конфигурации TCM автоматически созданы кластеры Tarantool Cluster 1 и Tarantool Cluster 2. Кластеры используют общий etcd, но имеют различные префиксы –/cluster1и/cluster2.
Полная информация об опциях конфигурации TCM приведена в документации TCM.
Чтобы запустить TCM с конфигурацией из файла:
Откройте новую вкладку терминала.
Перейдите в директорию
instances.enabled/cluster1.Запустите TCM:
$ tcm -c tcm.yaml
Узнать больше: Начало работы с TCM.
Запуск активного кластера¶
Запустите активный кластер (Tarantool Cluster 1). Для этого:
Перейдите в директорию
tarantooldb:$ cd tarantooldb
Загрузите конфигурацию кластера в централизованное хранилище из YAML-файла, используя команду tt cluster publish:
$ tt cluster publish http://127.0.0.1:2379/cluster1 ./instances.enabled/cluster1/source.yaml
Здесь:
http://127.0.0.1:2379/cluster1– адрес etcd;./instances.enabled/cluster1/source.yaml– публикуемый файл конфигурации.
Запустите кластер:
$ tt start cluster1
Проверьте статус кластера:
$ tt status cluster1
Результат будет выглядеть следующим образом:
INSTANCE STATUS PID MODE CONFIG BOX UPSTREAM cluster1:router-001-a RUNNING 502612 RW ready running -- cluster1:storage-001-a RUNNING 502613 RW ready running -- cluster1:storage-001-b RUNNING 502614 RO ready running -- cluster1:storage-001-c RUNNING 502611 RO ready running --
Запустите модуль шардирования
vshard:$ tt replicaset vshard bootstrap cluster1
Результат будет выглядеть следующим образом:
• Discovery application... Orchestrator: centralized config Replicasets state: bootstrapped • router-001 Failover: off Master: single • router-001-a localhost:3301 rw • storage-001 Failover: manual Master: single • storage-001-a localhost:3302 rw • storage-001-b localhost:3303 read • storage-001-c localhost:3304 read • Bootstrapping vshard • Done.
Загрузите миграции в кластер:
$ tt migrations publish http://127.0.0.1:2379/cluster1 ./instances.enabled/cluster1/migrations
Примените загруженные миграции:
$ tt migrations apply http://127.0.0.1:2379/cluster1 --tarantool-username=dbadmin --tarantool-password=secret
Результат будет выглядеть следующим образом:
• router-001: • 001_migration.lua: successfully applied • storage-001: • 001_migration.lua: successfully applied
Запуск пассивного кластера¶
Запустите пассивный кластер (Tarantool Cluster 2). Для этого:
Перейдите в директорию
tarantooldb:$ cd tarantooldb
Загрузите конфигурацию кластера в централизованное хранилище из YAML-файла, используя команду tt cluster publish:
$ tt cluster publish http://127.0.0.1:2379/cluster2 ./instances.enabled/cluster2/source.yaml
Здесь:
http://127.0.0.1:2379/cluster2– адрес etcd;./instances.enabled/cluster2/source.yaml– публикуемый файл конфигурации.
Запустите кластер:
$ tt start cluster2
Проверьте статус кластера:
$ tt status cluster2
Результат будет выглядеть следующим образом:
INSTANCE STATUS PID MODE CONFIG BOX UPSTREAM cluster2:router-001-b RUNNING 502898 RW ready running -- cluster2:storage-001-b RUNNING 502899 RW ready running -- cluster2:storage-002-b RUNNING 502896 RO ready running -- cluster2:storage-003-c RUNNING 502897 RO ready running --
Запустите модуль шардирования
vshard:$ tt replicaset vshard bootstrap cluster2
Результат будет выглядеть следующим образом:
• Discovery application... Orchestrator: centralized config Replicasets state: bootstrapped • router-001 Failover: off Master: single • router-001-b 127.0.0.1:13301 rw • storage-001 Failover: manual Master: single • storage-001-b 127.0.0.1:13302 rw • storage-002-b 127.0.0.1:13303 read • storage-003-c 127.0.0.1:13304 read • Bootstrapping vshard • Done.
Загрузите миграции в кластер:
$ tt migrations publish http://127.0.0.1:2379/cluster2 ./instances.enabled/cluster2/migrations
Примените загруженные миграции:
$ tt migrations apply http://127.0.0.1:2379/cluster2 --tarantool-username=dbadmin --tarantool-password=secret
Результат будет выглядеть следующим образом:
• router-001: • 001_migration.lua: successfully applied • storage-001: • 001_migration.lua: successfully applied
Проверка работы кластеров¶
Чтобы проверить состояние кластеров, выполните следующие шаги:
Для входа в TCM откройте в браузере адрес http://localhost:8080. Логин и пароль для входа:
Username:
admin;Password:
secret.
В TCM выберите нужный кластер (Tarantool Cluster 1 или Tarantool Cluster 2) над вкладкой Stateboard в выпадающем списке Clusters. Всё настроено правильно, если на вкладке Stateboard все узлы в кластере подсвечены зеленым цветом.
Чтобы проверить примененную миграцию, перейдите на вкладку Tuples. При успешной миграции в списке появится спейс
writers.Чтобы проверить текущее состояние кластеров, перейдите на вкладку TCF.
Также проверьте с помощью команды tt connect, что пассивный кластер заблокирован для пользователя
tcf_dml:$ tt connect 127.0.0.1:13301 -u tcf_dml -p dml_password • 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)
Конфигурирование и запуск репликаторов данных¶
Настройка репликаторов¶
Чтобы сконфигурировать репликаторы данных (компоненты Gateway и Destination) для репликации с кластера Tarantool Cluster 1 на кластер Tarantool Cluster 2,
в директории с распакованным архивом TCF создайте файл config_a_b.yaml и вставьте следующую конфигурацию:
gateway:
grpc_server:
host: 127.0.0.1
port: 10080
http_server:
host: 127.0.0.1
port: 8000
replica_type: anonymous
max_cpu: 4
stream_instances:
- uri: 127.0.0.1:3302
user: tcf_replicator
password: replicator_password
- uri: 127.0.0.1:3303
user: tcf_replicator
password: replicator_password
- uri: 127.0.0.1:3304
user: tcf_replicator
password: replicator_password
destination:
metrics_enabled: true
http_server:
host: 127.0.0.1
port: 8001
gateways:
- host: 127.0.0.1
port: 10080
buffer_size: 10000
vshard_routers:
hosts:
- 127.0.0.1:13301
user: tcf_replicator
password: replicator_password
start_retry_delay: 200
max_retry_delay: 1500
retry_attempts: 10
max_cpu: 4
Подробная инструкция по настройке репликаторов данных приведена в разделе Настройка межкластерных репликаторов. Полный список опций конфигурации репликаторов можно найти в соответствующем разделе справочника.
Запуск репликатора Tarantool Cluster 1 -> Tarantool Cluster 2¶
Запустите TCF Gateway для отправки изменений с Tarantool Cluster 1 на Tarantool Cluster 2:
$ ./tcf-gateway --config config_a_b.yaml
Запустите TCF Destination для применения изменений, пришедших с Tarantool Cluster 1 на Tarantool Cluster 2:
$ ./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:[]}"
Проверка репликации Tarantool Cluster 1 -> Tarantool Cluster 2¶
Чтобы проверить успешную репликацию данных с Tarantool Cluster 1 на Tarantool Cluster 2:
Перейдите в веб-интерфейс ТСМ.
В TCM над вкладкой Stateboard выберите кластер Tarantool Cluster 1 в выпадающем списке Clusters.
Подключитесь к узлу-роутеру. Для этого нажмите на
router-001, выберите экземплярrouter-001-bи в открывшемся окне перейдите на вкладку Terminal (TT Connect).Добавьте в созданный ранее спейс
writersновый кортеж:crud.insert_object('writers', { id = 1, name = 'Haruki Murakami', age = 75 }, { noreturn = true })
Проверьте, что в спейсе появились данные. Для этого перейдите на вкладку Tuples и выберите в списке спейс
writers. В открывшейся вкладке видно, что в спейс добавлен новый кортежHaruki Murakami.Переключитесь на Tarantool Cluster 2 и перейдите на вкладку Tuples.
Выберите в списке спейс
writersи проверьте, что в открывшейся вкладке также появился кортежHaruki Murakami.