Один из моих клиентов хотел бы запустить consul в двух центрах обработки данных. Оба дата-центра Берлин и Франкфурт должен привести к настройке высокой доступности, при которой один центр обработки данных может быть отключен или умер, не затрагивая другой центр обработки данных.
Оба центра обработки данных должны иметь одинаковое состояние согласованности данных, и мы столкнулись с некоторыми проблемами.
Я ожидал, что будет работать простой consul-кластер из двух серверных узлов. Но как только связь между двумя прерывается, ни один из них не может функционировать, так как ни один лидер больше не избирается.
В этой настройке, когда происходит разделение, узел сервера в Берлине все еще работает, но узел агента во Франкфурте перестает работать. Это действительно вызвало вопрос, а какая польза от агентов в консуле.
Если для одного кластера / сервера в Берлине задан параметр центра обработки данных «Берлин», а для другого кластера / сервера во Франкфурте задано значение «Франкфурт», хранилище сегментируется. Оба работают после разделения, но ключи в Берлине недоступны из Франкфурта и наоборот.
Для этого необходимо как-то обновить оба кластера. Одно из решений - небольшой демон, основанный на консул-копия, но это добавляет ко всей настройке единую точку отказа, чего мы хотели бы избежать.
Единственное, что мы могли придумать, - это запустить третий внешний узел в надежде, что когда-нибудь выйдет из строя не более одного узла. Это открывает новые возможности для размышлений (резервное копирование, безопасность, обновления и т. Д.), Которых мы бы хотели избежать.
На данный момент наш лучший вариант - запустить два полностью разделенных кластера и обновить ключи через внешний конвейер. Это может привести к несоответствиям, но работает для нашей настройки.
Однако это действительно заставило нас задуматься, действительно ли Consul предпочитает отказ в обслуживании возможной несогласованности.
Мы что-то упустили? Есть ли другой способ создания автоматически реплицированного Consul-Cluster в двух центрах обработки данных, который по-прежнему работает в ситуациях с разделенным мозгом или при отказе центра обработки данных?