Sticky sesija ar Docker Swarm (CE) operētājsistēmā CentOS 7

Ievads

Docker Swarm pārvērš jūsu individuālos serverus par datoru kopu, atvieglojot mērogošanu, augstu pieejamību un slodzes līdzsvarošanu. Swarm slodzes līdzsvarotājs ievieš visaptverošu slodzes līdzsvarošanas stratēģiju, un tas var traucēt (mantoto) stāvokļu lietojumprogrammu pareizu darbību, kurām ir nepieciešamas zināmas fiksētas sesijas, lai nodrošinātu augstas pieejamības iestatīšanu ar vairākiem gadījumiem. Docker Enterprise Edition atbalsta Layer-7 lipīgo sesiju, taču šajā rokasgrāmatā mēs koncentrēsimies uz Docker bezmaksas (CE) versiju. Lai ieviestu lipīgās sesijas, mēs izmantosim Traefik.

Priekšnoteikumi

  • Vismaz divi svaigi izvietoti un atjaunināti CentOS 7 gadījumi vienā apakštīklā ar iespējotu privāto tīklu
  • Šajos gadījumos instalēts Docker CE
  • Gadījumiem ir jābūt viena un tā paša spieta daļai un jāspēj sazināties vienam ar otru, izmantojot privāto tīklu
  • Priekšzināšanas par Docker un Docker Swarm
  • Lietotājs, kas nav administrators ar sudo tiesībām (neobligāti, taču ļoti ieteicams neizmantot root lietotāju)

Šajā apmācībā mēs izmantosim divus Vultr gadījumus ar privātām IP adresēm 192.168.0.100 un 192.168.0.101, un tie abi ir Docker Swarm pārvaldnieka mezgli (kas nav ideāli piemērots ražošanai, taču pietiek šai apmācībai).

Kas es esmu

Šajā apmācībā jwilder/whoamikā demonstrācijas lietojumprogramma tiek izmantots docker attēls. Šis vienkāršais konteiners atbildēs uz REST zvanu ar atbildīgā konteinera nosaukumu, padarot to ļoti viegli pārbaudīt, vai lipīgās sesijas darbojas. Šis attēls tiek izmantots tikai demonstrācijas nolūkos, un tas ir jāaizstāj ar jūsu lietojumprogrammas attēlu. Tas whoami-serviceir konfigurēts šādi:

sudo docker network create whoaminet -d overlay
sudo docker service create --name whoami-service --mode global --network whoaminet --publish "80:8000" jwilder/whoami
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --reload

Ja pēc curltam whoamiREST galapunktu izmantosim http://192.168.0.100/, mēs varam redzēt, ka darbojas Docker Swarm slodzes līdzsvarošana.

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

Nav jēgas to pārbaudīt ar modernām pārlūkprogrammām, piemēram, Chrome vai Firefox, jo tās ir paredzētas, lai uzturētu savienojumus (atvērtus), un Docker Swarm slodzes balansētājs pārslēgsies uz citu konteineru tikai pēc katra jauna savienojuma. Ja vēlaties to pārbaudīt pārlūkprogrammā, pirms atkārtotas atsvaidzināšanas ir jāgaida vismaz 30 sekundes, līdz savienojums tiks aizvērts.

Traefik iestatīšana

Traefik sākotnēji atbalsta Docker Swarm, tas var atklāt un reģistrēt vai atcelt konteinerus lidojumā, un tas sazinās ar jūsu lietojumprogrammu iekšējā pārklājuma tīklā. Traefik ir nepieciešama informācija par jūsu lietojumprogrammu, lai tas varētu sākt apstrādāt pieprasījumus. Šī informācija tiek nodrošināta Traefik, pievienojot etiķetes jūsu Swarm pakalpojumam.

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

