Split-brain — компьютерный термин, основанный на аналогии с медицинским синдромом split-brain . Он указывает на несоответствия данных или доступности, возникающие из-за обслуживания двух отдельных наборов данных с перекрытием по области действия, либо из-за серверов в сетевом дизайне , либо из-за состояния отказа, основанного на том, что серверы не взаимодействуют и не синхронизируют свои данные друг с другом. Этот последний случай также обычно называют сетевым разделением .
Хотя термин split-brain обычно относится к состоянию ошибки, split-brain DNS (или split-horizon DNS ) иногда используется для описания преднамеренной ситуации, когда внутренние и внешние службы DNS для корпоративной сети не взаимодействуют, так что для внешних компьютеров и для внутренних должны администрироваться отдельные пространства имен DNS. Это требует двойного администрирования, и если в именах компьютеров есть перекрытие доменов, существует риск того, что одно и то же полное доменное имя (FQDN) может неоднозначно встречаться в обоих пространствах имен, ссылаясь на разные IP-адреса компьютеров. [1]
Кластеры высокой доступности обычно используют частное сетевое соединение heartbeat , которое используется для мониторинга работоспособности и статуса каждого узла в кластере. Например, синдром разделенного мозга может возникнуть, когда все частные соединения выходят из строя одновременно, но узлы кластера все еще работают, каждый из которых считает, что работает только он. Наборы данных каждого кластера могут затем случайным образом обслуживать клиентов с помощью своих собственных «идиосинкразических» обновлений наборов данных без какой-либо координации с другими наборами данных. Это может привести к повреждению данных или другим несоответствиям данных, которые могут потребовать вмешательства оператора и очистки.
Дэвидсон и др. [2] после изучения нескольких подходов к решению этой проблемы классифицируют их как оптимистичные и пессимистичные.
Оптимистичные подходы просто позволяют разделенным узлам работать как обычно; это обеспечивает более высокий уровень доступности ценой потери корректности. После устранения проблемы может потребоваться автоматическое или ручное согласование, чтобы кластер находился в согласованном состоянии. Одной из текущих реализаций этого подхода является Hazelcast , который выполняет автоматическое согласование своего хранилища ключей и значений. [3]
Пессимистические подходы приносят доступность в жертву согласованности. После обнаружения сетевого разделения доступ к подразделам ограничивается, чтобы гарантировать согласованность. Типичный подход, описанный Кулурисом и др. [4] , заключается в использовании подхода кворум -консенсус. Это позволяет подразделу с большинством голосов оставаться доступным, в то время как остальные подразделы должны перейти в режим автоматического ограждения . Одной из текущих реализаций этого подхода является та, которая используется наборами реплик MongoDB . [5] И еще одна такая реализация — репликация Galera для MariaDB и MySQL . [6]
Современные коммерческие кластеры HA общего назначения обычно используют комбинацию сетевых соединений heartbeat между хостами кластера и хранилище кворума- свидетеля. Проблема с двухузловыми кластерами заключается в том, что добавление устройства-свидетеля увеличивает стоимость и сложность (даже если реализовано в облаке), но без него, если heartbeat отказывает, члены кластера не могут определить, какой из них должен быть активным. В таких кластерах (без кворума), если член отказывает, даже если члены обычно назначают хостам первичный и вторичный статусы, существует по крайней мере 50% вероятность того, что кластер HA из 2 узлов полностью откажет, пока не будет предоставлено вмешательство человека, чтобы предотвратить независимую активность нескольких членов и либо прямое конфликтование, либо повреждение данных.