Sticky Session With Docker Swarm (CE) på Debian 9

Introduksjon

Docker Swarm gjør dine individuelle servere til en klynge av datamaskiner; tilrettelegging for skalering, høy tilgjengelighet og lastbalansering. Swarm load-balancer implementerer en round-robin lastbalanseringsstrategi, og dette kan forstyrre riktig funksjon av (legacy) stateful applikasjoner som krever en eller annen form for klebrige økter for å tillate et høyt tilgjengelig oppsett med flere forekomster. Docker Enterprise Edition støtter Layer-7 sticky session, men i denne veiledningen vil vi fokusere på den gratis (CE) versjonen av Docker. For å implementere klissete økter bruker vi Traefik.

Forutsetninger

  • Minst to nylig distribuerte og oppdaterte Debian 9-forekomster i samme undernett med privat nettverk aktivert
  • Docker CE installert på disse forekomstene
  • Forekomstene skal være en del av samme Swarm og skal kunne kommunisere med hverandre over det private nettverket
  • Forkunnskaper om Docker og Docker Swarm
  • En ikke-root-bruker med sudorettigheter (valgfritt, men det anbefales på det sterkeste å ikke bruke root-brukeren)

I denne opplæringen skal vi bruke to Vultr-forekomster med private IP-adresser 192.168.0.100og 192.168.0.101. Begge er Docker Swarm-managernoder (som ikke er ideell for produksjon, men nok for denne opplæringen).

Hvem er jeg

Denne opplæringen bruker jwilder/whoamidocker-bildet som et demoprogram. Denne enkle beholderen vil svare på et REST-anrop med navnet på den svare beholderen, noe som gjør det veldig enkelt å teste om de klissete øktene fungerer. Dette bildet brukes åpenbart kun til demoformål og må erstattes av ditt eget programs bilde.

Whoami-tjenesten er konfigurert som følger:

sudo docker network create whoaminet -d overlay
sudo docker service create --name whoami-service --mode global --network whoaminet --publish "80:8000"  jwilder/whoami
sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT

Hvis vi deretter curlwhoami REST-endepunktet på http://192.168.0.100/, kan vi se round-robin lastbalansering av Docker Swarm på jobb:

curl http://192.168.0.100
I'm a6a8c9294fc3
curl http://192.168.0.100
I'm ae9d1763b4ad
curl http://192.168.0.100
I'm a6a8c9294fc3
curl http://192.168.0.100
I'm ae9d1763b4ad
curl http://192.168.0.100
I'm a6a8c9294fc3

Det nytter ikke å teste dette med moderne nettlesere som Chrome eller Firefox fordi de er designet for å holde forbindelsene i live, og Docker Swarm load-balancer vil bare bytte til den andre beholderen ved hver ny tilkobling. Hvis du vil teste dette med en nettleser, må du vente i minst 30 sekunder før tilkoblingen lukkes før du oppdaterer igjen.

Sette opp Traefik

Traefik støtter Docker Swarm, den kan oppdage og registrere eller avregistrere containere mens du er på farten, og den kommuniserer med applikasjonen din over det interne overleggsnettverket. Traefik trenger litt informasjon om søknaden din før den kan begynne å håndtere forespørsler om den. Denne informasjonen gis til Traefik ved å legge til etiketter til Swarm-tjenesten din:

sudo docker service update --label-add "traefik.docker.network=whoaminet" --label-add "traefik.port=8000" --label-add "traefik.frontend.rule=PathPrefix:/" --label-add "traefik.backend.loadbalancer.stickiness=true" whoami-service

Følgende liste beskriver hva hver etikett betyr:

  • traefik.docker.network : Docker-overleggsnettverket, som Traefik vil kommunisere med tjenesten din over
  • traefik.port : Porten som tjenesten din lytter til (dette er den internt eksponerte porten, ikke den publiserte porten)
  • traefik.frontend.rule: PathPrefix:/ binder kontekstroten ' /' til denne tjenesten
  • traefik.backend.loadbalancer.stickiness : Aktiverer selvklebende økter for denne tjenesten