Tālāk esošajā sarakstā ir aprakstīts katras etiķetes nozīme.

  • traefik.docker.network: Docker pārklājuma tīkls, kurā Traefik sazināsies ar jūsu pakalpojumu
  • traefik.port: ports, kurā klausās jūsu pakalpojums (šis ir iekšēji atklātais ports, nevis publicētais ports)
  • traefik.frontend.rule: PathPrefix:/saista konteksta sakni /šim pakalpojumam.
  • traefik.backend.loadbalancer.stickiness: šim pakalpojumam iespējo fiksētās sesijas

Tagad, kad whoami-serviceir konfigurēts ar nepieciešamajām etiķetēm, mēs varam pievienot Traefik pakalpojumu baram:

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

Šī komanda vienlaikus veic diezgan daudzas lietas. Tālāk esošajā sarakstā tiks paskaidrots sīkāk:

  • --name traefik: Mūsu jaunā Docker pakalpojuma nosaukums ir traefik
  • -p8080:80: Mēs publicējam Traefik portu 80portu 8080(portu 80jau izmanto mūsu whoami-service)
  • -p9090:8080: Mēs publicējam paša Traefik tīmekļa saskarni portam 9090
  • --mount ...: mēs uzstādām Docker Socket konteinerā, lai Traefik varētu piekļūt resursdatora Docker izpildlaikam
  • --global: Mēs vēlamies Traefik konteinerus katrā pārvaldnieka mezglā augstas pieejamības iemeslu dēļ
  • --constraint 'node.role == manager': mēs vēlamies, lai Traefik darbotos tikai pārvaldnieka mezglos, jo darbinieku mezgli nevar nodrošināt Traefik tai nepieciešamo informāciju. Piemēram, docker service lsdarbinieka mezglā nedarbojas, tāpēc Traefik pat nevarētu atklāt, kādi pakalpojumi darbojas
  • --network whoaminet: savieno Traefik ar to pašu tīklu kā mūsu whoami-service, pretējā gadījumā viņi nevar izveidot savienojumu. Mēs iepriekš teicām Traefik izveidot savienojumu ar mūsu pakalpojumu, izmantojot šo tīklu ar traefik.docker.networketiķeti
  • traefik: Pastāstiet dokerim šim pakalpojumam izmantot jaunāko Traefik docker attēlu
  • --docker --docker.swarmmode --docker.watch --web --loglevel=DEBUG: Komandrindas argumenti tiek tieši nodoti Traefik, lai tas varētu darboties Docker spieta režīmā ( --loglevel=DEBUGšeit nav obligāti, taču interesanti iestatīšanas laikā un šajā apmācībā)

Atliek tikai atvērt CentOS ugunsmūrī nepieciešamos portus:

sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --zone=public --add-port=9090/tcp --permanent
sudo firewall-cmd --reload

Kā tas strādā

Tiklīdz Traefik sāk darboties, žurnālos var redzēt, ka Traefik atklāj abus whoamikonteinerus. Tas arī izvada sīkfaila nosaukumu, ko tas izmantos lipīgās sesijas apstrādei:

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"

Ja pievēršamies, http://192.168.0.100:8080mēs varam redzēt, ka _a49bcir iestatīts jauns sīkfails :

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

Ja turpmākajos zvanos mēs nosūtīsim šo sīkfailu Traefik, mēs vienmēr tiksim pārsūtīti uz to pašu konteineru:

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

Sīkdatnē ir ietverta tikai konteinera iekšējā (pārklājuma) IP adrese, uz kuru Traefik ir jānosūta pieprasījums. Ja maināt sīkfaila vērtību uz, http://10.0.0.4:8000pieprasījums faktiski tiks pārsūtīts uz citu konteineru. Ja sīkfails nekad netiktu atkārtoti nosūtīts uz Traefik, lipīgā sesija nedarbosies un pieprasījumi tiks līdzsvaroti starp lietojumprogrammas konteineriem un Traefik konteineriem.

