Sticky Session with Docker Swarm (CE) na Debianu 9

Uvod

Docker Swarm pretvara vaše pojedinačne poslužitelje u klaster računala; olakšava skaliranje, visoku dostupnost i balansiranje opterećenja. Swarm balansator opterećenja implementira kružnu strategiju uravnoteženja opterećenja, a to bi moglo ometati ispravno funkcioniranje (naslijeđenih) aplikacija s stanjem koje zahtijevaju neki oblik ljepljivih sesija kako bi se omogućilo visokodostupno postavljanje s višestrukim instancama. Docker Enterprise Edition podržava ljepljivu sesiju Layer-7, ali u ovom vodiču ćemo se usredotočiti na besplatnu (CE) verziju Dockera. Za implementaciju ljepljivih sesija koristit ćemo Traefik.

Preduvjeti

  • Najmanje dvije svježe implementirane i ažurirane instance Debiana 9 u istoj podmreži s omogućenim privatnim umrežavanjem
  • Docker CE instaliran na ovim instancama
  • Instance bi trebale biti dio istog roja i trebale bi moći međusobno komunicirati putem privatne mreže
  • Prethodno poznavanje Dockera i Docker Swarma
  • Nekorijenski korisnik s sudopravima (izborno, ali se preporuča ne koristiti root korisnika)

U ovom vodiču koristit ćemo dvije Vultr instance s privatnim IP adresama 192.168.0.100i 192.168.0.101. Oba su Docker Swarm manager čvorovi (što nije idealno za proizvodnju, ali dovoljno za ovaj tutorial).

Tko sam ja

Ovaj vodič koristi jwilder/whoamidocker sliku kao demo aplikaciju. Ovaj jednostavan spremnik će odgovoriti na REST poziv s imenom spremnika koji odgovara, što ga čini vrlo lakim za testiranje rade li ljepljive sesije. Ova se slika očito koristi samo u demo svrhe i treba je zamijeniti slikom vaše aplikacije.

Whoami-usluga je konfigurirana na sljedeći način:

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

Ako naknadno pogledamo curlwhoami REST krajnju točku na http://192.168.0.100/, možemo vidjeti kako radi kružno balansiranje opterećenja Docker Swarma:

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

Nema svrhe testirati ovo s modernim preglednicima poput Chromea ili Firefoxa jer su dizajnirani da održavaju veze na životu, a Docker Swarm balansator opterećenja će se prebaciti na drugi spremnik samo nakon svake nove veze. Ako to želite testirati s preglednikom, morat ćete pričekati najmanje 30 sekundi da se veza zatvori prije ponovnog osvježavanja.

Postavljanje Traefika

Traefik izvorno podržava Docker Swarm, može otkriti i registrirati ili deregistrirati kontejnere u hodu i komunicira s vašom aplikacijom preko interne mreže za prekrivanje. Traefik-u su potrebne neke informacije o vašoj aplikaciji prije nego što počne obrađivati ​​zahtjeve za nju. Ove informacije se Traefik-u pružaju dodavanjem oznaka vašoj Swarm usluzi:

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

Sljedeći popis opisuje što svaka oznaka znači:

  • traefik.docker.network : Docker overlay mreža, preko koje će Traefik komunicirati s vašom uslugom
  • traefik.port : priključak na kojem vaša usluga sluša (ovo je interno izloženi port, a ne objavljeni priključak)
  • traefik.frontend.rule: PathPrefix:/ veže korijen konteksta ' /' s ovom uslugom
  • traefik.backend.loadbalancer.stickiness : Omogućuje ljepljive sesije za ovu uslugu

Sada whoami-servicekada je konfiguriran s potrebnim oznakama, možemo dodati uslugu Traefik u roj:

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

Ova naredba radi dosta stvari odjednom, kao što je prikazano na sljedećem popisu:

  • --name traefik : Naziv naše nove Docker usluge je Traefik
  • -p8080:80: Objavljujemo Traefik's port 80to port 8080jer port 80već koristi naš whoami-servis
  • -p9090:8080 : Objavljujemo Traefikovo vlastito web sučelje za port 9090
  • --mount ... : Montiramo Docker Socket u spremnik tako da Traefik može pristupiti hostovom Docker runtime-u
  • --global : Želimo Traefik kontejnere na svakom čvoru upravitelja iz razloga visoke dostupnosti
  • --constraint 'node.role == manager': Želimo da se Traefik izvodi samo na čvorovima upravitelja jer radnički čvorovi ne mogu pružiti Traefik-u potrebne informacije. Na primjer, docker service lsna radnom čvoru ne radi, tako da Traefik ne bi mogao ni otkriti koje usluge se pokreću
  • --network whoaminet: Spojite Traefik na istu mrežu kao i naš whoami-service, inače se ne može spojiti na nju. Prethodno smo rekli Traefiku da se poveže s našom uslugom preko ove mreže s traefik.docker.networkoznakom
  • traefik : Recite docker-u da koristi najnoviju Traefik docker sliku za ovu uslugu
  • --docker --docker.swarmmode --docker.watch --web --loglevel=DEBUG: Argumenti naredbenog retka proslijeđeni izravno Traefik-u kako bi mu se omogućilo izvođenje u načinu Docker roja. DEBUGovdje je neobavezno, ali zanimljivo tijekom postavljanja i za ovaj vodič

