Лидер выборов Подробная Zookeeper

I. Введение

  Обучение детали Zookeeper передний конец службы, для которой начинается кластер, важной частью является избрание лидера, а затем они начали углубленное исследование Leader выборов.

Во-вторых, руководитель избирательной

  2.1 Лидер Выборы Обзор

  Лидер выборов является обеспечение согласованности распределенных ключа данных. Zookeeper кластера, когда сервер выходит один из двух вещей, вам нужно ввести Leader выборы.

  (1) Инициализация сервера начинается.

  Лидер и не может оставаться на связи в течение (2) сервер работает.

  Последующий анализ объяснения по двум делам.

  1. Запустите сервер во время выборов лидера

  Если бы выборы были лидер, вы должны по крайней мере, две машины, выберите этот сервер кластер, состоящий из трех машин, например. В фазе инициализации кластера, когда есть сервер Сервер1 начинается, в одиночку и не смог завершить выборы лидера, когда второй сервер Сервер2 началась, когда две машины могут взаимодействовать друг с другом, каждая машина пытается найти лидера, затем введите Лидер избирательного процесса. Избирательный процесс заключается в следующем

  (1) Каждый сервер выдает голос . Так как начальный случай, Сервер1 и Сервер2 будут сам по себе в качестве сервера Leader для голосования, каждый бюллетень будет содержать сервер рекомендовали MyId и ZXID, использование (MyID, ZXID) , чтобы указать на это время для голосования Сервер1 является (1, 0), Сервер2 голосовать за (2, 0), то голосование будет отправлено на каждый кластер других машин.

  (2) принимать голоса от каждого сервера . После того, как каждый голос получил кластер серверов, сначала необходимо определить законность голосования, например, проверки , является ли текущий раунд голосования, независимо от состояния ИЩУ сервера.

  (3) процесс голосования . Для каждого голосования, сервер нужны другие голоса , и их PK голосов, правила PK следующим

    • проверка приоритета ZXID . ZXID больший приоритет сервера в качестве лидера.

    Если ZXID же, а затем сравнить MyId . MyId большие серверы как сервер лидера.

  Для Server1, в голосовании, которое представляет собой (1, 0), получая голос Server2 является (2, 0), и сначала сравнивает ZXID, равно 0, то сравнение MyID, случай Сервер2 MyID максимум, то обновить свой голос (2, 0), а затем повторно проголосовать за Сервера2, необходимость обновить свой собственный голос, информацию о голосовании можно послать только один раз в кластер снова на всех машинах.

  (4) Статистический голос . После каждого голосования, сервер будет голосовать информацию подсчета , чтобы определить , было ли больше половины машины для голосования получил ту же информацию для Server1, Server2, статистика две машины в кластере были приняты (2, 0) голосов информация, на этот раз будет считаться избран лидером.

  (5) изменяет состояние сервера . После того , как лидер, каждый сервер будет обновлять свой статус, если последователь, то изменено, если руководитель, оно было изменен на ВЕДУЩИЕ.

  

  Лидер время выборов пробег 2 сервера

  В Zookeeper перспективы, с не-Leader Лидером сервер выполнять свои обязанности, даже если есть время простой сервера, не лидер или новые участники, на этот раз он не будет влиять на лидер, но как только сервер Leader повесил трубку, то весь кластер внешних услуг будет приостановлен, Лидер ввести новый раунд выборов, лидер избирательного процесса, и этот процесс в основном то же самое время начала. Предположим, вы работаете там Server1, Server2, сервере3 три сервера, текущий лидер Сервер2, в то время, когда лидер повешен, а затем начал Leader выборы. Избирательный процесс заключается в следующем

  (1)  изменяет свое состояние . Лидер после повешения, оставшийся без наблюдателя сервер покажет их статус сервера изменения ИЩЕТ, а затем начал входить Лидер избирательного процесса.

  (2)  Каждый сервер выдает голос . Во время работы, ZXID может быть разным на каждом сервере, предполагая , что ZXID из Server1 123, то ZXID Server3 122, первый избирательный бюллетень, будет отбрасывать их Server1 и Server3, производящие голоса (1, 123), (3, 122), а затем отправлены в каждом кластере для всех машин для голосования.

  (3) ,  чтобы получить голоса от каждого сервера . При запуске тот же процесс.

  (4)  обработки , чтобы голосовать . Когда вы начинаете тот же самый процесс, на этот раз, Сервер1 станет лидером.

  (5)  Статистический голос . При запуске тот же процесс.

  (6) ,  чтобы изменить состояние сервера . При запуске тот же процесс.

  Анализ 2.2 Алгоритм Лидер Выборы

  Zookeeper версия 3.4.0 после сохранения только версии TCP алгоритма избирательного FastLeaderElection. Когда машина на выборы Лидер, текущий кластер может находиться в двух состояниях

    · Cluster уже существует лидер.

    · Кластерный нет лидера.

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

  (1)  в первом туре . Какой бы ни была причина всех машин были Leader выборы, кластеры в попытке избрать лидер государства, это состояние СМОТРЯ, ИЩЕШЬ машин посылает сообщение всех других машин, сообщение называется голосовать. Голосование содержит SID (уникальный идентификационный сервер) и ZXID (ИД транзакции), (SID, ZXID) в форме голосования , чтобы идентифицировать информацию. 5 предполагается на машинах Zookeeper композиции, соответственно , SID 1,2,3,4,5, ZXID 9,9,9,8,8 соответственно, и в это время машина 2 является машина SID Лидер, время, 1,2 , где отказ машины, поэтому кластер начинается лидер выборов. Когда первый избирательный бюллетень, каждая машина будет поставлен на голосование , как он сам, то машина SID голосования 3,4,5 соответственно (3, 9), (4, 8), (5, 8).

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

    Vote_sid · : SID Лидер голосования , полученного сервером в соответствии с рекомендациями.

    Vote_zxid · : ZXID Лидер голосов , полученных сервером в соответствии с рекомендациями.

    Self_sid · : текущий сервер собственный SID.

    Self_zxid · : собственный ZXID текущего сервера в.

  Каждый голос получил лечение, он должен (vote_sid, vote_zxid) и (self_sid, self_zxid) процесс сравнения.

    Правило номер один: если vote_zxid больше self_zxid, голосование по одобрению тока получил и разослал голос снова.

    Правило 2: Если vote_zxid меньше self_zxid, а затем придерживаться их голоса, без каких-либо изменений.

    Правило номер три: Если vote_zxid равно self_zxid, а затем сравнить два SID, если vote_sid больше self_sid, то полученные в настоящее время утверждения голоса, и голос снова отправляют.

    Правило четвертое: Если vote_zxid равно self_zxid и vote_sid менее self_sid, затем придерживаться их голоса, без каких-либо изменений.

  В сочетании с указанными выше правилами, учитывая следующие кластеры процесса изменения.

  (3)  определения лидера . После второго тура голосования, каждая машина в кластере будут голосовать снова получили другие машины, а затем начали подсчитывать голоса, если машина голосования получил более половины одного и того же, то соответствующие машины голосования SID является лидером. На этом этапе Server3 станет лидером.

  Из приведенных выше правил, новее обычные данных на этом сервере (ZXID будет больше), он становится, тем больше вероятности того, что лидер, тем больше может гарантировать восстановление данных. Если ZXID то же самое, тем больше шанс SID.

  2.3 Руководитель детали реализации Выборы

  Статус 1. Сервер

  Сервер имеет четыре состояния, а именно, ИЩУ, СЛЕДУЮЩИЙ, ВЕДУЩИЙ, НАБЛЮДЕНИЯ.

  ВЗГЛЯД : взгляд статус лидера. Когда сервер находится в этом состоянии, он не считает , что нынешний руководитель кластера, руководитель обязан войти в состоянии выборов.

  СЛЕДУЮЩИЙ : следящее состояние. Это указывает на то, что текущая роль сервера Последователь.

  ВЕДУЩИЙ : Глава государства. Это указывает на то, что текущая роль сервера является лидером.

  Наблюдающий : статус наблюдателя. Это указывает на то, что текущая роль сервера наблюдателя.

  2. Структура данных голосования

  Каждый избирательный бюллетень содержит два наиболее основной информации, сервер рекомендовали SID и ZXID, голос (голос), содержащийся в полях ниже Zookeeper

  указанный выше идентификатор : SID был избран руководитель.

  zxid : был избран лидер ИД транзакции.

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

  peerEpoch : Epoch был избран руководителем.

  Государство : текущее состояние сервера.

  3. QuorumCnxManager: Network I / O

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

  (1)  очереди сообщений . Поддержание серии внутренней очереди QuorumCnxManager , чтобы держать получен, сообщение , которое будет передано и передатчик сообщения, в дополнение к очереди приема, другие очереди устанавливаются в соответствии с очередью SID пакета формируется, в дополнение к себе, а также в группе 3 машина, он отправит очередь , что три машины были созданы , не мешая друг другу.

    RecvQueue · : получение очереди сообщений для хранения этих сообщений , полученных от других серверов.

    QueueSendMap · : отправка очереди сообщений для хранения сообщений, подлежащих передаче , что, сгруппированные по SID.

    SenderWorkerMap · : наборы передатчика, каждое сообщение отправителю SenderWorker, Zookeeper соответствует удаленному серверу, ответственный за отправку сообщения, но и сгруппированы по SID.

    LastMessageSent · : недавно отправленные сообщения, оставить сообщение в последнее отправленное для каждого SID.

  (2)  , чтобы установить соединение . Для того , чтобы иметь возможность голосовать друг друга, все машины в кластере Zookeeper двадцать-два необходимо установить сетевое соединение. QuorumCnxManager , когда он начинает создавать ServerSocket для прослушивания для коммуникационных портов Лидер выборов (по умолчанию 3888). После открытия монитора, Zookeeper может продолжать создавать запрос на соединение принимается от других серверов, при получении других серверов запросов соединения TCP будут обработаны. Для того , чтобы избежать повторно создать соединение TCP, Zookeeper SID позволяют только крупные серверы и другие машины берут на себя инициативу , чтобы установить соединение или разъединение между двумя машинами. После получения запроса на создание соединения, сервер путем сравнения значения SID себя и удаленным сервером , чтобы определить , следует ли принять запрос на подключение, если текущий сервер нашел больше собственного SID, затем завершает текущее соединение, а затем по их собственной инициативе , чтобы установить соединение и удаленный сервер , После того , как соединение установлено, чтобы создать соответствующий отправителя сообщения и получателя сообщения удаленный сервер RecvWorker SendWorker Сид и начинается.

  (3)  прием и передача сообщений . Прием сообщения : получатель сообщения отвечает RecvWorker, поскольку каждый удаленный сервер назначается отдельный RecvWorker Zookeeper есть, поэтому, просто нужно держать каждый RecvWorker прочитать это сообщение от соединения TCP, и сохранить его в recvQueue очереди , Сообщение : Поскольку каждый удаленный сервер назначается отдельный SendWorker Zookeeper, поэтому, только мы должны постоянно SendWorker каждой очереди , чтобы получить сообщение , переданное из соответствующего переданного сообщения, в то время как сообщение в lastMessageSent. В SendWorker, как только Zookeeper сообщение обнаружения отправлена для текущей очереди сервера пусто, то время , необходимое , чтобы удалить сообщение из lastMessageSent недавно послал к повторной передаче, который должен решить получатель до получения сообщения или полученного сообщения после того, как сервер будучи вниз, в результате чего сообщение не было обработано правильно. В то же время, получатель может обеспечить Zookeeper обработку сообщения, сообщение будет повторяться надлежащее лечение.

  4. FastLeaderElection: Выборы Алгоритм основной

  Внешняя Голосование : голосование особенно отправлены на другие серверы.

  Внутренний голос : Сам текущий сервер голосования.

  · Избирательные раундов : Замкнутый Zookeeper выборы сервер лидера, а именно logicalclock.

  PK · : внутренний и внешний опрос голосов по сравнению определить , нужно ли изменить внутренний голос.

  (1) управление голосом

  Sendqueue · : очереди отправки голосование, за исключением голосования для отправки.

  Recvqueue · : голосование очереди приема для хранения внешнего голосования получил.

  WorkerReceiver · : приемник для голосования. Который будет продолжать получать доступ к другим серверам избирательного сообщения , отправленного из QuorumCnxManager и преобразует его в избирательный бюллетень, а затем сохранить recvqueue, прием бюллетеней, если он считает , что внешние круглые выборы для голосования меньше , чем текущий сервер, так что игнорировать внешний голос, посылая свой собственный внутренний голос немедленно.

  WorkerSender · : передатчик для голосования, приобретая голос , чтобы быть постоянно передается от sendqueue, и передает его к нижележащему QuorumCnxManager.

  (2) алгоритм ядра

  На рисунке показано, как модуль FastLeaderElection взаимодействует с базовой сетью ввода / вывода. Основной процесс выглядит следующим образом Leader выборы

  1.  Приращение избирательных раундов . Zookeeper положение всех действительных голосов , должно быть в том же раунде , во времена , в начале нового раунда голосования будет первым logicalclock приращения оператора.

  2.  Инициализация для голосования . Перед началом нового раунда голосования, каждый сервер будет инициализироваться голосования, и на этапе инициализации, каждый сервер будет избран себя как лидер.

  3.  Отправить инициализации голосов . После инициализации голосов, сервер будет запущен первый бюллетень. Zookeeper будет хорошо только инициализировать избирательный бюллетень в sendqueue, передатчик WorkerSender , ответственным за рассылку.

  4.  получить внешний голос . Каждый сервер будет продолжать получать голоса от внешней очереди recvqueue. Если сервер не может получить , чтобы найти какое - либо внешнее голосование, он будет немедленно подтвердить , действительно ли он и другие сервера в кластере , чтобы поддерживать действующее соединение, если нет связи, соединение устанавливается немедленно, если вы установили соединение, а затем посылает его текущее внутреннее снова голосование.

   Судья выборы округляют . После голосования после отправки инициализации, а затем начал заниматься с внешним голосованием. При рассмотрении внешнего голосования, он будет обрабатываться по- разному в зависимости от избирательных раундов.

    · Внешние голосования округляет больше внутреннего избирательного голосования . Если собственный тур выборов голосование сервера за внешний сервер соответствует турами выборов, он будет обновлять свой избирательный раунд (logicalclock) немедленно и очистить все голосования было получено, а затем использовать голос для инициализации ПК чтобы определить , следует ли изменить внутренний голос. Тогда в окончательном голосовании отправлено.

    · Внешние голосования раунды выборов меньше , чем внутренние литых голоса . Если выборы округляет вне голосов , полученных сервером за их избирательных раундов, то Zookeeper будет просто игнорировать внешний голос, без какого - либо лечения, и вернуться к шагу 4.

    · Внешних выборы голосования округляет равно внутреннее голосование . На этом этапе вы можете начать голоса ПК.

  6.  Бюллетень для ПК . Во время голосования ПК, в соответствии с каким - либо из условий , вам необходимо изменить голос.

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

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

    · Если соглашение между двумя ZXID, то оба SID контраст, если внешний голос SID большой, то вам необходимо изменить голос.

  7.  Изменение голоса . После PK, чтобы определить , является ли голос лучше , чем внешний внутренний голос, тем голосование по изменениям , что использование внешней информации для голосования бюллетеней для покрытия внутреннего голосования, после того , как изменение завершено, голосование будет снова отправляются после этого внутреннего изменения.

  8.  Архив бюллетеней . Независимо от того или нет изменения в голосовании, будет доля внешнего сбора бюллетеней для голосования только что получил в архиве recvset в. recvset для внешнего голосования записи всех текущего сервера , полученных в ходе этого раунда Лидер выборов (в соответствии с перепадом SID команды обслуживания, такие как {(1, vote1), ( 2, vote2) ...}).

  9.  Статистическое голосование . После завершения архив голосования, вы можете начать статистику голосования, статистику для того , чтобы голосовать , имеет ли статистический кластер более половины текущего внутреннего сервера признали голосование, если определено , там уже более половины сервер голосования одобрил, голосование прекращается. В противном случае, вернитесь к шагу 4.

  10.  Состояние обновления сервера . Если было определено , может прекратить голосование, а затем начать обновление состояния сервера, сервера для определения текущего выбора утвержден более половины избирательных участков соответствующего сервера , если сервер сам руководитель, если его собственный, будет принадлежать сервер обновляет статус лидера, если нет, определяются в соответствии с их конкретными обстоятельствами или СЛЕДУЯ наблюдающий.

  Более 10 шагов являются основным FastLeaderElection, в котором этап 4-9 будет проходить через несколько этапов обращения до лидера, избранного.

 

рекомендация

отwww.cnblogs.com/myseries/p/11285832.html