Tas ir viss, kas nepieciešams, lai iestatītu Layer 7 Sticky Sessions programmā Docker CE operētājsistēmā CentOS 7.


Instalējiet Plesk operētājsistēmā CentOS 7

Instalējiet Plesk operētājsistēmā CentOS 7

Vai izmantojat citu sistēmu? Plesk ir patentēts tīmekļa mitinātāja vadības panelis, kas ļauj lietotājiem administrēt savas personīgās un/vai klientu vietnes, datu bāzes

Kā instalēt Squid starpniekserveri CentOS

Kā instalēt Squid starpniekserveri CentOS

Squid ir populāra bezmaksas Linux programma, kas ļauj izveidot pāradresācijas tīmekļa starpniekserveri. Šajā rokasgrāmatā jūs redzēsit, kā instalēt Squid uz CentOS, lai jūs pārvērstu

Kā instalēt Lighttpd (LLMP Stack) operētājsistēmā CentOS 6

Kā instalēt Lighttpd (LLMP Stack) operētājsistēmā CentOS 6

Ievads Lighttpd ir Apache dakša, kuras mērķis ir daudz mazāk resursietilpīgs. Tas ir viegls, tāpēc arī tā nosaukums ir diezgan vienkārši lietojams. Instalēšana

Statiskā tīkla un IPv6 konfigurēšana operētājsistēmā CentOS 7

Statiskā tīkla un IPv6 konfigurēšana operētājsistēmā CentOS 7

VULTR nesen veica izmaiņas, un tagad visam vajadzētu darboties labi, ja ir iespējots NetworkManager. Ja vēlaties atspējot

Icinga2 modificēšana, lai izmantotu galveno/klienta modeli operētājsistēmā CentOS 6 vai CentOS 7

Icinga2 modificēšana, lai izmantotu galveno/klienta modeli operētājsistēmā CentOS 6 vai CentOS 7

Icinga2 ir spēcīga uzraudzības sistēma, un, ja to izmanto galvenā klienta modelī, tā var aizstāt vajadzību pēc NRPE balstītām uzraudzības pārbaudēm. Meistars-klients

Kā instalēt Apache Cassandra 3.11.x operētājsistēmā CentOS 7

Kā instalēt Apache Cassandra 3.11.x operētājsistēmā CentOS 7

Vai izmantojat citu sistēmu? Apache Cassandra ir bezmaksas un atvērtā koda NoSQL datu bāzes pārvaldības sistēma, kas ir izstrādāta, lai nodrošinātu mērogojamību, hig.

Kā instalēt Microweber operētājsistēmā CentOS 7

Kā instalēt Microweber operētājsistēmā CentOS 7

Vai izmantojat citu sistēmu? Microweber ir atvērtā koda vilkšanas un nomešanas CMS un tiešsaistes veikals. Microweber pirmkods tiek mitināts vietnē GitHub. Šī rokasgrāmata jums parādīs

Kā instalēt Mattermost 4.1 operētājsistēmā CentOS 7

Kā instalēt Mattermost 4.1 operētājsistēmā CentOS 7

Vai izmantojat citu sistēmu? Mattermost ir atvērtā pirmkoda, pašmitināta alternatīva Slack SAAS ziņojumapmaiņas pakalpojumam. Citiem vārdiem sakot, izmantojot Mattermost, jūs apm

Minecraft serveru tīkla izveide ar BungeeCord operētājsistēmā Debian 8, Debian 9 vai CentOS 7

Minecraft serveru tīkla izveide ar BungeeCord operētājsistēmā Debian 8, Debian 9 vai CentOS 7

Kas jums būs nepieciešams Vultr VPS ar vismaz 1 GB RAM. SSH piekļuve (ar root/administratora tiesībām). 1. darbība: BungeeCord instalēšana Vispirms vispirms

Ļauj šifrēt vietnē Plesk

Ļauj šifrēt vietnē Plesk

