VK Docs logo
Помощь
Обновлена 5 февраля 2026 г. в 11:58

Настройка среды с горизонтальным масштабированием

Начиная с версии TCF 0.11.0 в TCF доступна функциональность горизонтального масштабирования репликаторов. Она позволяет распределять нагрузку репликации за счёт использования нескольких процессов, каждый из которых обслуживает отдельные наборы реплик. Такой подход позволяет масштабировать репликацию независимо от размера кластеров, гибко управлять ресурсами и изоляцией нагрузки, повысить отказоустойчивость и предсказуемость поведения системы при росте числа набора реплик.

Данная инструкция описывает порядок развёртывания и настройки кластеров Tarantool DB 2.х с учётом горизонтального масштабирования набора реплик, а также особенности конфигурации их процессов в такой топологии. Каждый кластер состоит из 5 узлов (1 роутер и 2 набора реплик хранилищ по 2 узла в каждом). В примере в качестве хранилища состояния используется etcd.

В руководстве кластеры развернуты вручную с помощью утилиты tt CLI. Пример запуска кластеров Tarantool DB с TCF через Docker Compose можно найти в документации Tarantool DB.

Перед настройкой и запуском кластеров требуется распаковать архивы с TCF 0.11 или выше и TDB версий 2.x и 3.0 или выше. Для этого необходимо заранее выполнить шаги из раздела руководства по установке.

Установка и запуск 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

Настройка кластеров и хранилища etcd

  1. Перейдите в директорию tarantooldb и выполните в ней команду tt init. Команда создаст окружение tt, в том числе файл конфигурации tt.yaml, который используется утилитой tt CLI.

  2. В директории instances.enabled созданного tt-окружения создайте директории cluster1 и cluster2.

  3. В директории instances.enabled/cluster1 создайте файл source.yaml. Этот файл содержит конфигурацию Tarantool Cluster 1. Экземпляры в этой конфигурации принимают входящие запросы на порты 3301–3305:

Здесь:

  • dbadmin – администратор TCF;
  • peer – пользователь используется для репликации данных внутри кластера;
  • storage – пользователь используется при запросах роутера к экземплярам хранилища;
  • tcf_replicator – пользователь для репликации между кластерами, которыми управляет TCF;
  • tcf_dml – пользователь используется внешними пользователями/приложениями для выполнения операций с данными (DML – Data Manipulation Language).

Подробнее о пользователях, необходимых для корректной работы TCF, можно узнать в разделе Роли и пользователи.

  1. В директории instances.enabled/cluster1 создайте файл instances.yaml – список экземпляров, которые будут запущены в текущем окружении:

    router-001-a:storage-001-a:storage-001-b:storage-002-a:storage-002-b:
  2. В директории instances.enabled/cluster1 создайте файл config.yaml. Этот файл содержит конфигурацию централизованного хранилища etcd.

    config:  etcd:    endpoints:      - http://127.0.0.1:2379    prefix: /cluster1    http:      request:        timeout: 3
  3. В директории instances.enabled/cluster2 создайте файл source.yaml с конфигурацией кластера Tarantool Cluster 2. Экземпляры в этой конфигурации принимают входящие запросы на порты 13301-13305:

  4. В директории instances.enabled/cluster2 создайте файл instances.yaml:

    router-001-a:storage-001-a:storage-001-b:storage-002-a:storage-002-b:
  5. В директории instances.enabled/cluster2 создайте файл config.yaml.

    config:  etcd:    endpoints:      - http://127.0.0.1:2379    prefix: /cluster2    http:      request:        timeout: 3
  6. В директории 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'})endreturn {    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:

Здесь:

  • http – имя и порт хоста, на котором запущен TCM. По умолчанию, TCM запускается на порту 8080;

  • storage – настройки хранилища конфигурации и узлов etcd, настроенных и запущенных ранее;

  • security – настройки безопасности TCM;

  • initial-settings – кластеры, которые создаются автоматически при первом запуске TCM. В конфигурации TCM автоматически созданы кластеры Tarantool Cluster 1 и Tarantool Cluster 2. Кластеры используют общий etcd, но имеют различные префиксы – /cluster1 и /cluster2.

    Полная информация об опциях конфигурации TCM приведена в документации TCM.

Чтобы запустить TCM с конфигурацией из файла:

  1. Откройте новую вкладку терминала.

  2. Перейдите в директорию instances.enabled/cluster1.

  3. Запустите TCM:

    $ tcm -c tcm.yaml

Узнать больше: Начало работы с TCM.

Запуск активного кластера

Запустите активный кластер (Tarantool Cluster 1). Для этого:

  1. Перейдите в директорию tarantooldb:

    $ cd tarantooldb
  2. Загрузите конфигурацию кластера в централизованное хранилище из 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 – публикуемый файл конфигурации.
  3. Запустите кластер:

    $ tt start cluster1
  4. Проверьте статус кластера:

    $ 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-002-a  RUNNING  502611  RW    ready   running    --    cluster1:storage-002-b  RUNNING  502611  RO    ready   running    --
  5. Запустите модуль шардирования 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 127.0.0.1:3302 rw     • storage-001-b 127.0.0.1:3303 read • storage-002   Failover: manual   Master:   single     • storage-002-a 127.0.0.1:3304 rw     • storage-002-b 127.0.0.1:3305 read     • Bootstrapping vshard         • Done.
  6. Загрузите миграции в кластер:

    $ tt migrations publish http://127.0.0.1:2379/cluster1 ./instances.enabled/cluster1/migrations
  7. Примените загруженные миграции:

    $ 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 • storage-002:              •     001_migration.lua: successfully applied

