В этой статье мы рассмотрим распространенную проблему, с которой сталкиваются разработчики при использовании распределенных систем на базе Elasticsearch. Речь идет о проблеме Split Brain.
Split Brain – это ситуация, в которой две или более ноды кластера Elasticsearch имеют одинаковые данные и индексы. Это может привести к тому, что данные не будут синхронизироваться, и в результате одни и те же данные будут отсутствовать на разных нодах.
Проблема Split Brain особенно актуальна в кластерах с большим количеством нод. В больших кластерах, как правило, несколько нод отвечают за поиск, а остальные используются для хранения данных. Если данные на этих нодах не синхронизированы, то поиск по этим данным может быть некорректным.
В любой момент времени в кластере существует только один ведущий узел среди всех узлов, имеющих право на работу в качестве ведущего. Проблема Split Brain - это ситуация, когда в кластере есть более одного ведущего узла.
Возьмем для примера кластер, в котором есть два узла, отвечающих требованиям мастера, M1 и M2, с кворумом minimum_master_node, установленным на единицу. В кластере может возникнуть ситуация Split Brain, если оба узла M1 и M2 живы, а сеть связи между M1 и M2 прервана. Когда это происходит, оба M1 и M2 считают себя единственными в кластере и оба избирают себя в качестве мастера. В этот момент в вашем кластере будет два ведущих узла, и у вас возникнет ситуация с Split Brain.
Что вызывает проблему Split Brain в Elasticsearch
Существует несколько причин, которые могут вызвать проблему Split Brain:
- Обновление кластера. При обновлении кластера старые ноды продолжают работать, а новые добавляются в кластер. В результате данные на старых нодах могут быть устаревшими, а на новых – актуальными. Это может вызвать проблему Split Brain, если старые и новые ноды будут пытаться синхронизировать данные.
- Отказоустойчивость. В случае сбоя нода может быть восстановлена из резервной копии. В этом случае данные на восстановленной ноде могут быть устаревшими.
Решение проблемы Split Brain
Для решения проблемы Split Brain необходимо убедиться, что все ноды имеют одинаковые данные.
Читайте ниже, почему рекомендуется настраивать нечетное количество мастер-узлов и почему важно установить кворум минимальных мастер-узлов. Установка кворума минимальных мастер-узлов контролируется следующими параметрами в файле elasticsearch.yml на каждом узле:
1 2 | discovery.zen.ping.unicast.hosts: ["host1:tcp_port", "host2:tcp_port", "host3:tcp_port"] discovery.zen.minimum_master_nodes: 2 |
В настройке discovery.zen.ping.unicast.hosts для всех узлов, включая главные узлы, необходимо добавить только адрес узла и порт только узлов, отвечающих требованиям мастера. Частой ошибкой пользователей является добавление информации о хостах всех узлов в эту настройку.
Лучшие практики для предотвращения проблемы Split Brain
Проблему раздвоения мозга можно избежать, установив минимальное количество основных узлов по следующей формуле:
1 | minimum_master_nodes = (N/2)+1 |
Где N - общее количество узлов с правом доступа к мастеру в кластере. Значение минимального_мастер_узлов устанавливается путем округления до ближайшего целого значения. Например, если общее количество узлов, имеющих право доступа к мастеру, равно 3, то значение минимального_мастера_узлов будет равно 2.
Замечания для различных версий Elasticsearch
Концепция, которую мы описали в предыдущих разделах, применима ко всем версиям Elasticsearch до 7.0. В версии Elasticsearch 7.0 модуль обнаружения, который отвечает за все эти настройки взаимодействия кластера, претерпел полную переработку, и вам не нужно особо беспокоиться о настройке кворума минимального количества основных узлов. Elasticsearch теперь сам решает, какие узлы необходимы для формирования кворума. Обе настройки, discovery.zen.ping.unicast.hosts и discovery.zen.minimum_master_nodes, были удалены из настроек.
discovery.zen.ping.unicast.hosts переименована в discovery.seed_hosts, а новая настройка cluster.initial_master_nodes определяет начальный набор узлов, отвечающих требованиям мастера, в процессе загрузки кластера.
Мониторинг состояния кластера
Важно регулярно проверять состояние кластера и выявлять проблемы, которые могут привести к проблеме Split Brain. Для этого можно использовать инструменты мониторинга, такие как Kibana и Elastic Stack. Эти инструменты позволяют отслеживать состояние кластера и обнаруживать проблемы, такие как Split Brain.
ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ
Что такое проблема Split Brain?
Split Brain - это когда в кластере имеется более одного главного узла.
Как решить проблему разделенного мозга
Проблему Split Brain можно избежать, задав минимальное количество главных узлов по следующей формуле: minimum_master_nodes = (N/2)+1
Как предотвратить проблему Split Brain и ошибки, связанные с настройкой
Всегда следите за последними лучшими практиками и настроить систему мониторинга.
Большинство систем мониторинга имеют профили обнаружения проблемы Split Brain по умолчанию.
Может ли Elasticsearch split brain возникнуть после версии 7.0?
В версии Elasticsearch 7.0 модуль обнаружения, который отвечает за все эти настройки взаимодействия кластера, претерпел полную переработку, и вам не нужно особо беспокоиться о настройке кворума минимального количества мастер-узлов.