согласованный алгоритм: что произойдет, если нечетный кластер станет четным из-за сбоя узла? - PullRequest
1 голос
/ 16 мая 2019

Консенсусный алгоритм (например, плот) требует, чтобы кластер содержал нечетное количество узлов, чтобы избежать проблемы разделения мозга.

Скажите, у меня есть кластер из 5 узлов, что произойдет, если выйдет из строя только один узел?Кластер теперь имеет 4 узла, что нарушает правило нечетных чисел. Будет ли кластер вести себя правильно?

Одним из решений является удаление еще одного узла, чтобы кластер содержал только 3 узла, но что, если ранее отказавший узел вернется?затем кластер снова имеет 4 узла, и мы должны вернуть ранее удаленный узел, чтобы кластер оставался нечетным.

Решают ли реализации алгоритма консенсуса эту проблему автоматически, или я должен сделать это в своем коде приложения (например, удалить узел)?

1 Ответ

3 голосов
/ 16 мая 2019

Да, кластер продолжит нормально работать. Кластер из N узлов, и если N нечетно (N = 2k + 1), может обработать k сбой узла. Пока большинство узлов живы, они могут работать нормально. Если один узел выходит из строя, а у нас все еще большинство, все в порядке. Только когда вы потеряете большинство узлов, у вас возникнут проблемы.

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

3 node cluster can handle 1 node fail (the majority is 2 nodes).
4 node cluster can handle 1 node fail (the majority is 3 nodes).
5 node cluster can handle 2 node fail (the majority is 3 nodes).
6 node cluster can handle 2 node fail (the majority is 4 nodes).

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

...