Sticky Session with Docker Swarm (CE) CentOS 7:ssä

Johdanto

Docker Swarm muuttaa yksittäiset palvelimesi tietokoneklusteriksi, mikä helpottaa skaalausta, korkeaa käytettävyyttä ja kuormituksen tasapainottamista. Swarm-kuormituksen tasapainottaja toteuttaa round-robin-kuormituksen tasapainotusstrategian, ja tämä saattaa häiritä (vanhojen) tilallisten sovellusten oikeaa toimintaa, jotka vaativat jonkinlaisia ​​takertuvia istuntoja mahdollistaakseen korkean käytettävyyden asennuksen useilla esiintymillä. Docker Enterprise Edition tukee Layer-7 sticky -istuntoa, mutta tässä oppaassa keskitymme Dockerin ilmaiseen (CE) versioon. Kiinnittyvien istuntojen toteuttamiseen käytämme Traefikia.

Edellytykset

  • Vähintään kaksi juuri käyttöön otettua ja päivitettyä CentOS 7 -esiintymää samassa aliverkossa, joissa yksityinen verkko on käytössä
  • Docker CE asennettuna näihin tapauksiin
  • Elementtien tulee olla osa samaa Swarmia, ja niiden pitäisi pystyä kommunikoimaan keskenään yksityisen verkon kautta
  • Aiempi tuntemus Dockerista ja Docker Swarmista
  • Ei-järjestelmänvalvoja, jolla on sudo-oikeudet (valinnainen, mutta on erittäin suositeltavaa olla käyttämättä pääkäyttäjää)

Tässä opetusohjelmassa käytämme kahta Vultr-instanssia yksityisillä IP-osoitteilla 192.168.0.100 ja 192.168.0.101, molemmat ovat Docker Swarm -hallintasolmuja (mikä ei ole ihanteellinen tuotantoon, mutta riittää tähän opetusohjelmaan).

Kuka olen

Tämä opetusohjelma käyttää jwilder/whoamiDocker-kuvaa esittelysovelluksena. Tämä yksinkertainen säilö vastaa REST-kutsuun vastaavan säilön nimellä, joten on erittäin helppoa testata, toimivatko pysyvät istunnot. Tätä kuvaa käytetään vain esittelytarkoituksiin, ja se on korvattava omalla sovelluksesi kuvalla. Se whoami-serviceon konfiguroitu seuraavasti:

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

Jos olisimme myöhemmin REST päätetapahtumassa , voimme nähdä kiertovuorotteluvalinta kuormantasaus on satamatyöläinen Swarm työssä.curlwhoamihttp://192.168.0.100/

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

Tätä ei kannata testata nykyaikaisilla selaimilla, kuten Chromella tai Firefoxilla, koska ne on suunniteltu pitämään yhteydet hengissä (avoin) ja Docker Swarm -kuormituksen tasapainotin vaihtaa toiseen säiliöön vain jokaisen uuden yhteyden yhteydessä. Jos haluat testata tätä selaimella, sinun on odotettava vähintään 30 sekuntia yhteyden sulkeutumista ennen kuin päivität sen uudelleen.

Asetetaan Traefik

Traefik tukee alkuperäisesti Docker Swarmia, se voi havaita ja rekisteröidä kontteja tai poistaa niiden rekisteröinnit lennossa ja kommunikoi sovelluksesi kanssa sisäisen peittoverkon kautta. Traefik tarvitsee tietoja sovelluksestasi ennen kuin se voi käsitellä sitä koskevia pyyntöjä. Nämä tiedot toimitetaan Traefikille lisäämällä tarroja Swarm-palveluusi.

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

Alla oleva luettelo kuvaa, mitä kukin tarra tarkoittaa:

  • traefik.docker.network: Docker-peittoverkko, jonka kautta Traefik kommunikoi palvelusi kanssa
  • traefik.port: Portti, jota palvelusi kuuntelee (tämä on sisäisesti esillä oleva portti, ei julkaistu portti)
  • traefik.frontend.rule: PathPrefix:/sitoo kontekstin juuren /tähän palveluun.
  • traefik.backend.loadbalancer.stickiness: Ottaa käyttöön tämän palvelun pysyvät istunnot

Nyt whoami-servicekun tarvittavat tarrat on konfiguroitu, voimme lisätä Traefik-palvelun parveen:

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

