Новые возможности Tarantool Clusters Federation¶
Tarantool Clusters Federation (TCF) – это модуль репликации данных в асинхронном режиме между независимыми кластерами Tarantool. TCF позволяет построить отказоустойчивую систему из кластеров Tarantool и управлять переключением трафика между ними автоматически или вручную в текущей архитектуре без технологического окна.
В такой системе один из кластеров является активным и принимает все запросы от приложения, а другой кластер является пассивным и содержит копию данных активного кластера. Состояние кластеров активный-пассивный хранится в централизованном хранилище состояния кластеров – в etcd или хранилище на базе Tarantool.
Переключение трафика между кластерами позволяет:
минимизировать негативные последствия при техногенных или природных инцидентах, если кластеры размещены в разных центрах обработки данных;
проводить технические работы и изменения логики работы приложения без простоя.
Ниже приведен краткий обзор наиболее заметных изменений и новой функциональности, которые были внесены в версиях TCF до 0.7.0 включительно.
Подробная информация о продукте приведена в документации Tarantool Clusters Federation.
Поддержка кластеров Tarantool 3.x EE и Tarantool 2.x¶
Начиная с версии TCF 0.3.0, TCF добавлен в экосистему Tarantool 3.x. Теперь TCF можно использовать как поверх кластеров Tarantool 2.x на основе Cartridge, так и поверх кластеров на основе Tarantool 3.x Enterprise Edition (EE).
Начиная с TCF 0.3.0, поддерживаются шардированные кластеры на основе Tarantool 3.x EE.
Поддержка работы с кластерами без использования модуля шардирования vshard
добавлена в версии TCF 0.6.0.
На момент выхода версии TCF 0.7.0 поддерживаются следующие типов кластеров Tarantool:
кластер Tarantool 2.x на основе Cartridge;
кластер Tarantool 3.x EE;
кластер Tarantool Data Grid 2.x;
кластер Tarantool DB 1.x на основе Tarantool 2.x;
кластер Tarantool DB 2.x на основе Tarantool 3.x;
кластер Tarantool Column Store на основе Tarantool 3.x.
Поддержка Tarantool Data Grid 2.x¶
TCF поддерживает работу с кластерами Tarantool Data Grid 2.x.
Tarantool Data Grid – это комплексный продукт для быстрого создания и поддержки бизнес-решений на основе Tarantool Enterprise. Продукт предназначен для хранения сложных бизнес-объектов и выполнения аналитических запросов над ними в реальном времени. Tarantool Data Grid позволяет реализовать такие сценарии, как проверка целостности данных или обработка ошибок.
Узнать больше: Tarantool Data Grid 2.x.
Поддержка Tarantool Column Store¶
Начиная с версии TCF 0.6.0, TCF можно использовать поверх кластеров Tarantool Column Store.
Tarantool Column Store – это колоночная транзакционно-аналитическая СУБД на основе Tarantool Enterprise Edition. Продукт предназначен для создания высокоскоростных хранилищ для анализа данных в реальном времени. Tarantool Column Store позволяет решать следующие задачи:
ускорение аналитических запросов и расчетов;
консолидация и унификация доступа к аналитическим данным;
формирование отчетности в реальном времени;
хранение и обработка данных для ML.
Узнать больше: Tarantool Column Store.
Миграция кластеров Tarantool Cartridge на Tarantool 3.x EE с помощью TCF¶
Поскольку TCF поддерживает как кластеры Tarantool Cartridge, так и кластеры Tarantool 3.x EE, он позволяет объединить кластеры этих двух типов в одну систему. В такой системе репликация будет настроена между кластером Tarantool Cartridge и кластером Tarantool 3.x EE.
Начиная с версии TCF 0.5.0, кластеры Tarantool Cartridge могут использовать etcd v3 или хранилище на базе Tarantool в качестве хранилища состояния кластеров. Поддержка этих типов хранилищ состояния позволяет использовать TCF как инструмент для миграции на лету с системы из двух кластеров Tarantool Cartridge и TCF между ними на систему из двух кластеров Tarantool 3.x EE, также связанную TCF. Миграция выполняется путем поочередной замены кластеров Tarantool Cartridge на кластеры Tarantool 3.x EE. Чтобы кластеры в системе были доступны друг для друга, на каждом этапе миграции оба кластера используют один и тот же тип хранилища состояния. Миграция включает следующие этапы:
Хранилище состояния для кластеров Tarantool Cartridge переводится с etcd v2 на etcd v3 или хранилище на базе Tarantool.
Пассивный кластер Tarantool Cartridge заменяется на кластер Tarantool 3.x EE.
Добавленный кластер Tarantool 3.x EE переводится в активное состояние.
Второй кластер Tarantool Cartridge, который перешел в пассивное состояние, также замещается кластером Tarantool 3.x EE.
В системе из кластеров Tarantool 3.x EE восстанавливается первоначальное состояние кластеров активный-пассивный.
Отказоустойчивость репликаторов данных¶
В TCF данные реплицируются с активного кластера на пассивный. За межкластерную репликацию отвечают репликаторы данных, или компоненты Gateway и Destination (шлюз/приемник). Gateway подключается к активному кластеру, собирает с него поток данных, а затем направляет этот поток компоненту Destination. Destination в свою очередь получает данные от компонента Gateway и записывает их в пассивный кластер. До версии 0.5.0 как Gateway, так и Destination можно было настроить только в одном экземпляре.
Начиная с версии TCF 0.5.0, реализован механизм отказоустойчивости репликаторов данных – появилась возможность задать группу из нескольких экземпляров Gateway или Destination. Такой подход позволяет:
уменьшить время простоя при перезапусках экземпляров Gateway или Destination;
обеспечить непрерывность работы, даже если один из экземпляров Gateway или Destination по какой-то причине стал недоступен (например, из-за проблем с сетью).
Если экземпляр Gateway или Destination, который используется сейчас для межкластерной репликации, выходит из строя, передача или прием данных переключается на резервный экземпляр Gateway или Destination из заданной группы экземпляров. Добавить группу экземпляров Gateway можно в файле конфигурации для межкластерной репликации данных в секции destination.gateways:
destination:
gateways:
- host: localhost
port: 10080
- host: localhost
port: 11080
- host: localhost
port: 12080
Добавить группу экземпляров Destination можно в секции destination.storage_params.endpoints
:
destination:
storage: etcd_v2
storage_params:
endpoints:
- host: localhost
port: 3013
- host: localhost
port: 3014
prefix: /destination1
ttl: 10
Значение storage_params.prefix
должно быть уникальным для каждой группы экземпляров Destination.
Шифрование TLS¶
Чтобы повысить безопасность обмена данными в TCF, в версии TCF 0.5.0 добавлена поддержка TLS-шифрования трафика между репликаторами данных (компонентами Gateway и Destination). Кроме того, добавлена поддержка TLS в HTTP API компонентов Gateway и Destination.
Задать настройки TLS можно в файле конфигурации для межкластерной репликации данных в секциях gateway.grpc_server
и destination.gateways
:
gateway:
grpc_server:
host: 0.0.0.0
port: 10080
ssl_cert_file: /path/to/server.crt
ssl_key_file: /path/to/server.key
ssl_ca_file: /path/to/ca.crt
destination:
gateways:
- host: localhost
port: 10080
ssl_cert_file: /path/to/server.crt
ssl_key_file: /path/to/server.key
ssl_ca_file: /path/to/ca.crt
Здесь:
ssl_cert_file
– путь к сертификату;ssl_key_file
– путь к закрытому ключу;ssl_ca_file
– путь к корневому сертификату.
Синхронная репликация внутри кластеров¶
Начиная с TCF 0.7.0, поддерживается работа с синхронными спейсами в кластерах. Синхронная репликация повышает консистентность данных и надежность их хранения внутри кластера: каждая синхронная транзакция проходит коммит лишь после репликации на определенном количестве экземпляров, и только тогда клиенту приходит подтверждение о завершении транзакции. TCF отправляет синхронные транзакции на пассивный кластер в момент их записи (коммита) – после репликации транзакций на определенном количестве экземпляров. В пассивный кластер реплицируются только те транзакции, которые были подтверждены в активном кластере.
Note
Синхронная репликация поддерживается только внутри самих кластеров Tarantool. Репликация между кластерами TCF работает в асинхронном режиме.
Включить синхронную репликацию для конкретного спейса в кластере можно с помощью опции 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'}})
Узнать больше: Работа TCF с кластерами, запущенными в режиме синхронной репликации.
Расширения WAL¶
Начиная с версии TCF 0.7.0, TCF поддерживает расширения журнала упреждающей записи (WAL extensions).
Такие расширения позволяют добавлять дополнительную информацию к каждой записи в журнале WAL.
В частности, расширения WAL позволяют хранить старый и новый кортежи вместе с ключом шардирования
(bucket_id
) для каждой совершённой CRUD-операции.
В шардированном кластере ключ bucket_id
используется для отправки запросов UPDATE
и DELETE
на конкретный набор реплик.
Такой подход повышает производительность обработки таких операций на больших кластерах.
Настроить расширения WAL можно в файле конфигурации кластера с помощью опций конфигурации wal.ext.*
или wal_ext
:
wal:
ext:
new: true
old: true
Узнать больше: Расширения WAL.