Избор на лидерство с консул

1. Общ преглед

В този урок ще видим как Изборът на лидерство с консул помага да се осигури стабилност на данните. Ще предоставим практически пример за управление на разпределено заключване в едновременни приложения.

2. Какво е консул?

Consul е инструмент с отворен код, който предоставя регистър на услуги и откриване въз основа на проверка на състоянието. Освен това, той включва уеб графичен потребителски интерфейс (GUI) за преглед и лесно взаимодействие с Consul. Той също така обхваща допълнителни възможности за управление на сесии и Key-Value (KV).

В следващите раздели ще се съсредоточим върху това как можем да използваме управлението на сесии на Consul и KV store, за да изберем лидера в приложения с множество екземпляри .

3. Основи на консула

Агентът Consul е най-важният компонент, изпълняващ се на всеки възел на клъстер Consul. Той отговаря за здравната проверка; регистриране, откриване и разрешаване на услуги; съхраняване на конфигурационни данни; и още много.

Консул агент може да работи в два различни режима - сървър и агент.

Основните отговорности на Consul Server са да отговаря на запитванията, идващи от агентите, и да избира лидера. Ръководството се избира с помощта на консенсусния протокол, за да се осигури последователност (както е определено от ОСП) въз основа на алгоритъма на Raft.

Не е в обхвата на тази статия да навлиза в подробности как работи консенсусът. Независимо от това, струва си да споменем, че възлите могат да бъдат в едно от трите състояния: лидер, кандидат или последовател. Той също така съхранява данните и отговаря на запитвания, идващи от агентите.

Агентът е по-лек от сървъра на Consul. Той отговаря за провеждането на проверка на състоянието на регистрираните услуги и препращане на заявки към сървъра. Нека видим проста диаграма на клъстер Consul:

Консулът може да помогне и по други начини - например при едновременни приложения, в които един екземпляр трябва да бъде водещ.

Нека да видим в следващите раздели как Consul, чрез управление на сесии и KV store, може да предостави тази важна възможност.

4. Избор на лидерство с консул

При разпределените разполагания услугата, която държи ключалката, е водеща. Следователно за високодостъпните системи е от решаващо значение за управлението на ключалките и лидерите.

Consul осигурява лесен за използване KV магазин и управление на сесии. Тези функционалности служат за изграждане на избори за лидер, така че нека научим принципите, които стоят зад тях.

4.1. Състезание за лидерство

Първото нещо, което правят всички инстанции, принадлежащи към разпределената система, е да се състезават за лидерството. Спорът за лидерство включва поредица от стъпки:

  1. Всички инстанции трябва да се споразумеят за общ ключ, за да се борят.
  2. След това екземплярът създава сесия, като използва договорения ключ чрез управление на сесии на Consul и възможности на KV.
  3. Трето, те трябва да придобият сесията. Ако връщаната стойност е true , заключването принадлежи на екземпляра, а ако е false , екземплярът е последовател.
  4. Инстанциите трябва непрекъснато да наблюдават сесията, за да придобият лидерството отново в случай на провал или освобождаване .
  5. Накрая лидерът може да освободи сесията и процесът започва отново.

След като лидерът бъде избран, останалите инстанции използват Consul KV и управление на сесията, за да открият лидера чрез:

  • Извличане на договорения ключ
  • Получаване на информация за сесията, за да познаете лидера

4.2. Практически пример

Трябва да създадем ключа и стойността заедно със сесията в Consul с множество изпълнени екземпляри. За да помогнем в това, ще използваме внедряването на Java с отворен код Kinguin Digital Limited Leadership Consul.

Първо, нека включим зависимостта:

 com.github.kinguinltdhk leadership-consul ${kinguinltdhk.version}   com.ecwid.consul consul-api   

Ние изключва консул API зависимостта да се предотвратят сблъсъци по различните версии на Java.

За общия ключ ще използваме:

services/%s/leader

Нека тестваме целия процес с обикновен фрагмент:

new SimpleConsulClusterFactory() .mode(SimpleConsulClusterFactory.MODE_MULTI) .debug(true) .build() .asObservable() .subscribe(i -> System.out.println(i));

След това създаваме клъстер с множество екземпляри с asObservable () за достъп до събития от абонати. Лидерът създава сесия в Консул и всички инстанции проверяват сесията, за да потвърдят лидерството.

И накрая, ние персонализираме конфигурацията на консула и управлението на сесията и договорения ключ между инстанциите за избор на лидера:

cluster: leader: serviceName: cluster serviceId: node-1 consul: host: localhost port: 8500 discovery: enabled: false session: ttl: 15 refresh: 7 election: envelopeTemplate: services/%s/leader

4.3. Как да го тествате

Има няколко опции за инсталиране на Consul и стартиране на агент.

Една от възможностите за разполагане на Consul е чрез контейнери. Ще използваме изображението на Consul Docker, налично в Docker Hub, най-голямото хранилище в света за изображения на контейнери.

Ще разположим Consul с помощта на Docker, като изпълним командата:

docker run -d --name consul -p 8500:8500 -e CONSUL_BIND_INTERFACE=eth0 consul

Консулът вече работи и той трябва да бъде достъпен на localhost: 8500 .

Нека изпълним фрагмента и проверим направените стъпки:

  1. Лидерът създава сесия в консул.
  2. След това се избира ( избран.първо ).
  3. Останалите екземпляри гледат до пускането на сесията :
INFO: multi mode active INFO: Session created e11b6ace-9dc7-4e51-b673-033f8134a7d4 INFO: Session refresh scheduled on 7 seconds frequency INFO: Vote frequency setup on 10 seconds frequency ElectionMessage(status=elected, vote=Vote{sessionId='e11b6ace-9dc7-4e51-b673-033f8134a7d4', serviceName="cluster-app", serviceId="node-1"}, error=null) ElectionMessage(status=elected.first, vote=Vote{sessionId='e11b6ace-9dc7-4e51-b673-033f8134a7d4', serviceName="cluster-app", serviceId="node-1"}, error=null) ElectionMessage(status=elected, vote=Vote{sessionId='e11b6ace-9dc7-4e51-b673-033f8134a7d4', serviceName="cluster-app", serviceId="node-1"}, error=null) 

Консулът също така предоставя уеб GUI, достъпен на // localhost: 8500 / ui .

Нека отворим браузър и щракнем върху секцията ключ-стойност, за да потвърдим, че сесията е създадена:

Следователно един от едновременните екземпляри създаде сесия, използвайки договорения ключ за приложението. Само когато сесията бъде освободена, процесът може да започне отначало и нов екземпляр може да стане лидер.

5. Заключение

В тази статия показахме основите на избора на лидерство в приложения с висока производителност с множество екземпляри. Демонстрирахме как управлението на сесиите и възможностите за съхранение на KV на Consul могат да помогнат за придобиване на ключалката и избор на водача

Както винаги, кодът е достъпен в GitHub.