Перейти к содержанию

Стандартная реализация

На странице приводится описание стандартной реализации интерфейса TDBCluster для TDB 2.x.

Диаграмма классов

«interface»AutoCloseableclose(): voidBuilderwithMigrationsDirectory(Path): BuilderwithShardCount(int): BuilderwithStartupTimeout(Duration): BuilderwithRouterCount(int): BuilderwithTDB2Configuration(Tarantool3Configuration): Builderbuild(): TDB2ClusterImplwithReplicaCount(int): Builder«interface»Startablestop(): voidgetDependencies(): Set<Startable>close(): voidstart(): voidTDB2ClusterImpltcmContainer(): TCMContainerstorages(): Map<String, TarantoolContainer<?>>nodes(): Map<String, TarantoolContainer<?>>clusterName(): Stringstart(): voidrouters(): Map<String, TarantoolContainer<?>>etcdContainer(): EtcdContainerstop(): voidbuilder(String): Builder«interface»TDBClusterclusterName(): StringtcmContainer(): TCMContainerstorages(): Map<String, TarantoolContainer<?>>etcdContainer(): EtcdContainerrouters(): Map<String, TarantoolContainer<?>>restart(long, TimeUnit): voidnodes(): Map<String, TarantoolContainer<?>>
«interface»AutoCloseableclose(): voidBuilderwithMigrationsDirectory(Path): BuilderwithShardCount(int): BuilderwithStartupTimeout(Duration): BuilderwithRouterCount(int): BuilderwithTDB2Configuration(Tarantool3Configuration): Builderbuild(): TDB2ClusterImplwithReplicaCount(int): Builder«interface»Startablestop(): voidgetDependencies(): Set<Startable>close(): voidstart(): voidTDB2ClusterImpltcmContainer(): TCMContainerstorages(): Map<String, TarantoolContainer<?>>nodes(): Map<String, TarantoolContainer<?>>clusterName(): Stringstart(): voidrouters(): Map<String, TarantoolContainer<?>>etcdContainer(): EtcdContainerstop(): voidbuilder(String): Builder«interface»TDBClusterclusterName(): StringtcmContainer(): TCMContainerstorages(): Map<String, TarantoolContainer<?>>etcdContainer(): EtcdContainerrouters(): Map<String, TarantoolContainer<?>>restart(long, TimeUnit): voidnodes(): 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.