Sve što je preostalo je otvoriti potrebne portove u Debian firewall:

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

Kako radi

Čim se Traefik pokrene, možete vidjeti u zapisnicima da Traefik otkriva dva whoamikontejnera. Također ispisuje naziv kolačića koji će koristiti za rukovanje ljepljivom sesijom:

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"

Ako se savijemo na, http://192.168.0.100:8080možemo vidjeti da je postavljen novi kolačić, _a49bc:

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

Ako u sljedećim pozivima ovaj kolačić pošaljemo Traefiku, uvijek ćemo biti proslijeđeni u isti spremnik:

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

Kolačić ne sadrži ništa osim interne IP adrese spremnika na koji Traefik treba poslati zahtjev. Ako promijenite vrijednost kolačića u http://10.0.0.4:8000, tada bi zahtjev zapravo bio proslijeđen drugom spremniku. Ako se kolačić nikada ne bi ponovno poslao Traefiku, tada ljepljiva sesija neće raditi i zahtjevi će biti uravnoteženi između spremnika aplikacije i Traefik spremnika.

To je sve što je potrebno za postavljanje Layer 7 Sticky Sessions u Docker CE na Debianu 9.


Instalirajte Rancher OS putem iPXE

Instalirajte Rancher OS putem iPXE

Rancher OS je vrlo lagana distribucija Linuxa izgrađena oko Dockera. Sam OS teži oko 20MB. Ovaj vodič će vas pokrenuti i pokrenuti

Instalacija docker-compose na CoreOS

Instalacija docker-compose na CoreOS

Ovaj članak objašnjava kako instalirati docker-compose na CoreOS. U CoreOS-u, /usr/ mapa je nepromjenjiva pa je standardna /usr/local/bin putanja nedostupna za

Instalirajte Docker CE na Ubuntu 18.04

Instalirajte Docker CE na Ubuntu 18.04

Uvod Docker je aplikacija koja nam omogućuje implementaciju programa koji se pokreću kao spremnici. Napisana je u popularnom programskom jeziku Go

Stvorite Docker Swarm na Alpine Linuxu 3.9.0

Stvorite Docker Swarm na Alpine Linuxu 3.9.0

Uvod Ovaj vodič će vam pokazati kako stvoriti i konfigurirati Docker roj koristeći više Alpine Linux 3.9.0 poslužitelja i Portainera. Imajte na umu da

Postavite PHP aplikaciju pomoću Docker-compose

Postavite PHP aplikaciju pomoću Docker-compose

PHP aplikacije obično se sastoje od web poslužitelja, sustava relacijske baze podataka i samog tumača jezika. U ovom tutorialu bit ćemo poluga

Balans opterećenja s Dockerom

Balans opterećenja s Dockerom

Kada izvodite web-aplikaciju, obično želite maksimalno iskoristiti svoje resurse bez potrebe da konvertirate svoj softver za korištenje višenitnog rada o

Postavite Node.js aplikaciju pomoću Dockera

Postavite Node.js aplikaciju pomoću Dockera

Ovaj članak će vam pokazati kako implementirati svoju Node aplikaciju unutar Docker spremnika. Napomena: Ovaj vodič pretpostavlja da imate instaliran i pročitan Docker

Instaliranje Dockera na CentOS 7

Instaliranje Dockera na CentOS 7

Korištenje drugog sustava? Docker je aplikacija koja omogućuje implementaciju softvera unutar virtualnih spremnika. Napisano je u Go programu

Instalacija Docker CE na Debian 9

Instalacija Docker CE na Debian 9

Korištenje drugog sustava? Uvod Docker je aplikacija koja omogućuje implementaciju softvera unutar virtualnih spremnika. Napisano je u G

Započnite sa SQL Serverom 2017 (MS-SQL) na CentOS 7 uz Docker

Započnite sa SQL Serverom 2017 (MS-SQL) na CentOS 7 uz Docker

Preduvjeti Docker engine 1.8+. Najmanje 4 GB prostora na disku. Minimalno 4 GB RAM-a. Korak 1. Instalirajte Docker Da biste instalirali SQL-Server, potrebno je Docker

Sticky Session with Docker Swarm (CE) na Debianu 9

Sticky Session with Docker Swarm (CE) na Debianu 9

Korištenje drugog sustava? Uvod Docker Swarm pretvara vaše pojedinačne poslužitelje u klaster računala; olakšavanje skaliranja, visoka dostupnost an

Dva Docker grafička alata za upravljanje: DockerUI i Shipyard

Dva Docker grafička alata za upravljanje: DockerUI i Shipyard

