Лидер играет очень важную роль в кластере, отвечая за обработку и планирование всей транзакции, что является ключом к обеспечению согласованности распределенных данных. Поскольку лидер так важен в кластере ZooKeeper, необходимо убедиться, что в кластере есть и только один лидер существует в любой момент времени.
концепция
Zookeeper Server имеет три роли: Лидер, Последователь, Наблюдатель.
Лидер является ядром механизма работы кластера Zookeeper, основными задачами которого являются:
- А. Планировщик: планировщик каждого сервисного узла в кластере.
- б) Запрос на транзакцию: единственный планировщик и обработчик запросов на транзакцию, обеспечивающий упорядоченность обработки транзакций кластера.
Основные обязанности сопровождающего:
- А. Нетранзакционные запросы: Последователи обрабатывают нетранзакционные запросы напрямую и перенаправляют транзакционные запросы Лидеру.
- б) голосование по предложению: при выполнении транзакции на Лидере Последователь должен проголосовать, и Лидер фактически выполнит ее.
- c. Голосование на выборах лидера
Основные обязанности наблюдателя:
- А. Нетранзакционные запросы: Последователи обрабатывают нетранзакционные запросы напрямую и перенаправляют транзакционные запросы Лидеру.
Разница между Наблюдателем и Последователем:
- А. Подписчики участвуют в голосовании: выборы лидера, голосование за предложение (подтверждение выполнения сделки)
- б) Наблюдатель не участвует в голосовании: он используется только для обеспечения обработки нетранзакционных запросов.
Статус сервера Zookeeper
- ИЩУ: ищу лидера
- ВЕДУЩИЙ: состояние лидера, соответствующий узел является лидером.
- FOLLOWING: состояние Follower, соответствующий узел — Follower.
- НАБЛЮДЕНИЕ: состояние наблюдателя, соответствующий узел является наблюдателем, и этот узел не участвует в выборах лидера.
Другие концепции
- ZXID (идентификатор транзакции Zookeeper): каждая операция, которая изменяет состояние Zookeeper, формирует соответствующий zxid и записывает его в журнал транзакций. Чем больше значение, тем позднее обновление
- myid: SID сервера, номер, настроенный через файл конфигурации, уникальный
- SID: уникальный идентификатор сервера.
- Необходимые условия для того, чтобы стать лидером: Лидер должен иметь наибольший zxid, при размере кластера n большинство машин в кластере (не менее n/2+1) будут откликаться и следовать за выбранным лидером.
- Механизм сердцебиения: Лидер и ведомый используют PING, чтобы определить, жива ли другая сторона.Когда лидер не может ответить на PING, выборы лидера будут инициированы повторно.
Существует два вида выборов: голосование, инициированное сервером, и голосование во время работы.
Выборы лидера при запуске сервера
1. Каждый сервер отправляет голос (SID, ZXID)
Среди них сид — это ваш собственный миид, и на начальном этапе вы возьмете на себя роль лидера.
2. Получать голоса с других серверов.
После того, как каждый сервер в кластере получает голосование, он сначала определяет действительность голоса, например, проверяет, является ли это текущим раундом голосования и исходит ли он от сервера, находящегося в состоянии LOOKING.
3. Обработать голосование
Для каждого голосования соблюдайте следующие правила и собственный голос PK.После ПК, следует ли обновить голосование в зависимости от ситуации, а затем отправить его на другие машины.
- А. Сначала проверьте ZXID, и тот, у которого ZXID больше, будет лидером.
- б) Если ZXID одинаковый, проверьте SID, тот, у кого SID больше, будет лидером
5. Статистическое голосование
После каждого голосования сервер подсчитывает все голоса, чтобы определить, получили ли более половины машин одинаковое количество голосов.Если определенный голос достигает половины требований, считается, что предлагающий голосование может стать Лидером.
6. Измените состояние сервера
Как только лидер определен, каждый сервер обновляет свой статус, лидер меняется на Ведущий, а Последователь меняется на Последующий. При нормальных обстоятельствах, как только лидер избран, он остается до тех пор, пока сервер лидера не выйдет из строя, после чего будет проведено переизбрание.
Выборы лидера во время работы сервера
1. Изменить статус
Когда лидер выйдет из строя, оставшиеся серверы, не являющиеся наблюдателями, изменят свой статус на «В поисках», а затем начнут процесс выбора нового лидера.
2. Каждый сервер выдает голосование.
Сгенерируйте (SID, ZXID) информацию, учтите, что ZXID во время работы может быть другим, но при голосовании он будет голосовать за себя как за лидера, а затем отправлять его другим серверам.
3. Получайте голоса с разных серверов
Тот же процесс, что и при запуске
4. Обработать голосование
Тот же процесс, что и при запуске
5. Статистическое голосование
Тот же процесс, что и при запуске
6. Измените состояние сервера
Тот же процесс, что и при запуске