Plesk vadības panelī ir ļoti jauka Lets Encrypt integrācija. Lets Encrypt ir viens no vienīgajiem SSL nodrošinātājiem, kas pilnībā izsniedz sertifikātus

Ļauj šifrēt cPanel

Ļauj šifrēt cPanel

Lets Encrypt ir sertifikātu iestāde, kas nodrošina SSL sertifikātus bez maksas. cPanel ir izveidojis glītu integrāciju, lai jūs un jūsu klients

Kā instalēt Concrete5 operētājsistēmā CentOS 7

Kā instalēt Concrete5 operētājsistēmā CentOS 7

Vai izmantojat citu sistēmu? Concrete5 ir atvērtā pirmkoda CMS, kas piedāvā daudzas atšķirīgas un noderīgas funkcijas, lai palīdzētu redaktoriem viegli izveidot saturu.

Kā instalēt pārskata paneli sistēmā CentOS 7

Kā instalēt pārskata paneli sistēmā CentOS 7

Vai izmantojat citu sistēmu? Pārskatīšanas padome ir bezmaksas atvērtā pirmkoda rīks pirmkoda, dokumentācijas, attēlu un daudz ko citu pārskatīšanai. Tā ir tīmekļa programmatūra

Iestatiet HTTP autentifikāciju, izmantojot Nginx operētājsistēmā CentOS 7

Iestatiet HTTP autentifikāciju, izmantojot Nginx operētājsistēmā CentOS 7

Šajā rokasgrāmatā jūs uzzināsit, kā iestatīt HTTP autentifikāciju Nginx tīmekļa serverim, kas darbojas operētājsistēmā CentOS 7. Prasības Lai sāktu darbu, jums būs nepieciešams

Kā instalēt YOURLS operētājsistēmā CentOS 7

Kā instalēt YOURLS operētājsistēmā CentOS 7

YOURLS (Your Own URL Shortener) ir atvērtā koda URL saīsināšanas un datu analīzes lietojumprogramma. Šajā rakstā mēs apskatīsim instalēšanas procesu

Kā instalēt un konfigurēt ArangoDB operētājsistēmā CentOS 7

Kā instalēt un konfigurēt ArangoDB operētājsistēmā CentOS 7

Vai izmantojat citu sistēmu? Ievads ArangoDB ir atvērtā koda NoSQL datu bāze ar elastīgu datu modeli dokumentiem, grafikiem un atslēgu vērtībām. Tas ir

Etckeeper izmantošana /etc versiju kontrolei

Etckeeper izmantošana /etc versiju kontrolei

Ievads /etc/ direktorijam ir izšķiroša nozīme Linux sistēmas darbībā. Iemesls tam ir gandrīz visas sistēmas konfigurācijas

Kāpēc jums vajadzētu izmantot SSHFS? Kā uzstādīt attālo failu sistēmu ar SSHFS operētājsistēmā CentOS 6

Kāpēc jums vajadzētu izmantot SSHFS? Kā uzstādīt attālo failu sistēmu ar SSHFS operētājsistēmā CentOS 6

Daudzi sistēmu administratori pārvalda lielu daudzumu serveru. Ja failiem ir jāpiekļūst dažādos serveros, piesakieties katrā atsevišķi apm

Half Life 2 servera iestatīšana operētājsistēmā CentOS 6

Half Life 2 servera iestatīšana operētājsistēmā CentOS 6

Šajā apmācībā tiks apskatīts Half Life 2 spēļu servera instalēšanas process sistēmā CentOS 6. 1. darbība: priekšnosacījumu instalēšana Lai iestatītu ou

Kā instalēt Laravel GitScrum operētājsistēmā CentOS 7

Kā instalēt Laravel GitScrum operētājsistēmā CentOS 7

Laravel GitScrum jeb GitScrum ir atvērtā pirmkoda produktivitātes rīks, kas izstrādāts, lai palīdzētu izstrādātāju komandām ieviest Scrum metodoloģiju līdzīgā veidā.

