Ledelsesvalg med konsul

1. Oversikt

I denne veiledningen, vi får se hvordan ledelsesvalg med konsul bidrar til å sikre datastabilitet. Vi gir et praktisk eksempel på hvordan du administrerer distribuert låsing i samtidige applikasjoner.

2. Hva er konsul?

Consul er et åpen kildekodeverktøy som gir service-register og funn basert på helsekontroll. Videre inkluderer den et webgrafisk brukergrensesnitt (GUI) for å se og enkelt kommunisere med konsul. Det dekker også ekstra funksjoner for øktadministrasjon og Key-Value (KV) butikk.

I de neste avsnittene vil vi fokusere på hvordan vi kan bruk Consuls sesjonsledelse og KV-butikk for å velge leder i applikasjoner med flere forekomster.

3. Grunnleggende konsulater

Konsulagenten er den viktigste komponenten som kjører på hver node i en konsulklynge. Det har ansvar for helsesjekk; registrere, oppdage og løse tjenester; lagring av konfigurasjonsdata; og mye mer.

Konsulatagenten kan løpe inn to forskjellige moduser - Server og agent.

Hoved ansvaret til Consul Server skal svare på spørsmålene som kommer fra agentene og velge lederen. Ledelsen velges ved hjelp av konsensusprotokollen for å gi konsistens (som definert av CAP) basert på Raft-algoritmen.

Det ligger ikke i omfanget av denne artikkelen å gå i detalj om hvordan konsensus fungerer. Likevel er det verdt å nevne at nodene kan være i en av tre stater: leder, kandidat eller tilhenger. Den lagrer også dataene og svarer på spørsmål fra agentene.

Agent er lettere enn konsul-serveren. Det er ansvarlig for å kjøre helsekontrollen av de registrerte tjenestene og videresende spørsmål til serveren. La oss se et enkelt diagram over en konsulklynge:

Konsul kan også hjelpe på andre måter - for eksempel i samtidige applikasjoner der en forekomst må være leder.

La oss se i de kommende avsnittene hvordan Consul gjennom sesjonsadministrasjon og KV-butikk kan gi denne viktige muligheten.

4. Ledelsesvalg med konsul

I distribuerte distribusjoner er tjenesten som holder låsen leder. Derfor, for svært tilgjengelige systemer, er det viktig å administrere låser og ledere.

Consul gir en brukervennlig KV-butikk- og øktadministrasjon. Disse funksjonene tjener til å bygge ledervalg, så la oss lære prinsippene bak dem.

4.1. Lederskapskonflikt

Det første alle forekomster som tilhører det distribuerte systemet, er å konkurrere om ledelsen. Påstanden om å være leder inkluderer en rekke trinn:

  1. Alle tilfeller må bli enige om en felles nøkkel å kjempe for.
  2. Deretter oppretter forekomsten en økt ved hjelp av den avtalte nøkkelen gjennom konsulsesjonsadministrasjon og KV-funksjoner.
  3. For det tredje bør de tilegne seg økten. Hvis returverdien er ekte, hører låsen til forekomsten, og hvis falsk, forekomsten er en tilhenger.
  4. Forekomstene må kontinuerlig se etter at økten tilegner seg ledelsen igjen i tilfelle feil eller løslatelse.
  5. Til slutt kan lederen frigjøre økten, og prosessen begynner på nytt.

Når lederen er valgt, bruker resten av tilfellene konsul KV og sesjonsledelse for å oppdage lederen ved å:

  • Henter den avtalte nøkkelen
  • Få informasjon om økten for å kjenne lederen

4.2. Et praktisk eksempel

Vi må opprette nøkkelen og verdien sammen med økten i konsul med flere forekomster som kjører. For å hjelpe med dette bruker vi Kinguin Digital Limited Leadership Consul Java-implementering med åpen kildekode.

La oss først ta med avhengigheten:

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

Vi ekskluderte konsul-api avhengighet for å unngå kollisjoner på de forskjellige versjonene i Java.

For den vanlige nøkkelen bruker vi:

tjenester /% s / leder

La oss teste hele prosessen med et enkelt utdrag:

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

Deretter lager vi en klynge med flere forekomster med somObservable () for å få tilgang til arrangementer fra abonnenter. Lederen oppretter en økt i konsul, og alle forekomster bekrefter økten for å bekrefte ledelse.

Til slutt tilpasser vi konsulkonfigurasjonen og øktadministrasjonen, og den avtalte nøkkelen mellom forekomster for å velge leder:

klynge: leder: tjenestenavn: klyngetjeneste Id: node-1 konsul: vert: localhost port: 8500 oppdagelse: aktivert: falsk økt: ttl: 15 oppdatering: 7 valg: konvolutt Mal: ​​tjenester /% s / leder

4.3. Hvordan teste det

Det er flere alternativer for å installere Consul og kjøre en agent.

En av mulighetene for å distribuere Consul er gjennom containere. Vi bruker Consul Docker-bildet som er tilgjengelig i Docker Hub, verdens største lager for containerbilder.

Vi distribuerer Consul ved hjelp av Docker ved å kjøre kommandoen:

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

Konsul kjører nå, og den skal være tilgjengelig på lokal vert: 8500.

La oss utføre kodebiten og sjekke trinnene som er gjort:

  1. Lederen oppretter en økt i konsul.
  2. Så blir det valgt (valgt. første).
  3. Resten av tilfellene ser til økten er utgitt:
INFO: multimodus aktiv INFO: Session opprettet e11b6ace-9dc7-4e51-b673-033f8134a7d4 INFO: Sessionsoppdatering planlagt på 7 sekunders frekvens INFO: Stem frekvensoppsett på 10 sekunders frekvens -9dc7-4e51-b673-033f8134a7d4 ', serviceName = "cluster-app", serviceId = "node-1"}, error = null) ElectionMessage (status = valgt. Første, stemme = Stem {sessionId =' e11b6ace-9dc7- 4e51-b673-033f8134a7d4 ', serviceName = "cluster-app", serviceId = "node-1"}, error = null) ElectionMessage (status = valgt, stemme = Stem {sessionId =' e11b6ace-9dc7-4e51-b673-033f8134a7d4 ', serviceName = "cluster-app", serviceId = "node-1"}, error = null) 

Consul tilbyr også et web-GUI tilgjengelig på // localhost: 8500 / ui.

La oss åpne en nettleser og klikke på nøkkelverdiseksjonen for å bekrefte at økten er opprettet:

Derfor opprettet en av samtidige forekomster en økt med den avtalte nøkkelen for applikasjonen. Først når økten er utgitt, kan prosessen starte på nytt, og en ny forekomst kan bli leder.

5. Konklusjon

I denne artikkelen viste vi grunnleggende om Leadership Election i applikasjoner med høy ytelse med flere forekomster. Vi demonstrerte hvordan øktadministrasjon og KV-butikkfunksjoner i Consul kan bidra til å skaffe seg låsen og velge leder.

Som alltid er koden tilgjengelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found