Разрабатываем архитектуру распределенной системы на основе Apache Ignite. Система предъявляет строгие требования к отказоустойчивости.
Для этого у нас есть три центра обработки данных (DC): два из них являются главными DC (DC1 и DC2), а один - резервным DC (DC3). У нас есть быстрый канал Ethernet между основными DC. DC1 и DC2 подключены более 40 GbE. Резервный DC3 подключен к DC1 и DC2 по медленным каналам 1 GbE.
Мы планируем использовать ZooKeeper Discovery для Ignite Cluster и хотим разместить узлы ZooKeeper Cluster на трех DC: по 1 узлу на каждый DC.
Мы планируем разместить узлы Ignite Cluster только в основных DC (к DC1 и DC2). DC1 и DC2 будут иметь одинаковое количество узлов зажигания.
Схема архитектуры
Что происходит с кластером зажигания, когда происходит сегментация сети, если канал 40GbE между основными DC DC и DCDC2 будет недоступен?
Например, узел ZK3 в DC3 является лидером, ZK1 и ZK2 являются последователями, в этой ситуации узел-лидер может связываться с обоими последователями, а последователи потеряли связь друг с другом. ZooKeeper Cluster остается в ансамбле.
Узлы Ignite Cluster от DC1 могут связываться с узлами ZK1 и ZK3 и между собой в DC1. Узлы Ignite Cluster от DC2 могут связываться с узлами ZK2 и ZK3 и друг с другом в DC2.
Как будет разрешена ситуация с разделением мозга в этом случае сегментации сети, или мы получим два независимых кластера Ignite?
Документация https://apacheignite.readme.io/docs/zookeeper-discovery#section-failures-and-split-brain-handling сообщает:
Всякий раз, когда узел обнаруживает, что он не может подключиться к некоторым другим узлам в кластере, он инициирует процесс разрешения сбоя связи путем публикации специальных запросов. в кластер ZooKeeper. Когда процесс запускается, все узлы пытаются соединиться друг с другом и отправляют результаты попыток соединения узлу, который координирует процесс (узел-координатор). На основе этой информации узел-координатор создает граф связности, который представляет сетевую ситуацию в кластере. Дальнейшие действия зависят от типа сегментации сети.
Может ли координатор выбрать один из половины кластера Ignite в качестве основного в этом случае?