Стандартная реализация
На странице приводится описание стандартной реализации интерфейса TDBCluster для TDB 2.x.
Диаграмма классов
«interface» AutoCloseable close(): void Builder withMigrationsDirectory(Path): Builder withShardCount(int): Builder withStartupTimeout(Duration): Builder withRouterCount(int): Builder withTDB2Configuration(Tarantool3Configuration): Builder build(): TDB2ClusterImpl withReplicaCount(int): Builder «interface» Startable stop(): void getDependencies(): Set<Startable> close(): void start(): void TDB2ClusterImpl tcmContainer(): TCMContainer storages(): Map<String, TarantoolContainer<?>> nodes(): Map<String, TarantoolContainer<?>> clusterName(): String start(): void routers(): Map<String, TarantoolContainer<?>> etcdContainer(): EtcdContainer stop(): void builder(String): Builder «interface» TDBCluster clusterName(): String tcmContainer(): TCMContainer storages(): Map<String, TarantoolContainer<?>> etcdContainer(): EtcdContainer routers(): Map<String, TarantoolContainer<?>> restart(long, TimeUnit): void nodes(): Map<String, TarantoolContainer<?>> «interface» AutoCloseable close(): void Builder withMigrationsDirectory(Path): Builder withShardCount(int): Builder withStartupTimeout(Duration): Builder withRouterCount(int): Builder withTDB2Configuration(Tarantool3Configuration): Builder build(): TDB2ClusterImpl withReplicaCount(int): Builder «interface» Startable stop(): void getDependencies(): Set<Startable> close(): void start(): void TDB2ClusterImpl tcmContainer(): TCMContainer storages(): Map<String, TarantoolContainer<?>> nodes(): Map<String, TarantoolContainer<?>> clusterName(): String start(): void routers(): Map<String, TarantoolContainer<?>> etcdContainer(): EtcdContainer stop(): void builder(String): Builder «interface» TDBCluster clusterName(): String tcmContainer(): TCMContainer storages(): Map<String, TarantoolContainer<?>> etcdContainer(): EtcdContainer routers(): Map<String, TarantoolContainer<?>> restart(long, TimeUnit): void nodes(): Map<String, TarantoolContainer<?>>
Класс TDB2ClusterImpl позволяет создать объект, управляющий жизненным циклом кластера TDB 2.x,
удовлетворяющий контракту TDBCluster.
Описание реализации
Конфигурирование кластера
Реализация следует следующему алгоритму при конфигурации кластера:
Вызов TDB2ClusterImpl::start() Создать временную директорию для экземпляра TDB2ClusterImpl Сгенерировать конфигурацию на основе переданных routerCount , shardCount , replicaCount Записать файл конфигурации на основе объекта конфигурации во временную директорию Создать и настроить контейнеры etcd , TCM Выбросить исключение Опубликовать конфигурацию кластера через TCM в etcd Запустить контейнеры с узлами Tarantool Инициализировать кластер Применить миграции Завершить старт Передана конфигурация через Tarantool3Configuration ? нет да Успешно стартовали? нет да Конфигурация перенесена? нет да Контейнеры запущены? нет да Кластер инициализирован? нет да Миграции применены? нет да Вызов TDB2ClusterImpl::start() Создать временную директорию для экземпляра TDB2ClusterImpl Сгенерировать конфигурацию на основе переданных routerCount , shardCount , replicaCount Записать файл конфигурации на основе объекта конфигурации во временную директорию Создать и настроить контейнеры etcd , TCM Выбросить исключение Опубликовать конфигурацию кластера через TCM в etcd Запустить контейнеры с узлами Tarantool Инициализировать кластер Применить миграции Завершить старт Передана конфигурация через Tarantool3Configuration ? нет да Успешно стартовали? нет да Конфигурация перенесена? нет да Контейнеры запущены? нет да Кластер инициализирован? нет да Миграции применены? нет да
Обеспечение сохранения монтируемых данных
Согласно контракту TDBCluster при вызове метода TDBCluster::restart(...) монтируемые данные
должны сохраниться. TDB2ClusterImpl реализует этот механизм за счет использования контракта
TarantoolContainer::stopWithSafeMount():
Вызов TDB2ClusterImpl::restart(...) TDB2ClusterImpl::restart Вызов Tarantool3Container::stopWithSafeMount() у каждого узла Tarantool в кластере Выждать заданный delay Вызов Tarantool3Container::start() у каждого узла Tarantool в кластере Вызов TDB2ClusterImpl::restart(...) TDB2ClusterImpl::restart Вызов Tarantool3Container::stopWithSafeMount() у каждого узла Tarantool в кластере Выждать заданный delay Вызов Tarantool3Container::start() у каждого узла Tarantool в кластере
Удаление монтируемых директорий происходит только при вызове метода TDB2ClusterImpl::stop().
Конфигурирование контейнера происходит один раз при первом вызове TDB2ClusterImpl::start().
Привязка портов
Привязка внешних портов к компонентам кластера (контейнерам) происходит на этапе запуска экземпляра
TDB2ClusterImpl.