Конфигурация и запуск кластеров¶
Для работы TCF требуется настроить два идентичных кластера, один из которых в системе TCF будет активным, а другой пассивным:
активный кластер принимает запросы от приложения;
пассивный кластер содержит копию данных активного кластера, но не принимает запросы от приложения.
В этом разделе описано, как задать конфигурацию для каждого из кластеров, а затем запустить их. В приведенном примере разворачиваются два кластера Tarantool DB, каждый кластер состоит из набора реплик с 4 узлами (1 роутером и 3 экземплярами хранилища). Для корректной работы примера необходимо использовать Tarantool DB версии 2.2.0 или выше. Поддерживаемые типы кластеров описаны в соответствующем разделе.
Начиная с версии 0.7.0, TCF поддерживает работу с расширениями журнала упреждающей записи (WAL extensions) и с кластерами, запущенными в режиме синхронной репликации. Использование расширений журнала упреждающей записи настоятельно рекомендуется при работе с TCF, поскольку они повышают надёжность и согласованность данных. Синхронная репликация остаётся опциональной и может быть включена при необходимости для повышения устойчивости. Подробнее см. в разделах Расширения WAL и Использование синхронных спейсов.
Внимание
Передача словарей Tarantool DB через TCF не поддерживается.
Перед настройкой и запуском кластеров требуется выполнить следующие шаги:
Распаковать архивы с TCF и TDB версии 2.2.0 или выше. Для этого необходимо заранее выполнить шаги из соответствующего раздела руководства по установке.
Подготовить и запустить кластер хранилища состояния на основе etcd или Tarantool – в этом кластере хранятся конфигурация кластеров и их состояние активный-пассивный. В данном примере используется хранилище состояния на основе Tarantool.
Создание конфигурации кластеров Tarantool DB¶
Конфигурация для каждого из кластеров задается в отдельном YAML-файле конфигурации. Эта конфигурация задает топологию кластера и параметры его экземпляров. Полный список опций конфигурации для кластеров Tarantool и продуктов на его основе приведен в справочнике в документации Tarantool.
Файлы с финальной конфигурацией активного и пассивного кластеров приведены в разделе Создание кластеров этого руководства.
Настройка пользователей и соединения¶
Создайте файл source.yaml
, в который будет добавлена конфигурация активного кластера (далее Tarantool Cluster 1).
В созданном файле в секции credentials.users задайте пользователей, которые взаимодействуют с компонентами Tarantool или TCF и
укажите, какие права они имеют:
credentials:
users:
dbadmin:
password: secret
roles: [super]
replicator:
password: replicator_password
roles:
- replication
- dictionary_api_service
tcm_tarantool:
password: tcm_tarantool_password
roles: [super]
storage:
password: storage_password
roles: [sharding]
tcf_replicator:
password: secret
roles: [super]
tcf_dml:
password: secret
roles: [super]
Здесь:
dbadmin
– администратор TCF;replicator
– пользователь для соединения узлов Tarantool Cluster 1 друг с другом;tcm_tarantool
– пользователь для подключения TCM к экземплярам Tarantool Cluster 1;storage
– пользователь используется при запросах роутера к экземплярам хранилища;tcf_replicator
– пользователь для репликации между кластерами, которыми управляет TCF;tcf_dml
– пользователь используется внешними пользователями/приложениями для выполнения операций с данными (DML – Data Manipulation Language).
Подробнее о пользователях, необходимых для корректной работы TCF, можно узнать в разделе Роли и пользователи.
Для корректной работы кластера Tarantool нужно настроить связь между его экземплярами. Параметры подключения можно задать в секции iproto:
iproto:
advertise:
peer:
login: replicator
sharding:
login: storage
В секции credentials
создаются пользователи replicator
и storage
.
iproto.advertise.peer.login
указывает, что другие экземпляры Tarantool Cluster 1 должны подключаться к адресу, определенному в
опции iproto.listen
, с помощью пользователя replicator
.
iproto.advertise.sharding.login
указывает, что роутер должен подключаться к экземплярам хранилища на адрес,
определенный в iproto.listen
, с помощью пользователя storage
.
Узнать больше: Конфигурация соединений в Tarantool.
Настройка репликации¶
Настройки репликации можно задать в секции replication:
replication:
failover: manual
bootstrap_strategy: config
#..
groups:
routers:
replicasets:
rsrouter001:
leader: router001
bootstrap_leader: router001
#..
Здесь:
replication.failover
– режим выбора узла лидера в наборе реплик. В примере узел лидера назначается явно в опции<replicaset_name>.leader
;replication.bootstrap_strategy
– выбранная стратегия для первоначальной загрузки набора реплик. В примере узел для первоначальной загрузки задается в опции<replicaset_name>.bootstrap_leader
.
Конфигурация наборов реплик и экземпляров¶
Чтобы задать топологию кластера и определить настройки для конкретных экземпляров, в файле конфигурации используются секции
groups
, replicasets
и instances
.
Узнать больше: Общая информация о конфигурации в Tarantool.
groups:
routers:
replicasets:
rsrouter001:
#...
instances:
router001:
#...
iproto:
listen:
- uri: 127.0.0.1:3307
advertise:
client: 127.0.0.1:3307
app:
module: app.vshard_bootstrapper
sharding:
roles: [router]
#...
Здесь:
iproto.listen.uri
– адрес и порт для приема входящих запросов, заданный для конкретного экземпляра;iproto.advertise.client
– адрес и порт, позволяющий другим экземплярам кластера или клиенту подключиться к текущему экземпляру.
Настройка технологических ролей¶
Технологическая роль – это модуль, реализующий определенные функции или логику. Подробная информация о технологических ролях приведена в документации Tarantool. Для работы непосредственно TCF в конфигурации кластеров используются две технологические роли – roles.tcf-worker и roles.tcf-coordinator. Другие технологические роли, заданные для экземпляров в этом руководстве, используются для работы самих кластеров Tarantool DB.
Включить или выключить нужную технологическую роль для конкретных экземпляров в конфигурации можно без перезапуска этих экземпляров. Технологическая роль запускается при загрузке или перезагрузке конфигурации.
groups:
routers:
#...
roles: [ roles.tcf-worker, roles.tcf-coordinator, roles.httpd, roles.crud-router, dictionary.roles.router ]
Здесь roles
– список технологических ролей, заданных на конкретных экземплярах кластера.
В этом руководстве в конфигурации кластера используются следующие технологические роли:
roles.tcf-worker
– TCF-worker инициализирует и координирует переключение статусов кластеров (активный ↔ пассивный) и предоставляет базовый HTTP API для управления TCF. Назначается всем экземплярам типаstorage
иrouter
в кластере Tarantool, которыми управляет TCF;roles.tcf-coordinator
– TCF-координатор отвечает за автоматическое переключение состояния. Чтобы обеспечить отказоустойчивость, в каждом кластере должно быть запущено два и более экземпляра Tarantool с этой ролью. Назначается выборочным экземплярам типаstorage
иrouter
в кластере Tarantool, которыми управляет TCF;roles.httpd
– работа с HTTP-запросами для управления TCF. Роль задается на всех экземплярах кластера. Адрес отправки HTTP-запроса для конкретного экземпляра определяется в секцииroles.httpd.default.listen
;roles.crud-router
– предоставляет IPROTO API для CRUD-операций (создание, чтение, обновление, удаление) на кластере. Задается на узлах-роутерах. Используется совместно с рольюroles.crud-storage
, которая задается на узлах типаstorage
для выполнения CRUD-операций. Узнать больше в документации Tarantool DB;dictionary.roles.router
– внешнее управление словарями в Tarantool DB. Задается на узлах-роутерах. Используется совместно с рольюdictionary.roles.storage
, которая задается на узлах типаstorage
для хранения данных словарей. Узнать больше в документации Tarantool DB;roles.expirationd
– контроль за устаревающими данными. Узнать больше в документации Tarantool DB.
Настройки технологических ролей для конкретного экземпляра или группы экземпляров задаются в секции roles_cfg
.
Пример конфигурации roles.tcf-worker
:
roles_cfg:
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: 127.0.0.1:3301
login: tarantool_config_storage
password: tarantool_config_storage_password
- uri: 127.0.0.1:3302
login: tarantool_config_storage
password: tarantool_config_storage_password
- uri: 127.0.0.1:3303
login: tarantool_config_storage
password: tarantool_config_storage_password
В примере настройки технологической роли roles.tcf-worker
заданы на верхнем уровне конфигурации (global level), поскольку
эти настройки одинаковые для всех экземпляров кластера.
Здесь:
cluster_1
– имя кластера, для которого применяется конфигурация;cluster_2
– имя соседнего кластера в системе TCF. Для кластера B значения параметровcluster_1
иcluster_2
меняются местами:сluster_1
:cluster_b
;сluster_2
:cluster_a
;
initial_status
– состояние (активный-пассивный), в которое кластер переходит при первом запуске с использованием TCF. Для Tarantool Cluster 1 состояние при первом запуске будетactive
, для Tarantool Cluster 2 –passive
;dml_users
– список пользователей, доступ которым заблокирован на пассивном кластере;replication_user
иreplication_password
– имя и пароль пользователя для подключения репликаторов TCF;storage
– тип хранилища конфигурации;storage_params
– параметры хранилища конфигурации:endpoints.uri
– адреса узлов хранилища конфигурации;endpoints.login
– пользователь для подключения экземпляров кластера к узлам хранилища конфигурации;endpoints.password
– пароль для подключения экземпляров кластера к узлам хранилища конфигурации.
Пример конфигурации roles.tcf-coordinator
:
replicasets:
rsrouter001:
#...
instances:
router001:
roles_cfg:
#...
roles.tcf-coordinator:
storage: config_storage
storage_params:
endpoints:
- uri: 127.0.0.1:3301
login: tarantool_config_storage
password: tarantool_config_storage_password
- uri: 127.0.0.1:3302
login: tarantool_config_storage
password: tarantool_config_storage_password
- uri: 127.0.0.1:3303
login: tarantool_config_storage
password: tarantool_config_storage_password
Примечание
Если для хранения конфигурации кластера и состояния TCF используется одно и то же хранилище конфигурации, секции
roles.tcf-coordinator.storage
и roles.tcf-coordinator.storage_params
в конфигурации можно опустить.
Полный список поддерживаемых опций конфигурации roles.tcf-worker
и roles.tcf-coordinator
можно найти в разделе
Конфигурация кластера в YAML (Tarantool 3.x).
Расширения WAL¶
Начиная с версии 0.7.0, TCF поддерживает расширения журнала упреждающей записи (WAL extensions).
Такие расширения позволяют добавлять дополнительную информацию к каждой записи в журнале WAL.
В частности, расширения WAL позволяют хранить старый и новый кортежи вместе с ключом шардирования
(bucket_id
) для каждой совершённой CRUD-операции.
В шардированном кластере ключ bucket_id
используется для отправки запросов UPDATE
и DELETE
на конкретный набор реплик,
что повышает производительность обработки таких операций на больших кластерах.
Чтобы включить расширения WAL в конфигурации Tarantool 3.x, используйте опцию wal.ext.*:
wal:
ext:
new: true
old: true
В конфигурации Tarantool 2.x на основе Cartridge это можно сделать с помощью опции wal_ext:
cartridge.cfg {
{}, -- cartridge params
{
wal_ext = { old = true, new = true },
},
}
Использование синхронных спейсов¶
Начиная с версии 0.7.0, TCF поддерживает работу с синхронными спейсами в кластерах. Синхронная репликация повышает консистентность данных и надежность их хранения внутри кластера: каждая синхронная транзакция проходит коммит лишь после репликации на определенном количестве экземпляров, и только тогда клиенту приходит подтверждение о завершении транзакции.
Примечание
Синхронная репликация поддерживается только внутри самих кластеров Tarantool. Репликация между кластерами TCF работает в асинхронном режиме.
В кластерах Tarantool по умолчанию используется асинхронная репликация. Синхронную репликацию при этом можно настроить для отдельных спейсов. TCF предоставляет одинаковые гарантии для кластеров как с асинхронными, так и с синхронными спейсами. TCF отправляет транзакции на пассивный кластер в момент их записи (коммита):
синхронные транзакции – после репликации на определенном количестве экземпляров, в момент подтверждения транзакций;
асинхронные транзакции – сразу, не ожидая репликации на другие экземпляры.
Порядок выполнения коммитов соответствует порядку вызова метода box.commit()
для каждой из транзакций, независимо от того, синхронные транзакции или асинхронные.
Если для одной из синхронных транзакций истечет время ожидания, эта транзакция будет отменена (rollback).
Вместе с ней будут отменены все последующие транзакции в очереди на репликацию.
Транзакции отменяются в порядке, обратном порядку вызова box.commit()
для каждой из них, независимо от того,
синхронные транзакции или асинхронные.
Репликатор данных Gateway обрабатывает синхронные транзакции следующим образом:
пропускает в пассивный кластер транзакции, подтвержденные в активном кластере;
отбрасывает транзакции, отмененные в активном кластере, чтобы они не попали в пассивный кластер.
Компонент Destination обрабатывает полученные операции как асинхронные. Целевой спейс на пассивном кластере может быть как синхронным, так и асинхронным.
Внимание
Одновременное использование синхронных и асинхронных транзакций не рекомендуется. Если вы планируете использовать их совместно, свяжитесь с нами через форму обратной связи или напишите на sales@tarantool.io.
Включение синхронной репликации¶
Чтобы включить синхронную репликацию для спейса в кластере, задайте опцию
space_opts.is_sync
при создании
или изменении этого спейса:
local space = box.schema.space.create('writers', { is_sync = true })
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'}})
Примечание
Cинхронная репликация в кластерах с TCF настраивается так же, как и для кластеров Tarantool без TCF. Менять настройки компонентов Gateway и Destination при включении синхронной репликации в кластере не требуется.
Узнать больше:
кластер Tarantool DB 2.x: Пример использования синхронной репликации
кластер Tarantool 3.x: Синхронная репликация
кластер Tarantool 2.x на основе Cartridge: Настройка синхронной репликации
Настройка кластеров Tarantool DB¶
Создание кластеров¶
Перейдите в директорию
tarantooldb
и выполните в ней команду tt init. Команда создаст новое окружение для консольной утилиты tt CLI, в том числе файл конфигурацииtt.yaml
.В директории
instances.enabled
созданного окружения создайте директории кластеровcluster_a
иcluster_b
.В директории
instances.enabled/cluster_a
добавьте файлsource.yaml
с конфигурацией Tarantool Cluster 1, приведенной ниже. Экземпляры в этой конфигурации принимают входящие запросы на порты 3304–3307. Особенности конфигурации кластеров были описаны ранее в разделе Создание конфигурации кластеров Tarantool DB.credentials: users: dbadmin: password: secret roles: [super] replicator: password: replicator_password roles: - replication - dictionary_api_service tcm_tarantool: password: tcm_tarantool_password roles: [super] storage: password: storage_password roles: [sharding] tcf_replicator: password: secret roles: [super] tcf_dml: password: secret roles: [super] replication: failover: manual bootstrap_strategy: config iproto: advertise: peer: login: replicator sharding: login: storage roles_cfg: 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: 127.0.0.1:3301 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3302 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3303 login: tarantool_config_storage password: tarantool_config_storage_password groups: routers: replicasets: rsrouter001: leader: router001 bootstrap_leader: router001 instances: router001: roles_cfg: roles.tcf-coordinator: storage: config_storage storage_params: endpoints: - uri: 127.0.0.1:3301 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3302 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3303 login: tarantool_config_storage password: tarantool_config_storage_password roles.httpd: default: listen: localhost:10001 iproto: listen: - uri: 127.0.0.1:3307 advertise: client: 127.0.0.1:3307 app: module: app.vshard_bootstrapper sharding: roles: [router] roles: - roles.tcf-worker - roles.tcf-coordinator - roles.httpd - roles.crud-router - dictionary.roles.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: memtx: memory: 536870912 #512MiB replicasets: replicaset001: leader: instance004 bootstrap_leader: instance004 instances: instance004: roles_cfg: roles.httpd: default: listen: localhost:10101 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: 127.0.0.1:3301 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3302 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3303 login: tarantool_config_storage password: tarantool_config_storage_password iproto: listen: - uri: 127.0.0.1:3304 advertise: client: 127.0.0.1:3304 instance005: roles_cfg: roles.httpd: default: listen: localhost:10102 iproto: listen: - uri: 127.0.0.1:3305 advertise: client: 127.0.0.1:3305 instance006: roles_cfg: roles.httpd: default: listen: localhost:10103 iproto: listen: - uri: 127.0.0.1:3306 advertise: client: 127.0.0.1:3306 sharding: roles: [storage] roles: - roles.tcf-worker - roles.httpd - roles.crud-storage - roles.expirationd - dictionary.roles.storage roles_cfg: roles.expirationd: []
В директории
instances.enabled/cluster_a
создайте файлinstances.yaml
– список экземпляров, которые будут запущены в текущем окружении:instance004: instance005: instance006: router001:
В директории
instances.enabled/cluster_a
создайте файлconfig.yaml
– с настройками хранилища конфигурации на основе Tarantool, запущенного ранее.config: storage: endpoints: - uri: 127.0.0.1:3301 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3302 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3303 login: tarantool_config_storage password: tarantool_config_storage_password prefix: /cluster1
Здесь:
config.storage.endpoints.uri
– адреса узлов хранилища конфигурации;config.storage.endpoints.login
– пользователь для подключения экземпляров кластера к узлам хранилища конфигурации;config.storage.endpoints.password
– пароль для подключения экземпляров кластера к узлам хранилища конфигурации;config.storage.prefix
– префикс кластера, под которым хранится конфигурация для конкретного кластера.
В директории
instances.enabled/cluster_b
создайте файлsource.yaml
с конфигурацией Tarantool Cluster 2, приведенной ниже. Экземпляры в этой конфигурации принимают входящие запросы на порты 3324–3327. Особенности конфигурации кластеров были описаны ранее в разделе Создание конфигурации кластеров Tarantool DB.credentials: users: dbadmin: password: secret roles: [super] replicator: password: replicator_password roles: - replication - dictionary_api_service tcm_tarantool: password: tcm_tarantool_password roles: [super] storage: password: storage_password roles: [sharding] tcf_replicator: password: secret roles: [super] tcf_dml: password: secret roles: [super] replication: failover: manual bootstrap_strategy: config iproto: advertise: peer: login: replicator sharding: login: storage roles_cfg: 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: 127.0.0.1:3301 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3302 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3303 login: tarantool_config_storage password: tarantool_config_storage_password groups: routers: replicasets: rsrouter002: leader: router002 bootstrap_leader: router002 instances: router002: roles_cfg: roles.tcf-coordinator: storage: config_storage storage_params: endpoints: - uri: 127.0.0.1:3301 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3302 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3303 login: tarantool_config_storage password: tarantool_config_storage_password roles.httpd: default: listen: localhost:20001 iproto: listen: - uri: 127.0.0.1:3327 advertise: client: 127.0.0.1:3327 app: module: app.vshard_bootstrapper sharding: roles: [router] roles: - roles.tcf-worker - roles.tcf-coordinator - roles.httpd - roles.crud-router - dictionary.roles.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: memtx: memory: 536870912 #512MiB replicasets: replicaset002: leader: instance007 bootstrap_leader: instance007 instances: instance007: roles_cfg: roles.httpd: default: listen: localhost:11101 iproto: listen: - uri: 127.0.0.1:3324 advertise: client: 127.0.0.1:3324 instance008: roles_cfg: roles.httpd: default: listen: localhost:11102 iproto: listen: - uri: 127.0.0.1:3325 advertise: client: 127.0.0.1:3325 instance009: roles_cfg: roles.httpd: default: listen: localhost:11103 iproto: listen: - uri: 127.0.0.1:3326 advertise: client: 127.0.0.1:3326 sharding: roles: [storage] roles: - roles.tcf-worker - roles.httpd - roles.crud-storage - roles.expirationd - dictionary.roles.storage roles_cfg: roles.expirationd: []
В директории
instances.enabled/cluster_b
создайте файлinstances.yaml
:instance007: instance008: instance009: router002:
В директории
instances.enabled/cluster_a
создайте файлconfig.yaml
с настройками хранилища конфигурации на основе Tarantool, запущенного ранее.config: storage: endpoints: - uri: 127.0.0.1:3301 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3302 login: tarantool_config_storage password: tarantool_config_storage_password - uri: 127.0.0.1:3303 login: tarantool_config_storage password: tarantool_config_storage_password prefix: /cluster2
Примечание
Префикс, заданный в
storage.prefix
, должен быть уникальным для каждого из двух кластеров.На каждом из серверов в директориях
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
.
Запуск TCM¶
В качестве веб-интерфейса кластеров Tarantool DB используется Tarantool Cluster Manager, или TCM. Tarantool Cluster Manager – это инструмент для настройки и отслеживания кластеров Tarantool EE и управления ими. Подробная информация о TCM приведена в документации Tarantool.
Задать настройки для запуска TCM можно в файле конфигурации.
Для этого перейдите в директорию Tarantool Cluster 1 tarantooldb/instances.enabled/cluster_a
и создайте в ней файл tcm.yaml
со следующей конфигурацией:
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: file
file:
name: /var/log/tarantool/cluster-manager/tcm.log
maxsize: 1073741824
maxage: 0
maxbackups: 10
compress: True
storage:
provider: tarantool
tarantool:
username: tcm_config_storage
password: tcm_config_storage_password
addrs:
- 127.0.0.1:3301
- 127.0.0.1:3302
- 127.0.0.1:3303
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
initial-settings:
clusters:
- name: Tarantool Cluster 1
id: 00000000-0000-0000-0000-000000000000
storage-connection:
provider: tarantool
tarantool-connection:
prefix: /cluster1
username: tcm_config_storage
password: tcm_config_storage_password
endpoints:
- 127.0.0.1:3301
- 127.0.0.1:3302
- 127.0.0.1:3303
tarantool-connection:
username: tcm_tarantool
password: tcm_tarantool_password
Здесь:
http.host
– адрес и порт, на которых будет запущен TCM. Если порт в команде не указан, TCM будет по умолчанию запущен на порту 8080;security.bootstrap-password
– пароль для первичного входа в TCM;storage
– настройки хранилища конфигурации и его узлов:provider
– тип хранилища конфигурации;tarantool.username
– имя пользователя для подключения TCM к хранилищу конфигурации на основе Tarantool;tarantool.password
– пароль пользователя для подключения TCM к хранилищу конфигурации на основе Tarantool;
initial-settings
– сущности, которые создаются автоматически при первом запуске TCM. Сущности в примере – это два кластера Tarantool DB.clusters.<cluster>.prefix
– префикс кластера. Кластеры используют общее хранилище конфигурации на основе Tarantool, но должны иметь различные префиксы. В конфигурации выше задан префикс/cluster1
для кластера Tarantool Cluster 1. Префикс для второго кластера будет задан позже в веб-интерфейсе TCF;clusters.<cluster>.storage-connection.tarantool-connection.username
– имя пользователя для подключения TCM к хранилищу конфигурации;clusters.<cluster>.storage-connection.tarantool-connection.password
– пароль пользователя для подключения TCM к хранилищу конфигурации;clusters.<cluster>.storage-connection.tarantool-connection.endpoints
– адреса узлов хранилища конфигурации;clusters.<cluster>.tarantool-connection.username
– имя пользователя для подключения TCM к экземплярам кластера;clusters.<cluster>.tarantool-connection.password
– пароль пользователя для подключения TCM к экземплярам кластера.
Полная информация об опциях конфигурации TCM (в частности, опции настройки etcd) приведена в документации TCM.
Запустить TCM с конфигурацией из файла можно так:
$ tcm -c tcm.yaml
См. также Начало работы с TCM.
Настройка конфигурации Tarantool Cluster 1¶
Перед запуском кластеров нужно загрузить их конфигурацию в TCM и задать необходимые настройки.
Определите текущий master-узел хранилища конфигурации с помощью команды
tt status
. В этом руководстве это узелinstance003
, имеющий адрес127.0.0.1:3303
:tt status configstorage INSTANCE STATUS PID MODE CONFIG BOX UPSTREAM configstorage:instance001 RUNNING 269163 RO ready running -- configstorage:instance002 RUNNING 269164 RO ready running -- configstorage:instance003 RUNNING 269165 RW ready running --
Вернитесь в домашнюю директорию и загрузите файл конфигурации Tarantool Cluster 1
source.yaml
в хранилище конфигурации. В параметрах команды при необходимости обновите адрес текущего master-узла хранилища конфигурации:$ tt cluster publish http://dbadmin:secret@127.0.0.1:3303/cluster1 tarantooldb/instances.enabled/cluster_a/source.yaml
Чтобы войти в TCM, откройте в браузере адрес http://localhost:8080. Логин и пароль для входа:
Username:
admin
Password:
secret
Пароль для входа указан в конфигурации TCM в файле
tcm.yaml
(см. опцию TCMsecurity.bootstrap-password
).При успешном применении конфигурации топология Tarantool Cluster 1 появится на вкладке Stateboard. Состояние экземпляров Tarantool Cluster 1 при этом будет отображаться как неактивное, так как они еще не запущены.
Настройка конфигурации Tarantool Cluster 2¶
Перед запуском экземпляров Tarantool Cluster 1 и Tarantool Cluster 2 нужно создать Tarantool Cluster 2 в TCM и настроить его конфигурацию. Для этого:
В TCM откройте вкладку Clusters и нажмите кнопку Add.
На первом экране настройки (General) введите имя нового кластера
Tarantool Cluster 2
в поле Name.Переключитесь на второй экран настройки (Config storage connection), нажав кнопку Next.
На втором экране настройки (Config storage connection) укажите следующие значения:
в поле Provider –
tarantool
;в поле Prefix –
/cluster2
. Префиксы Tarantool Cluster 1 и Tarantool Cluster 2 должны отличаться друг от друга. В примере Tarantool Cluster 1 имеет префикс/cluster1
, а Tarantool Cluster 2 –/cluster2
;в поле Endpoints укажите узлы хранилища конфигурации:
127.0.0.1:3301 127.0.0.1:3302 127.0.0.1:3303
в поле Username –
tcm_config_storage
;в поле Password –
tcm_config_storage_password
.
Переключитесь на третий экран настройки (Tarantool connection), нажав кнопку Next.
На третьем экране настройки (Tarantool connection) укажите следующие значения:
в поле Username –
tcm_tarantool
;в поле Password –
tcm_tarantool_password
.
Нажмите Add, чтобы сохранить настройки нового кластера.
Загрузите файл конфигурации Tarantool Cluster 2
source.yaml
в хранилище конфигурации. В параметрах команды при необходимости обновите адрес текущего master-узла хранилища конфигурации TCF.$ tt cluster publish http://dbadmin:secret@127.0.0.1:3303/cluster2 tarantooldb/instances.enabled/cluster_b/source.yaml
Запуск активного кластера¶
Скопируйте директории модулей в директории Tarantool Cluster 1 и Tarantool Cluster 2:
cp -r tarantooldb/.rocks tarantooldb/instances.enabled/cluster_a cp -r tarantooldb/.rocks tarantooldb/instances.enabled/cluster_b cp -r tarantooldb/app tarantooldb/instances.enabled/cluster_a cp -r tarantooldb/app tarantooldb/instances.enabled/cluster_b
Перейдите в директорию
tarantooldb
и запустите активный Tarantool Cluster 1:$ cd tarantooldb $ tt start cluster_a • Starting an instance [cluster_a:instance004]... • Starting an instance [cluster_a:instance005]... • Starting an instance [cluster_a:instance006]... • Starting an instance [cluster_a:router001]..
Проверьте состояние запущенных узлов Tarantool Cluster 1:
$ tt status cluster_a INSTANCE STATUS PID MODE CONFIG BOX UPSTREAM cluster_a:instance004 RUNNING 417847 RW ready running -- cluster_a:instance005 RUNNING 417848 RO ready running -- cluster_a:instance006 RUNNING 417849 RO ready running -- cluster_a:router001 RUNNING 417850 RW ready running --
Загрузите файл миграции
001_migration.lua
в Tarantool Cluster 1:$ tt migrations publish http://dbadmin:secret@127.0.0.1:3303/cluster1 ./instances.enabled/cluster_a/migrations • 001_migration.lua: successfully published to key "001_migration.lua"
Примените загруженные миграции:
$ tt migrations apply http://dbadmin:secret@127.0.0.1:3302/cluster1 --tarantool-username=dbadmin --tarantool-password=secret • replicaset001: • 001_migration.lua: successfully applied • rsrouter001: • 001_migration.lua: successfully applied
Запуск пассивного кластера¶
Запустите пассивный Tarantool Cluster 2:
$ tt start cluster_b • Starting an instance [cluster_b:instance007]... • Starting an instance [cluster_b:instance008]... • Starting an instance [cluster_b:instance009]... • Starting an instance [cluster_b:router002]..
Проверьте состояние запущенных узлов Tarantool Cluster 2:
$ tt status cluster_b INSTANCE STATUS PID MODE CONFIG BOX UPSTREAM cluster_b:instance007 RUNNING 418077 RW ready running -- cluster_b:instance008 RUNNING 418078 RO ready running -- cluster_b:instance009 RUNNING 418079 RO ready running -- cluster_b:router002 RUNNING 418080 RW ready running --
Загрузите файл миграции
001_migration.lua
в Tarantool Cluster 2:$ tt migrations publish http://dbadmin:secret@127.0.0.1:3303/cluster2 ./instances.enabled/cluster_b/migrations • 001_migration.lua: successfully published to key "001_migration.lua"
Примените загруженные миграции:
$ tt migrations apply http://127.0.0.1:3303/cluster2 --tarantool-username=admin --tarantool-password=secret-cluster-cookie • replicaset002: • 001_migration.lua: successfully applied • rsrouter002: • 001_migration.lua: successfully applied
Проверка работы кластеров¶
Чтобы проверить состояние кластеров, в TCM выберите нужный кластер (Tarantool Cluster 1 или Tarantool Cluster 2) над вкладкой Stateboard в выпадающем списке Clusters. Всё настроено правильно, если на вкладке Stateboard все узлы в кластере подсвечены зеленым цветом.
Чтобы проверить примененную миграцию, перейдите на вкладку Tuples. При успешной миграции в списке появится спейс
writers
.Чтобы проверить текущее состояние кластеров, откройте вкладку TCF. Видно, что
cluster_a
перешел в активное состояние, аcluster_b
– в пассивное.Примечание
В Tarantool DB вкладка TCF в TCM поддерживается начиная с версии Tarantool DB 2.1.0. В более ранних версиях Tarantool DB 2.x используйте для проверки состояния кластеров соответствующий HTTP GET-запрос.