Запуск пассивного кластера

Запустите пассивный кластер (Tarantool Cluster 2). Для этого:

  1. Перейдите в директорию tarantooldb:

    $ cd tarantooldb
  2. Загрузите конфигурацию кластера в централизованное хранилище из 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 – публикуемый файл конфигурации.
  3. Запустите кластер:

    $ tt start cluster2
  4. Проверьте статус кластера:

    $ tt status cluster2

    Результат будет выглядеть следующим образом:

    INSTANCE                STATUS   PID     MODE  CONFIG  BOX      UPSTREAMcluster2:storage-001-a  RUNNING  502899  RW    ready   running    --       cluster2:storage-001-b  RUNNING  502896  RO    ready   running    --       cluster2:storage-002-a  RUNNING  502611  RW    ready   running    --cluster2:storage-002-b  RUNNING  502612  RO    ready   running    --
  5. Запустите модуль шардирования vshard:

    $ tt replicaset vshard bootstrap cluster2

    Результат будет выглядеть следующим образом:

    • Discovery application...  Orchestrator:      centralized config Replicasets state: bootstrapped  • router-001   Failover: off   Master:   single     • router-001-a 127.0.0.1:13301 rw • storage-001   Failover: manual   Master:   single     • storage-001-a 127.0.0.1:13302 rw     • storage-001-b 127.0.0.1:13303 read • storage-002   Failover: manual   Master:   single     • storage-002-a 127.0.0.1:13304 rw     • storage-002-b 127.0.0.1:13305 read    • Bootstrapping vshard        • Done.
  6. Загрузите миграции в кластер:

    $ tt migrations publish http://127.0.0.1:2379/cluster2 ./instances.enabled/cluster2/migrations
  7. Примените загруженные миграции:

    $ 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• storage-002:             •     001_migration.lua: successfully applied

Проверка работы и состояния кластеров описана в соответствующем разделе.

Конфигурация файла для репликации данных с Tarantool Cluster 1 на Tarantool Cluster 2

Для репликации данных между кластерами Tarantool Cluster 1Tarantool Cluster 2 компоненты Gateway и Destination будут запускаться в нескольких экземплярах. В связи с этим к конфигурации репликации предъявляется обязательное требование: в совокупности все экземпляры Gateway должны обеспечивать чтение изменений со всех шардов исходного кластера, а все экземпляры Destination — запись данных во все шарды целевого кластера. Таким образом, для корректной работы репликации требуется создать и запустить 4 отдельных конфигурационных файла и 4 процесса TCF.

  1. Чтобы сконфигурировать первый экземпляр Gateway, в директории с распакованным архивом TCF создайте файл config_gateway_1to2_001.yaml и вставьте следующую конфигурацию:

Этот процесс читает изменения только из экземпляров хранилища в наборе реплик (шарде) storage-001 кластера Tarantool Cluster 1.

  1. Для конфигурации второго экземпляра Gateway создайте файл config_gateway_1to2_002.yaml и вставьте следующую конфигурацию:

    Данный экземпляр Gateway подключается к экземплярам хранилища в наборе реплик storage-002, читает поток изменений только из этого шарда и дополняет первый Gateway, обеспечивая покрытие исходного кластера.

  2. На этом шаге необходимо настроить первый экземпляр Destination. Для этого создайте файл config_destination_1to2_001.yaml и вставьте следующую конфигурацию:

    Данный экземпляр Destination принимает данные от всех Gateway, маршрутизирует операции только в экземпляры хранилища в наборе реплик storage-001 целевого кластера и отвечает за запись данных в соответствующие экземпляры хранилища.

  3. Для конфигурации второго экземпляра Destination создайте файл config_destination_1to2_002.yaml и вставьте следующую конфигурацию:

    Данный экземпляр Destination принимает данные от всех Gateway, маршрутизирует операции только в экземпляры хранилища в наборе реплик storage-002 целевого кластера и отвечает за запись данных в соответствующие экземпляры хранилища.

  4. После подготовки всех конфигурационных файлов запустите каждый компонент отдельным процессом:

    ./tcf-gateway --config config_gateway_1to2_001.yaml./tcf-gateway --config config_gateway_1to2_002.yaml./tcf-destination --config config_destination_1to2_001.yaml./tcf-destination --config config_destination_1to2_002.yaml

    Когда компонент Destination будет готов к работе, вывод результатов работы команды может выглядеть так:

    2025-02-27T17:43:38+03:00 INFO src/pkg/ttpusher/pusher.go:427 "CDC State successfully fetched" Pusher=General/Subscribe

    Проверить статус 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:

  1. Перейдите в веб-интерфейс ТСМ.

  2. В TCM над вкладкой Stateboard выберите кластер Tarantool Cluster 1 в выпадающем списке Clusters.

  3. Подключитесь к узлу-роутеру. Для этого нажмите на router-001, выберите экземпляр router-001-a и в открывшемся окне перейдите на вкладку Terminal (TT Connect).

  4. Добавьте в созданный ранее спейс writers новый кортеж:

    crud.insert_object('writers', {    id = 1,    name = 'Haruki Murakami',    age = 75}, {    noreturn = true})
  5. Проверьте, что в спейсе появились данные. Для этого перейдите на вкладку Tuples и выберите в списке спейс writers. В открывшейся вкладке видно, что в спейс добавлен новый кортеж Haruki Murakami.

  6. Переключитесь на Tarantool Cluster 2 и перейдите на вкладку Tuples.

  7. Выберите в списке спейс writers и проверьте, что в открывшейся вкладке также появился кортеж Haruki Murakami.