Nå som whoami-serviceer konfigurert med de nødvendige etikettene, kan vi legge til Traefik-tjenesten til svermen:

sudo docker service create --name traefik -p8080:80 -p9090:8080 --mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock --mode=global --constraint 'node.role == manager' --network whoaminet traefik --docker --docker.swarmmode --docker.watch --web --loglevel=DEBUG

Denne kommandoen gjør ganske mange ting på en gang, som vist i følgende liste:

  • --name traefik : Vår nye Docker-tjeneste heter Traefik
  • -p8080:80: Vi publiserer Traefiks port 80til port 8080fordi port 80allerede er i bruk av vår whoami-tjeneste
  • -p9090:8080 : Vi publiserer Traefiks eget webgrensesnitt til port 9090
  • --mount ... : Vi monterer Docker Socket inn i containeren slik at Traefik kan få tilgang til vertens Docker runtime
  • --global : Vi ønsker Traefik-beholdere på hver managernode av høye tilgjengelighetsgrunner
  • --constraint 'node.role == manager': Vi vil bare at Traefik skal kjøre på ledernoder fordi arbeidernoder ikke kan gi Traefik den informasjonen den trenger. For eksempel, docker service lspå en arbeider node fungerer ikke, så Traefik ville ikke engang kunne oppdage hvilke tjenester som kjører
  • --network whoaminet: Koble Traefik til samme nettverk som vår whoami-service, ellers kan den ikke koble til den. Vi har tidligere fortalt Traefik å koble til tjenesten vår over dette nettverket med traefik.docker.networketiketten
  • traefik : Be docker om å bruke det nyeste Traefik docker-bildet for denne tjenesten
  • --docker --docker.swarmmode --docker.watch --web --loglevel=DEBUG: Kommandolinjeargumenter sendt direkte til Traefik for å la den kjøre i Docker-svermmodus. DEBUGer valgfritt her, men interessant under oppsett, og for denne opplæringen

Alt som gjenstår å gjøre er å åpne de nødvendige portene i Debian-brannmuren:

sudo iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT
sudo iptables -I INPUT 1 -p tcp --dport 9090 -j ACCEPT

Hvordan det fungerer

Så snart Traefik starter opp, kan du se i loggene at Traefik oppdager de to whoamicontainerne. Den sender også ut informasjonskapselnavnet som den vil bruke til å håndtere den klissete økten:

time="2018-11-25T13:17:30Z" level=debug msg="Configuration received from provider docker: {\"backends\":{\"backend-whoami-service\":{\"servers\":{\"server-whoami-service-1-a179b2e38a607b1127e5537c2e614b05\":{\"url\":\"http://10.0.0.5:8000\",\"weight\":1},\"server-whoami-service-2-df8a622478a5a709fcb23c50e689b5b6\":{\"url\":\"http://10.0.0.4:8000\",\"weight\":1}},\"loadBalancer\":{\"method\":\"wrr\",\"stickiness\":{}}}},\"frontends\":{\"frontend-PathPrefix-0\":{\"entryPoints\":[\"http\"],\"backend\":\"backend-whoami-service\",\"routes\":{\"route-frontend-PathPrefix-0\":{\"rule\":\"PathPrefix:/\"}},\"passHostHeader\":true,\"priority\":0,\"basicAuth\":null}}}"
time="2018-11-25T13:17:30Z" level=debug msg="Wiring frontend frontend-PathPrefix-0 to entryPoint http"
time="2018-11-25T13:17:30Z" level=debug msg="Creating backend backend-whoami-service"
time="2018-11-25T13:17:30Z" level=debug msg="Adding TLSClientHeaders middleware for frontend frontend-PathPrefix-0"
time="2018-11-25T13:17:30Z" level=debug msg="Creating load-balancer wrr"
time="2018-11-25T13:17:30Z" level=debug msg="Sticky session with cookie _a49bc"
time="2018-11-25T13:17:30Z" level=debug msg="Creating server server-whoami-service-1-a179b2e38a607b1127e5537c2e614b05 at http://10.0.0.5:8000 with weight 1"
time="2018-11-25T13:17:30Z" level=debug msg="Creating server server-whoami-service-2-df8a622478a5a709fcb23c50e689b5b6 at http://10.0.0.4:8000 with weight 1"
time="2018-11-25T13:17:30Z" level=debug msg="Creating route route-frontend-PathPrefix-0 PathPrefix:/"
time="2018-11-25T13:17:30Z" level=info msg="Server configuration reloaded on :80"
time="2018-11-25T13:17:30Z" level=info msg="Server configuration reloaded on :8080"

