Я ищу способ добавить новых участников в существующий кластер Aeron без перенастройки существующих.
Похоже, что члены кластера определяются статически во время запуска как описано в учебнике по работе с кластерами:
final ConsensusModule.Context consensusModuleContext = new ConsensusModule.Context()
.errorHandler(errorHandler("Consensus Module"))
.clusterMemberId(nodeId)
.clusterMembers(clusterMembers(Arrays.asList(hostnames))) // <------ HERE
.clusterDir(new File(baseDir, "consensus-module"))
.ingressChannel("aeron:udp?term-length=64k")
.logChannel(logControlChannel(nodeId, hostname, LOG_CONTROL_PORT_OFFSET))
.replicationChannel(logReplicationChannel(hostname))
.archiveContext(aeronArchiveContext.clone());
Если я правильно понимаю, если я хочу добавить больше узлов, мне нужно перенастроить каждый существующий узел, чтобы включить новый член.
Более того, я нашел это в Aeron Cookbook (выделено мной)
Ключевые аспекты Рафта:
- есть Сильный Лидер, а это значит, что все записи в журнале идут от лидера к последователям
- Raft использует рандомизированные таймеры для выбора лидеров. Это добавляет несколько миллисекунд к отказоустойчивости, но сокращает время согласования избранного лидера (в кластере Aeron это максимум таймаут выборов * 2).
- протокол Raft позволяет изменять конфигурацию во время выполнения (т. е. добавлять новые или удалять узлы во время выполнения). На момент написания этой статьи эта функция все еще находилась на рассмотрении в Aeron Cluster.
Однако я вижу такие классы, как io.aeron.cluster.DynamicJoin
, и их использование в io.aeron.cluster.ConsensusModuleAgent
, что заставляет меня думать, что динамическое добавление узлов возможно и, возможно, кулинарная книга устарела.
Знаете ли вы способ присоединиться к большему количеству узлов, не затрагивая существующие?