Tämä komento tekee melko monta asiaa kerralla. Alla oleva luettelo selittää tarkemmin:

  • --name traefik: Uuden Docker-palvelumme nimi on traefik
  • -p8080:80: Julkaisemme Traefikin portista 80satamaan 8080(portti 80on jo käytössämme whoami-service)
  • -p9090:8080: Julkaisemme Traefikin oman web-käyttöliittymän porttiin 9090
  • --mount ...: Asennamme Docker Socketin säiliöön, jotta Traefik pääsee käsiksi isännän Docker-ajoaikaan
  • --global: Haluamme Traefik-kontit jokaiseen managerisolmuun korkean käytettävyyden vuoksi
  • --constraint 'node.role == manager': Haluamme, että Traefik toimii vain johtajasolmuissa, koska työntekijäsolmut eivät pysty tarjoamaan Traefikille sen tarvitsemia tietoja. Esimerkiksi docker service lstyöntekijäsolmu ei toimi, joten Traefik ei edes pystyisi selvittämään, mitkä palvelut ovat käynnissä
  • --network whoaminet: Yhdistää Traefikin samaan verkkoon kuin meidän whoami-service, muuten he eivät saa yhteyttä. Kerroimme aiemmin Traefikille yhteyden palveluumme tämän verkon kautta traefik.docker.networketiketillä
  • traefik: Pyydä Dockeria käyttämään viimeisintä Traefik Docker -kuvaa tälle palvelulle
  • --docker --docker.swarmmode --docker.watch --web --loglevel=DEBUG: Komentoriviargumentit välitetään suoraan Traefikille, jotta se voisi toimia Docker-parvitilassa ( --loglevel=DEBUGon tässä valinnainen, mutta mielenkiintoinen asennuksen aikana ja tässä opetusohjelmassa)

Sinun tarvitsee vain avata tarvittavat portit CentOS-palomuurissa:

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

Kuinka se toimii

Heti kun Traefik käynnistyy, voit nähdä lokeista, että Traefik löytää kaksi whoamikonttia. Se myös tulostaa evästeen nimen, jota se käyttää kiinnittyvän istunnon käsittelemiseen:

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"

Jos käperrymme, http://192.168.0.100:8080voimme nähdä, että uusi eväste _a49bcon asetettu:

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

Jos lähetämme tämän evästeen seuraavissa puheluissa Traefikille, meidät ohjataan aina samaan säiliöön:

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

Eväste sisältää vain sen kontin sisäisen (peittokuvan) IP-osoitteen, johon Traefikin tulee lähettää pyyntö. Jos muutat evästeen arvoksi, http://10.0.0.4:8000pyyntö välitettäisiin käytännössä toiseen säilöön. Jos evästettä ei koskaan lähetettäisi uudelleen Traefikille, kiinnitysistunto ei toimi ja pyynnöt tasapainotetaan sovelluksen säilöjen ja Traefik-säilöjen välillä.

Se on kaikki mitä tarvitaan Layer 7 Sticky Sessionsin määrittämiseen Docker CE:ssä CentOS 7:ssä.


Asenna Plesk CentOS 7:ään

Asenna Plesk CentOS 7:ään

Käytätkö erilaista järjestelmää? Plesk on patentoitu verkkoisäntäohjauspaneeli, jonka avulla käyttäjät voivat hallita henkilökohtaisia ​​ja/tai asiakkaidensa verkkosivustoja, tietokantoja

Kuinka asentaa Squid Proxy CentOS:ään

Kuinka asentaa Squid Proxy CentOS:ään

Squid on suosittu, ilmainen Linux-ohjelma, jonka avulla voit luoda edelleenlähetysverkkovälityspalvelimen. Tässä oppaassa näet, kuinka Squid asennetaan CentOS:ään kääntääksesi sinut

Lighttpd:n (LLMP Stack) asentaminen CentOS 6:een

Lighttpd:n (LLMP Stack) asentaminen CentOS 6:een

Johdanto Lighttpd on Apachen haarukka, jonka tarkoituksena on olla paljon vähemmän resurssiintensiivinen. Se on kevyt, tästä syystä sen nimi, ja on melko yksinkertainen käyttää. Asenna

Staattisen verkon ja IPv6:n määrittäminen CentOS 7:ssä

Staattisen verkon ja IPv6:n määrittäminen CentOS 7:ssä

VULTR on äskettäin tehnyt muutoksia heidän omiinsa, ja kaiken pitäisi nyt toimia hyvin heti, kun NetworkManager on käytössä. Jos haluat poistaa käytöstä

Icinga2:n muokkaaminen käyttämään pää/asiakasmallia CentOS 6:ssa tai CentOS 7:ssä

Icinga2:n muokkaaminen käyttämään pää/asiakasmallia CentOS 6:ssa tai CentOS 7:ssä

Icinga2 on tehokas valvontajärjestelmä, ja master-client-mallissa käytettynä se voi korvata NRPE-pohjaisten valvontatarkastusten tarpeen. Pääasiakas

Apache Cassandra 3.11.x:n asentaminen CentOS 7:ään

Apache Cassandra 3.11.x:n asentaminen CentOS 7:ään