Hvis vi krøller til kan http://192.168.0.100:8080vi se at en ny informasjonskapsel, _a49bc, er satt:

curl -v http://192.168.0.100:8080
* About to connect() to 192.168.0.100 port 8080 (#0)
*   Trying 192.168.0.100...
* Connected to 192.168.0.100 (192.168.0.100) port 8080 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 192.168.0.100:8080
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Length: 17
< Content-Type: text/plain; charset=utf-8
< Date: Sun, 25 Nov 2018 13:18:40 GMT
< Set-Cookie: _a49bc=http://10.0.0.5:8000; Path=/
<
I'm a6a8c9294fc3
* Connection #0 to host 192.168.0.100 left intact

Hvis vi ved senere samtaler sender denne informasjonskapselen til Traefik, vil vi alltid bli videresendt til samme beholder:

curl http://192.168.0.100:8080 --cookie "_a49bc=http://10.0.0.5:8000"
I'm a6a8c9294fc3
curl http://192.168.0.100:8080 --cookie "_a49bc=http://10.0.0.5:8000"
I'm a6a8c9294fc3
curl http://192.168.0.100:8080 --cookie "_a49bc=http://10.0.0.5:8000"
I'm a6a8c9294fc3
curl http://192.168.0.100:8080 --cookie "_a49bc=http://10.0.0.5:8000"
I'm a6a8c9294fc3

Informasjonskapselen inneholder ingenting annet enn den interne IP-adressen til beholderen som Traefik skal sende for å be om. Hvis du endrer til verdi for informasjonskapsler til http://10.0.0.4:8000, vil forespørselen i praksis bli videresendt til den andre beholderen. Hvis informasjonskapselen aldri skulle sendes til Traefik på nytt, vil ikke den klebrige økten fungere og forespørsler vil balanseres mellom applikasjonens beholdere og Traefik-beholderne.

Det er alt som trengs for å sette opp Layer 7 Sticky Sessions i Docker CE på Debian 9.


Slik sjekker du Hyper-V-beholdere på Windows 10 Insider

Slik sjekker du Hyper-V-beholdere på Windows 10 Insider

Microsoft har forklart i et nytt blogginnlegg hvordan Windows Insiders kan teste Hyper-V-beholdere på Windows 10, en ny virtualiseringsløsning som lar applikasjoner kjøre uten å påvirke resten av operativsystemet ditt.

Installer Rancher OS via iPXE

Installer Rancher OS via iPXE

Rancher OS er en veldig lett Linux-distribusjon bygget rundt Docker. Selve operativsystemet veier rundt 20 MB. Denne opplæringen vil få deg i gang med

På CoreOS, konfigurer ditt eget Docker-register

På CoreOS, konfigurer ditt eget Docker-register

Vi kjenner og elsker alle Docker, en plattform for å lage, administrere og distribuere applikasjonsbeholdere på tvers av flere maskiner. Docker Inc. tilbyr en tjeneste t

Installerer docker-compose på CoreOS

Installerer docker-compose på CoreOS

Denne artikkelen forklarer hvordan du installerer docker-compose på CoreOS. I CoreOS er /usr/-mappen uforanderlig, så standard /usr/local/bin-banen er utilgjengelig for

Installer Docker CE på Ubuntu 18.04

Installer Docker CE på Ubuntu 18.04

Innledning Docker er en applikasjon som lar oss distribuere programmer som kjøres som containere. Den ble skrevet på det populære programmeringsspråket Go

Lag en Docker Swarm på Alpine Linux 3.9.0

Lag en Docker Swarm på Alpine Linux 3.9.0

Introduksjon Denne guiden viser deg hvordan du oppretter og konfigurerer en Docker-sverm ved å bruke flere Alpine Linux 3.9.0-servere og Portainer. Vær oppmerksom på det

Distribuer en PHP-applikasjon ved å bruke Docker-compose

Distribuer en PHP-applikasjon ved å bruke Docker-compose

PHP-applikasjoner er vanligvis sammensatt av en webserver, et relasjonsdatabasesystem og selve språktolken. I denne opplæringen vil vi være leveragin

Lastbalanse med Docker

Lastbalanse med Docker

Når du kjører en nettapplikasjon, vil du vanligvis få mest mulig ut av ressursene dine uten å måtte konvertere programvaren til å bruke multithreading o

Distribuer en Node.js-applikasjon ved hjelp av Docker

Distribuer en Node.js-applikasjon ved hjelp av Docker

Denne artikkelen vil vise deg hvordan du distribuerer Node-applikasjonen din i en Docker-beholder. Merk: Denne opplæringen forutsetter at du har Docker installert og lest

Distribuer Kubernetes med Kubeadm på CentOS 7

Distribuer Kubernetes med Kubeadm på CentOS 7

Oversikt Denne artikkelen er ment å hjelpe deg med å få en Kubernetes-klynge i gang med kubeadm på kort tid. Denne veiledningen vil distribuere to servere på

Installere Docker CE på Debian 9

Installere Docker CE på Debian 9

Bruker du et annet system? Introduksjon Docker er en applikasjon som tillater distribusjon av programvare i virtuelle containere. Det ble skrevet i G

Kom i gang med SQL Server 2017 (MS-SQL) på CentOS 7 med Docker

Kom i gang med SQL Server 2017 (MS-SQL) på CentOS 7 med Docker

Forutsetninger Docker-motor 1.8+. Minimum 4 GB diskplass. Minimum 4 GB RAM. Trinn 1. Installer Docker For å installere SQL-Server må Docker mus

Sticky Session With Docker Swarm (CE) på Debian 9

Sticky Session With Docker Swarm (CE) på Debian 9

Bruker du et annet system? Innledning Docker Swarm gjør dine individuelle servere til en klynge av datamaskiner; lette skalering, høy tilgjengelighet og

Installer Rancher Server på RancherOS

Installer Rancher Server på RancherOS

Oversikt RancherOS er et utrolig lett operativsystem (bare ca. 60 MB) som kjører en system Docker-demon som PID 0 for å kjøre systemtjenester

Installer Rancher på Ubuntu 16.04

Installer Rancher på Ubuntu 16.04

Bruker du et annet system? Introduksjon Rancher er en åpen kildekode-plattform for å kjøre containere og bygge en privat containertjeneste. Rancher er base

Sett opp Sentry via Docker på Ubuntu 16.04

Sett opp Sentry via Docker på Ubuntu 16.04

Bruker du et annet system? Innledning Sentry er en åpen kildekode-løsning for feilsporing. Sentry sporer unntak og andre nyttige meldinger

Slik bruker du Docker: Opprett din første Docker-beholder

Slik bruker du Docker: Opprett din første Docker-beholder

Denne opplæringen forklarer det grunnleggende for å komme i gang med Docker. Jeg antar at du allerede har Docker installert. Trinnene i denne opplæringen vil fungere på en

Installere Docker på Ubuntu 14.04

Installere Docker på Ubuntu 14.04

Bruker du et annet system? Docker er en applikasjon som gjør det mulig å distribuere programmer som kjøres som containere. Det ble skrevet i det populære Go-programmet

Sikker distribusjon og administrering av LXC-beholdere på Ubuntu 14.04

Sikker distribusjon og administrering av LXC-beholdere på Ubuntu 14.04

LXC-beholdere (Linux-beholdere) er en operativsystemfunksjon i Linux som kan brukes til å kjøre flere isolerte Linux-systemer på en enkelt vert. Thes

The Rise of Machines: Real World Applications of AI

The Rise of Machines: Real World Applications of AI

Kunstig intelligens er ikke i fremtiden, det er her akkurat i nåtiden I denne bloggen Les hvordan kunstig intelligens-applikasjoner har påvirket ulike sektorer.

DDOS-angrep: en kort oversikt

DDOS-angrep: en kort oversikt

Er du også et offer for DDOS-angrep og forvirret over forebyggingsmetodene? Les denne artikkelen for å løse spørsmålene dine.

Har du noen gang lurt på hvordan hackere tjener penger?

Har du noen gang lurt på hvordan hackere tjener penger?

Du har kanskje hørt at hackere tjener mye penger, men har du noen gang lurt på hvordan tjener de den slags penger? la oss diskutere.

Revolusjonerende oppfinnelser fra Google som vil gjøre livet ditt enkelt.

Revolusjonerende oppfinnelser fra Google som vil gjøre livet ditt enkelt.

Vil du se revolusjonerende oppfinnelser fra Google og hvordan disse oppfinnelsene forandret livet til alle mennesker i dag? Les deretter til bloggen for å se oppfinnelser fra Google.

Fredag ​​Essential: Hva skjedde med AI-drevne biler?

Fredag ​​Essential: Hva skjedde med AI-drevne biler?

Konseptet med selvkjørende biler som skal ut på veiene ved hjelp av kunstig intelligens er en drøm vi har hatt en stund nå. Men til tross for flere løfter, er de ingen steder å se. Les denne bloggen for å lære mer...

Teknologisk singularitet: en fjern fremtid for menneskelig sivilisasjon?

Teknologisk singularitet: en fjern fremtid for menneskelig sivilisasjon?

Ettersom vitenskapen utvikler seg raskt og tar over mye av innsatsen vår, øker også risikoen for å utsette oss for en uforklarlig singularitet. Les hva singularitet kan bety for oss.

Evolusjon av datalagring – infografikk

Evolusjon av datalagring – infografikk

Lagringsmetodene for dataene har vært i utvikling kan være siden fødselen av dataene. Denne bloggen dekker utviklingen av datalagring på grunnlag av en infografikk.

Funksjonaliteter til Big Data Reference Architecture Layers

Funksjonaliteter til Big Data Reference Architecture Layers

Les bloggen for å kjenne ulike lag i Big Data Architecture og deres funksjoner på den enkleste måten.

6 fantastiske fordeler ved å ha smarte hjemmeenheter i livene våre

6 fantastiske fordeler ved å ha smarte hjemmeenheter i livene våre

I denne digitaldrevne verden har smarthusenheter blitt en avgjørende del av livet. Her er noen fantastiske fordeler med smarthusenheter om hvordan de gjør livet vårt verdt å leve og enklere.

macOS Catalina 10.15.4 tilleggsoppdatering forårsaker flere problemer enn å løse

macOS Catalina 10.15.4 tilleggsoppdatering forårsaker flere problemer enn å løse

Nylig lanserte Apple macOS Catalina 10.15.4 en tilleggsoppdatering for å fikse problemer, men det ser ut til at oppdateringen forårsaker flere problemer som fører til muring av mac-maskiner. Les denne artikkelen for å lære mer