Mašīnu pieaugums: AI reālās pasaules lietojumi

Mašīnu pieaugums: AI reālās pasaules lietojumi

Mākslīgais intelekts nav nākotnē, tas ir šeit, tagadnē. Šajā emuārā lasiet, kā mākslīgā intelekta lietojumprogrammas ir ietekmējušas dažādas nozares.

DDOS uzbrukumi: īss pārskats

DDOS uzbrukumi: īss pārskats

Vai arī jūs esat DDOS uzbrukumu upuris un esat neizpratnē par profilakses metodēm? Izlasiet šo rakstu, lai atrisinātu savus jautājumus.

Vai esat kādreiz domājis, kā hakeri pelna naudu?

Vai esat kādreiz domājis, kā hakeri pelna naudu?

Iespējams, esat dzirdējuši, ka hakeri pelna daudz naudas, bet vai esat kādreiz domājuši, kā viņi nopelna šādu naudu? pārrunāsim.

Google revolucionāri izgudrojumi, kas atvieglos jūsu dzīvi.

Google revolucionāri izgudrojumi, kas atvieglos jūsu dzīvi.

Vai vēlaties redzēt revolucionārus Google izgudrojumus un to, kā šie izgudrojumi mainīja katra cilvēka dzīvi mūsdienās? Pēc tam lasiet emuārā, lai redzētu Google izgudrojumus.

Piektdiena: kas notika ar AI vadītām automašīnām?

Piektdiena: kas notika ar AI vadītām automašīnām?

Pašpiedziņas automobiļu koncepcija izbraukt uz ceļiem ar mākslīgā intelekta palīdzību ir mūsu sapnis jau kādu laiku. Bet, neskatoties uz vairākiem solījumiem, tie nekur nav redzami. Lasiet šo emuāru, lai uzzinātu vairāk…

Tehnoloģiskā singularitāte: cilvēces civilizācijas tāla nākotne?

Tehnoloģiskā singularitāte: cilvēces civilizācijas tāla nākotne?

Zinātnei strauji attīstoties, pārņemot lielu daļu mūsu pūļu, palielinās arī risks pakļaut sevi neizskaidrojamai singularitātei. Izlasiet, ko singularitāte varētu nozīmēt mums.

Datu glabāšanas evolūcija – infografika

Datu glabāšanas evolūcija – infografika

Datu uzglabāšanas metodes ir attīstījušās kopš datu dzimšanas. Šajā emuārā ir aprakstīta datu uzglabāšanas attīstība, pamatojoties uz infografiku.

Lielo datu atsauces arhitektūras slāņu funkcijas

Lielo datu atsauces arhitektūras slāņu funkcijas

Lasiet emuāru, lai vienkāršākā veidā uzzinātu dažādus lielo datu arhitektūras slāņus un to funkcijas.

6 brīnišķīgas priekšrocības, ko sniedz viedo mājas ierīču izmantošana mūsu dzīvē

6 brīnišķīgas priekšrocības, ko sniedz viedo mājas ierīču izmantošana mūsu dzīvē

Šajā digitālajā pasaulē viedās mājas ierīces ir kļuvušas par būtisku dzīves sastāvdaļu. Šeit ir daži pārsteidzoši viedo mājas ierīču ieguvumi, lai padarītu mūsu dzīvi dzīves vērtu un vienkāršāku.

MacOS Catalina 10.15.4 papildinājuma atjauninājums rada vairāk problēmu nekā to risināšana

MacOS Catalina 10.15.4 papildinājuma atjauninājums rada vairāk problēmu nekā to risināšana

Nesen Apple izlaida macOS Catalina 10.15.4 papildinājuma atjauninājumu, lai novērstu problēmas, taču šķiet, ka atjauninājums rada vairāk problēmu, kas izraisa Mac datoru bloķēšanu. Izlasiet šo rakstu, lai uzzinātu vairāk