Käytätkö erilaista järjestelmää? Apache Cassandra on ilmainen ja avoimen lähdekoodin NoSQL-tietokannan hallintajärjestelmä, joka on suunniteltu tarjoamaan skaalautuvuutta, hig.

Kuinka asentaa Microweber CentOS 7:ään

Kuinka asentaa Microweber CentOS 7:ään

Käytätkö erilaista järjestelmää? Microweber on avoimen lähdekoodin vedä ja pudota sisällönhallintajärjestelmä ja verkkokauppa. Microweber-lähdekoodia isännöidään GitHubissa. Tämä opas näyttää sinulle

Mattermost 4.1:n asentaminen CentOS 7:ään

Mattermost 4.1:n asentaminen CentOS 7:ään

Käytätkö erilaista järjestelmää? Mattermost on avoimen lähdekoodin itseisännöity vaihtoehto Slack SAAS -viestipalvelulle. Toisin sanoen Mattermostin avulla voit noin

Minecraft-palvelinverkon luominen BungeeCordilla Debian 8:ssa, Debian 9:ssä tai CentOS 7:ssä

Minecraft-palvelinverkon luominen BungeeCordilla Debian 8:ssa, Debian 9:ssä tai CentOS 7:ssä

Mitä tarvitset Vultr VPS:n, jossa on vähintään 1 Gt RAM-muistia. SSH-käyttö (pääkäyttäjän/järjestelmänvalvojan oikeuksilla). Vaihe 1: BungeeCordin asentaminen Ensimmäiset asiat ensin

Sallii salauksen Pleskissä

Sallii salauksen Pleskissä

Plesk-ohjauspaneelissa on erittäin mukava integraatio Lets Encryptille. Lets Encrypt on yksi ainoista SSL-palveluntarjoajista, jotka myöntävät varmenteita täydellisesti

Sallii salauksen cPanelissa

Sallii salauksen cPanelissa

Lets Encrypt on varmenneviranomainen, joka on omistautunut tarjoamaan SSL-varmenteita ilmaiseksi. cPanel on rakentanut siistin integraation sinulle ja asiakkaallesi

Kuinka asentaa Concrete5 CentOS 7:ään

Kuinka asentaa Concrete5 CentOS 7:ään

Käytätkö erilaista järjestelmää? Concrete5 on avoimen lähdekoodin sisällönhallintajärjestelmä, joka tarjoaa monia ainutlaatuisia ja hyödyllisiä ominaisuuksia, jotka auttavat toimittajia tuottamaan sisältöä helposti ja helposti.

Review Boardin asentaminen CentOS 7:ään

Review Boardin asentaminen CentOS 7:ään

Käytätkö erilaista järjestelmää? Review Board on ilmainen ja avoimen lähdekoodin työkalu lähdekoodin, dokumentaation, kuvien ja monien muiden tarkistamiseen. Se on web-pohjainen ohjelmisto

Asenna HTTP-todennus Nginxillä CentOS 7:ssä

Asenna HTTP-todennus Nginxillä CentOS 7:ssä

Tässä oppaassa opit määrittämään HTTP-todennuksen Nginx-verkkopalvelimelle, joka toimii CentOS 7:ssä. Vaatimukset Aloitaksesi tarvitset

Kuinka asentaa YOURLS CentOS 7:ään

Kuinka asentaa YOURLS CentOS 7:ään

YOURLS (Your Own URL Shortener) on avoimen lähdekoodin URL-osoitteiden lyhennys- ja data-analytiikkasovellus. Tässä artikkelissa käsittelemme asennusprosessia

Kuinka asentaa ja määrittää ArangoDB CentOS 7: ssä

Kuinka asentaa ja määrittää ArangoDB CentOS 7: ssä

Käytätkö erilaista järjestelmää? Johdanto ArangoDB on avoimen lähdekoodin NoSQL-tietokanta, jossa on joustava tietomalli asiakirjoille, kaavioille ja avainarvoille. se on

Etckeeperin käyttäminen /etc-version hallintaan

Etckeeperin käyttäminen /etc-version hallintaan

Johdanto /etc/-hakemistolla on tärkeä rooli Linux-järjestelmän toiminnassa. Syynä tähän on se, että lähes kaikki järjestelmäkokoonpanot

Miksi sinun pitäisi käyttää SSHFS:ää? Kuinka asentaa etätiedostojärjestelmä SSHFS:llä CentOS 6:ssa

Miksi sinun pitäisi käyttää SSHFS:ää? Kuinka asentaa etätiedostojärjestelmä SSHFS:llä CentOS 6:ssa

Monet järjestelmänvalvojat hallitsevat suuria määriä palvelimia. Kun tiedostoja on käytettävä eri palvelimien kautta, kirjaudu jokaiseen erikseen n

