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