Конфигурация файла для репликации данных с Tarantool Cluster 2 на Tarantool Cluster 1

Для организации обратной репликации из Tarantool Cluster 2 в Tarantool Cluster 1 используется та же схема масштабирования, что и для прямого направления.

  1. Чтобы сконфигурировать первый экземпляр Gateway, в директории с распакованным архивом TCF создайте файл config_gateway_2to1_001.yaml и вставьте следующую конфигурацию:

Этот процесс читает изменения только из экземпляров хранилища в наборе реплик (шарде) storage-001 кластера Tarantool Cluster 2.

  1. Для конфигурации второго экземпляра Gateway создайте файл config_gateway_2to1_002.yaml и вставьте следующую конфигурацию:

    Данный экземпляр обслуживает экземпляры хранилища в шарде storage-002 и совместно с предыдущим экземпляром Gateway обеспечивает чтение изменений со всего Tarantool Cluster 2.

  2. На этом шаге необходимо настроить первый экземпляр Destination. Для этого создайте файл config_destination_2to1_001.yaml и вставьте следующую конфигурацию:

    Экземпляр Destination принимает данные от всех Gateway кластера Tarantool Cluster 2 и выполняет запись только в экземпляры хранилища в шарде storage-001.

  3. Для конфигурации второго экземпляра Destination создайте файл config_destination_2to1_002.yaml и вставьте следующую конфигурацию:

    Данный экземпляр получает данные от всех Gateway, выполняет запись исключительно в экземпляры хранилища в шарде storage-002.

Смена состояния кластеров

Чтобы проверить репликацию с Tarantool Cluster 2 на Tarantool Cluster 1, необходимо переключить состояние кластеров и сделать Tarantool Cluster 2 активным. Подробнее про смену состояния кластеров читайте в соответствующем разделе.

  1. Получите состояние Tarantool Cluster 1:

    $ curl -X GET --location "http://127.0.0.1:8081/tcf/status"   active
  2. Переключите состояние кластеров на противоположные. Для этого отправьте POST-запрос на адрес обработчика запроса вида /tcf/toggle:

    $ curl -X POST --location "http://127.0.0.1:8081/tcf/toggle"
  3. Проверьте состояние Tarantool Cluster 1:

    $ curl -X GET --location "http://127.0.0.1:8081/tcf/status"   passive
  4. Проверьте состояние Tarantool Cluster 2:

    $ curl -X GET --location "http://127.0.0.1:8081/tcf/status"   active

Запуск репликатора Tarantool Cluster 2 -> Tarantool Cluster 1

После подготовки всех конфигурационных файлов и смены состояния кластеров запустите каждый компонент отдельным процессом:

./tcf-gateway --config config_gateway_2to1_001.yaml./tcf-gateway --config config_gateway_2to1_002.yaml./tcf-destination --config config_destination_2to1_001.yaml./tcf-destination --config config_destination_2to1_002.yaml

Когда компонент Destination будет готов к работе, вывод результатов работы команды может выглядеть так:

2025-02-27T17:43:38+03:00 INFO src/pkg/ttpusher/pusher.go:427 "CDC State successfully fetched" Pusher=General/Subscribe

Проверить статус 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 2 на Tarantool Cluster 1

  1. В TCM над вкладкой Stateboard выберите кластер Tarantool Cluster 2 в выпадающем списке Clusters.

  2. Подключитесь к узлу хранилища. Для этого нажмите на набор реплик storage-001, выберите экземпляр storage-001-a и в открывшемся окне перейдите на вкладку Terminal (TT Connect).

  3. Во вкладке Terminal добавьте в спейс новый кортеж:

    crud.insert_object('writers', {     id = 2,     name = 'Eiji Mikage',     age = 41 }, {     noreturn = true })
  4. Проверьте, что в спейсе появились данные. Для этого перейдите на вкладку Tuples и выберите в списке спейс writers. В открывшейся вкладке видно, что в спейс добавлен новый кортеж Eiji Mikage.

  5. Переключитесь на Tarantool Cluster 1 и перейдите на вкладку Tuples.

  6. Выберите в списке спейс writers и проверьте, что в открывшейся вкладке также появился кортеж Eiji Mikage.