Давайте проанализируем, как лидерный узел может быть выбран в ансамбле ZooKeeper. Учтите, что в кластере N узлов. Процесс выбора лидера выглядит следующим образом —
-
Все узлы создают последовательный, эфемерный znode с одинаковым путем, / app / leader_election / guid_ .
-
Ансамбль ZooKeeper добавит к пути 10-значный порядковый номер, а созданный znode будет / app / leader_election / guid_0000000001, / app / leader_election / guid_0000000002 и т. Д.
-
Для данного экземпляра узел, который создает наименьшее число в znode, становится лидером, а все остальные узлы являются последователями.
-
Каждый следящий узел наблюдает за узлом, имеющим следующий наименьший номер. Например, узел, который создает znode / app / leader_election / guid_0000000008, будет наблюдать за znode / app / leader_election / guid_0000000007, а узел, который создает znode / app / leader_election / guid_0000000007, будет смотреть znode / app / leader_election / guid_000000000.
-
Если лидер отключается, то соответствующий ему znode / app / leader_electionN удаляется.
-
Следующий в очереди следящий узел получит уведомление от наблюдателя об удалении лидера.
-
Следующий в строке следящий узел проверит, есть ли другие узлы с наименьшим номером. Если нет, то он возьмет на себя роль лидера. В противном случае он находит узел, который создал znode с наименьшим номером в качестве лидера.
-
Точно так же все другие узлы-последователи выбирают узел, который создал znode с наименьшим числом в качестве лидера.
Все узлы создают последовательный, эфемерный znode с одинаковым путем, / app / leader_election / guid_ .
Ансамбль ZooKeeper добавит к пути 10-значный порядковый номер, а созданный znode будет / app / leader_election / guid_0000000001, / app / leader_election / guid_0000000002 и т. Д.
Для данного экземпляра узел, который создает наименьшее число в znode, становится лидером, а все остальные узлы являются последователями.
Каждый следящий узел наблюдает за узлом, имеющим следующий наименьший номер. Например, узел, который создает znode / app / leader_election / guid_0000000008, будет наблюдать за znode / app / leader_election / guid_0000000007, а узел, который создает znode / app / leader_election / guid_0000000007, будет смотреть znode / app / leader_election / guid_000000000.
Если лидер отключается, то соответствующий ему znode / app / leader_electionN удаляется.
Следующий в очереди следящий узел получит уведомление от наблюдателя об удалении лидера.
Следующий в строке следящий узел проверит, есть ли другие узлы с наименьшим номером. Если нет, то он возьмет на себя роль лидера. В противном случае он находит узел, который создал znode с наименьшим номером в качестве лидера.
Точно так же все другие узлы-последователи выбирают узел, который создал znode с наименьшим числом в качестве лидера.
Выбор лидера — это сложный процесс, когда он делается с нуля. Но сервис ZooKeeper делает это очень просто. Давайте перейдем к установке ZooKeeper для целей разработки в следующей главе.