Uz pomoć aplikacije Vultr Docker, možete jednostavno postaviti Docker na svoju instancu poslužitelja Vultr. U međuvremenu, možete olakšati zadatak upravljanja Dockerom

Instalirajte Rancher Server na RancherOS

Instalirajte Rancher Server na RancherOS

Pregled RancherOS je nevjerojatno lagan operativni sustav (samo oko 60 MB) koji pokreće sistemski Docker demon kao PID 0 za pokretanje sistemskih usluga

Instalirajte Rancher na Ubuntu 16.04

Instalirajte Rancher na Ubuntu 16.04

Korištenje drugog sustava? Uvod Rancher je platforma otvorenog koda za pokretanje kontejnera i izgradnju privatnog kontejnerskog servisa. Rančer je baza

Postavite Sentry putem Dockera na Ubuntu 16.04

Postavite Sentry putem Dockera na Ubuntu 16.04

Korištenje drugog sustava? Uvod Sentry je rješenje otvorenog koda za praćenje pogrešaka. Sentry prati iznimke i druge korisne poruke

Instaliranje Dockera na Ubuntu 14.04

Instaliranje Dockera na Ubuntu 14.04

Korištenje drugog sustava? Docker je aplikacija koja omogućuje implementaciju programa koji se pokreću kao kontejneri. Napisano je u popularnom Go programu

Sigurno implementirajte i upravljajte LXC spremnicima na Ubuntu 14.04

Sigurno implementirajte i upravljajte LXC spremnicima na Ubuntu 14.04

LXC spremnici (Linux spremnici) su značajka operacijskog sustava u Linuxu koja se može koristiti za pokretanje više izoliranih Linux sustava na jednom hostu. Thes

Uspon strojeva: primjene AI u stvarnom svijetu

Uspon strojeva: primjene AI u stvarnom svijetu

Umjetna inteligencija nije u budućnosti, ovdje je upravo u sadašnjosti. U ovom blogu Pročitajte kako su aplikacije umjetne inteligencije utjecale na različite sektore.

DDOS napadi: kratak pregled

DDOS napadi: kratak pregled

Jeste li i vi žrtva DDOS napada i zbunjeni ste metodama prevencije? Pročitajte ovaj članak kako biste riješili svoje upite.

Jeste li se ikada zapitali kako hakeri zarađuju novac?

Jeste li se ikada zapitali kako hakeri zarađuju novac?

Možda ste čuli da hakeri zarađuju mnogo novca, ali jeste li se ikada zapitali kako zarađuju toliki novac? raspravimo.

Revolucionarni Googleovi izumi koji će vam olakšati život.

Revolucionarni Googleovi izumi koji će vam olakšati život.

Želite li vidjeti revolucionarne izume Googlea i kako su ti izumi promijenili život svakog čovjeka danas? Zatim čitajte na blogu kako biste vidjeli Googleove izume.

Friday Essential: Što se dogodilo s automobilima s umjetnom inteligencijom?

Friday Essential: Što se dogodilo s automobilima s umjetnom inteligencijom?

Koncept samovozećih automobila koji će krenuti na ceste uz pomoć umjetne inteligencije san je koji već neko vrijeme imamo. No, unatoč nekoliko obećanja, nigdje ih nema. Pročitajte ovaj blog kako biste saznali više…

Tehnološka singularnost: daleka budućnost ljudske civilizacije?

Tehnološka singularnost: daleka budućnost ljudske civilizacije?

Kako se znanost razvija velikom brzinom, preuzimajući mnoge naše napore, raste i rizik da se podvrgnemo neobjašnjivoj Singularnosti. Pročitajte što bi za nas mogla značiti singularnost.

Evolucija pohrane podataka – Infografika

Evolucija pohrane podataka – Infografika

Metode pohrane podataka su se razvijale možda od rođenja podataka. Ovaj blog pokriva evoluciju pohrane podataka na temelju infografike.

Funkcionalnosti slojeva referentne arhitekture velikih podataka

Funkcionalnosti slojeva referentne arhitekture velikih podataka

Pročitajte blog kako biste na najjednostavniji način upoznali različite slojeve u arhitekturi velikih podataka i njihove funkcionalnosti.

6 nevjerojatnih prednosti posjedovanja pametnih kućnih uređaja u našim životima

6 nevjerojatnih prednosti posjedovanja pametnih kućnih uređaja u našim životima

U ovom digitalnom svijetu, pametni kućni uređaji postali su ključni dio života. Evo nekoliko nevjerojatnih prednosti pametnih kućnih uređaja o tome kako naš život čine vrijednim življenja i jednostavnijim.

Ažuriranje dodataka macOS Catalina 10.15.4 uzrokuje više problema nego što ih rješava

Ažuriranje dodataka macOS Catalina 10.15.4 uzrokuje više problema nego što ih rješava

Nedavno je Apple izdao macOS Catalina 10.15.4 dodatak ažuriranju kako bi riješio probleme, ali čini se da ažuriranje uzrokuje više problema koji dovode do zalijevanja mac strojeva. Pročitajte ovaj članak da biste saznali više