Half Life 2 -palvelimen määrittäminen CentOS 6:lle

Half Life 2 -palvelimen määrittäminen CentOS 6:lle

Tämä opetusohjelma kattaa Half Life 2 -pelipalvelimen asennuksen CentOS 6 -järjestelmään. Vaihe 1: Edellytysten asentaminen Voit määrittää ou

Kuinka asentaa Laravel GitScrum CentOS 7:ään

Kuinka asentaa Laravel GitScrum CentOS 7:ään

Laravel GitScrum tai GitScrum on avoimen lähdekoodin tuottavuustyökalu, joka on suunniteltu auttamaan kehitysryhmiä ottamaan käyttöön Scrum-metodologian samalla tavalla.

Koneiden nousu: tekoälyn todelliset sovellukset

Koneiden nousu: tekoälyn todelliset sovellukset

Tekoäly ei ole tulevaisuudessa, se tässä nykyisyydessä Tässä blogissa Lue kuinka tekoälysovellukset ovat vaikuttaneet eri sektoreihin.

DDOS-hyökkäykset: lyhyt katsaus

DDOS-hyökkäykset: lyhyt katsaus

Oletko myös DDOS-hyökkäysten uhri ja hämmentynyt ehkäisymenetelmistä? Lue tämä artikkeli ratkaistaksesi kysymyksesi.

Oletko koskaan miettinyt, kuinka hakkerit ansaitsevat rahaa?

Oletko koskaan miettinyt, kuinka hakkerit ansaitsevat rahaa?

Olet ehkä kuullut, että hakkerit ansaitsevat paljon rahaa, mutta oletko koskaan miettinyt, kuinka he ansaitsevat tuollaista rahaa? keskustellaan.

Googlen vallankumouksellisia keksintöjä, jotka helpottavat elämääsi.

Googlen vallankumouksellisia keksintöjä, jotka helpottavat elämääsi.

Haluatko nähdä Googlen vallankumouksellisia keksintöjä ja kuinka nämä keksinnöt muuttivat jokaisen ihmisen elämää nykyään? Lue sitten blogia nähdäksesi Googlen keksinnöt.

Essential perjantai: Mitä tekoäly-ohjatuille autoille tapahtui?

Essential perjantai: Mitä tekoäly-ohjatuille autoille tapahtui?

Konsepti itseohjautuvista autoista lähteä tielle tekoälyn avulla on ollut haaveena jo jonkin aikaa. Mutta useista lupauksista huolimatta niitä ei näy missään. Lue tämä blogi saadaksesi lisätietoja…

Teknologinen singulaarisuus: ihmissivilisaation kaukainen tulevaisuus?

Teknologinen singulaarisuus: ihmissivilisaation kaukainen tulevaisuus?

Kun tiede kehittyy nopeasti ja ottaa haltuunsa suuren osan ponnisteluistamme, myös riskit altistaa itsemme selittämättömälle singulariteetille kasvavat. Lue, mitä singulaarisuus voisi tarkoittaa meille.

Tietojen tallennuksen evoluutio – Infografiikka

Tietojen tallennuksen evoluutio – Infografiikka

Tietojen säilytystavat ovat kehittyneet mahdollisesti Datan syntymästä lähtien. Tämä blogi käsittelee tiedon tallennuksen kehitystä infografian pohjalta.

Big Datan referenssiarkkitehtuurikerrosten toiminnot

Big Datan referenssiarkkitehtuurikerrosten toiminnot

Blogista saat tietää Big Data -arkkitehtuurin eri kerroksista ja niiden toiminnoista yksinkertaisimmalla tavalla.

6 uskomatonta etua älykkäiden kotilaitteiden käyttämisestä elämässämme

6 uskomatonta etua älykkäiden kotilaitteiden käyttämisestä elämässämme

Tässä digitaalisessa maailmassa kodin älylaitteista on tullut tärkeä osa elämää. Tässä on muutamia älykkäiden kodin laitteiden hämmästyttäviä etuja, joiden avulla ne tekevät elämästämme elämisen arvoista ja yksinkertaisempaa.

macOS Catalina 10.15.4 -täydennyspäivitys aiheuttaa enemmän ongelmia kuin ratkaiseminen

macOS Catalina 10.15.4 -täydennyspäivitys aiheuttaa enemmän ongelmia kuin ratkaiseminen

Apple julkaisi äskettäin macOS Catalina 10.15.4 -lisäpäivityksen ongelmien korjaamiseksi, mutta näyttää siltä, ​​että päivitys aiheuttaa lisää ongelmia, jotka johtavat mac-koneiden tiilikaamiseen. Lue tämä artikkeli saadaksesi lisätietoja