правильный способ отключить узел / член в кластере akka - PullRequest
1 голос
/ 16 февраля 2020

Есть ли какой-нибудь правильный способ отключить узел, когда он становится недоступным в кластере akka. Я хочу предоставить API для отключения узла, когда он становится недоступным, но я предпочитаю найти другой путь или что-то программно. Автоудавление больше не вариант, так как у меня были проблемы с разделенным мозгом.

Можно ли просто отключить узел в методе receive :

def receive: Receive = {case MemberUp (member) =>

case UnreachableMember(member) => {      
  Cluster(context.system).down(member.address)
}

1 Ответ

1 голос
/ 19 февраля 2020

Если узел вышел из строя, его можно отключить на любом другом узле.

Но вы должны сделать это как реакцию на то, что он недоступен, однако это приведет к разделению мозга, если это сетевой раздел, а не узел, прерывающий недоступность, каждая сторона раздела увидит остальную часть кластера. как недостижимый и уничтоживший всех, и в итоге вы получите два кластера, думая, что они сбили другую сторону.

Это точная причина, по которой мы удалили автоматическое отключение в Akka 2.6

Если вы хотите автоматизировать c удаление узлов с разделенным разрешением мозга, вам нужно будет использовать / внедрить поставщика подавления это обрабатывает это для вас.

Для самостоятельного внедрения провайдера потребуется немало усилий и все продумайте. Более подробную информацию об этой проблеме вы можете прочитать в документах коммерческого SBR Lightbend здесь: https://doc.akka.io/docs/akka-enhancements/current/split-brain-resolver.html

...