Sticky Session with Docker Swarm (CE) a CentOS 7 rendszeren

Bevezetés

A Docker Swarm az Ön egyedi szervereit számítógépek fürtjévé alakítja, megkönnyítve a méretezést, a magas rendelkezésre állást és a terheléselosztást. A Swarm terheléselosztó egy körkörös terheléselosztási stratégiát valósít meg, és ez megzavarhatja a (örökölt) állapotalapú alkalmazások megfelelő működését, amelyek valamilyen ragadós munkamenetet igényelnek, hogy lehetővé tegyék a magas rendelkezésre állású beállítást több példányban. A Docker Enterprise Edition támogatja a Layer-7 ragadós munkamenetet, de ebben az útmutatóban a Docker ingyenes (CE) verziójára fogunk összpontosítani. A ragadós munkamenetek megvalósításához a Traefiket fogjuk használni.

Előfeltételek

  • Legalább két frissen telepített és frissített CentOS 7-példány ugyanabban az alhálózatban, engedélyezett magánhálózattal
  • Ezekre a példányokra telepítve a Docker CE
  • A példányoknak ugyanannak a Swarmnak a részét kell képezniük, és képesnek kell lenniük kommunikálni egymással a magánhálózaton keresztül
  • Docker és Docker Swarm előzetes ismerete
  • Nem adminisztrátor felhasználó sudo jogokkal (nem kötelező, de erősen ajánlott, hogy ne használja a root felhasználót)

Ebben az oktatóanyagban két Vultr-példányt fogunk használni 192.168.0.100 és 192.168.0.101 privát IP-címekkel, mindkettő Docker Swarm menedzser csomópont (ami nem ideális termeléshez, de elegendő ehhez az oktatóanyaghoz).

Ki vagyok én

Ez az oktatóanyag a jwilder/whoamidocker-képet használja demóalkalmazásként. Ez az egyszerű tároló a válaszoló tároló nevével válaszol egy REST-hívásra, így nagyon könnyen ellenőrizhető, hogy a ragadós munkamenetek működnek-e. Ezt a képet csak bemutató célokra használják, és le kell cserélni a saját alkalmazás képével. A következőképpen whoami-servicevan konfigurálva:

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

Ha ezt követően curla whoamiREST végpontot a következő helyen http://192.168.0.100/végezzük, akkor láthatjuk, hogy a Docker Swarm körkörös terheléselosztása működik.

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

Hiába teszteli ezt a modern böngészőkkel, mint például a Chrome vagy a Firefox, mert ezeket úgy tervezték, hogy életben tartsák (nyitva) a kapcsolatokat, és a Docker Swarm terheléselosztója csak minden új csatlakozáskor vált át a másik tárolóra . Ha ezt böngészővel szeretné tesztelni, legalább 30 másodpercet kell várnia, amíg a kapcsolat bezárul, mielőtt újra frissítené.

A Traefik beállítása

A Traefik natívan támogatja a Docker Swarm-ot, képes észlelni és regisztrálni vagy törölni a konténereket menet közben, és kommunikál az alkalmazással a belső overlay hálózaton keresztül. A Traefiknek szüksége van néhány információra az alkalmazásáról, mielőtt elkezdené kezelni az arra vonatkozó kéréseket. Ezeket az információkat a Traefik úgy kapja meg, hogy címkéket ad hozzá a Swarm szolgáltatásához.

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

Az alábbi lista leírja, mit jelentenek az egyes címkék:

  • traefik.docker.network: A Docker átfedő hálózat, amelyen keresztül a Traefik kommunikál az Ön szolgáltatásával
  • traefik.port: A port, amelyen a szolgáltatás figyel (ez a belső port, nem a közzétett port)
  • traefik.frontend.rule: PathPrefix:/a kontextus gyökerét köti /ehhez a szolgáltatáshoz.
  • traefik.backend.loadbalancer.stickiness: Engedélyezi a ragadós munkameneteket ehhez a szolgáltatáshoz

Most, hogy a whoami-serviceszükséges címkékkel konfigurálva van, hozzáadhatjuk a Traefik szolgáltatást a rajhoz:

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

Ez a parancs elég sok dolgot hajt végre egyszerre. Az alábbi lista részletesebben elmagyarázza:

  • --name traefik: Új Docker szolgáltatásunk neve traefik
  • -p8080:80: A Traefik portját 80a porttól portig tesszük közzé 8080(a portot 80a mi szolgáltatónk már használja whoami-service)
  • -p9090:8080: Kiadjuk a Traefik saját webes felületét a portra 9090
  • --mount ...: A Docker Socketet a konténerbe szereljük, hogy a Traefik hozzáférjen a gazdagép Docker futási környezetéhez
  • --global: Traefik konténereket szeretnénk minden menedzser csomóponton a magas rendelkezésre állás miatt
  • --constraint 'node.role == manager': Csak azt akarjuk, hogy a Traefik a menedzser csomópontokon fusson, mert a dolgozó csomópontok nem tudják biztosítani a Traefik számára a szükséges információkat. Például docker service lsegy dolgozó csomóponton nem működik, így a Traefik még azt sem tudná felfedezni, hogy milyen szolgáltatások futnak.
  • --network whoaminet: A Traefiket ugyanarra a hálózatra köti, mint a miénket whoami-service, különben nem tudnak csatlakozni. Korábban azt mondtuk a Traefiknek, hogy ezen a hálózaton keresztül csatlakozzon szolgáltatásunkhoz a traefik.docker.networkcímkével
  • traefik: Mondja meg a dockernek, hogy a legújabb Traefik docker-képet használja ehhez a szolgáltatáshoz
  • --docker --docker.swarmmode --docker.watch --web --loglevel=DEBUG: A parancssori argumentumok közvetlenül a Traefiknek átadva, hogy Docker raj módban futhasson ( --loglevel=DEBUGitt opcionális, de érdekes a beállítás során és ebben az oktatóanyagban)

Nincs más hátra, mint a szükséges portok megnyitása a CentOS tűzfalban:

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

Hogyan működik

Amint a Traefik beindul, a naplókon látható, hogy Traefik felfedezi a két whoamikonténert. Kiadja a cookie nevét is, amelyet a ragadós munkamenet kezelésére fog használni:

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"

Ha ráhajolunk, http://192.168.0.100:8080láthatjuk, hogy új cookie _a49bclett beállítva:

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

Ha a későbbi hívások során ezt a cookie-t elküldjük a Traefiknek, akkor mindig ugyanabba a tárolóba továbbítjuk:

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

A cookie nem tartalmaz mást, mint annak a tárolónak a belső, (overlay) IP címét, amelyre a Traefik kérésre küldjön. Ha módosítja a cookie értékét, http://10.0.0.4:8000akkor a kérés ténylegesen a másik tárolóba kerül továbbításra. Ha a cookie-t soha nem küldik el újra a Traefiknek, akkor a ragadós munkamenet nem fog működni, és a kérések egyensúlyban lesznek az alkalmazás és a Traefik tárolók között.

Ez minden, ami szükséges a Layer 7 Sticky Sessions beállításához a Docker CE-ben a CentOS 7 rendszeren.


Telepítse a Plesket a CentOS 7 rendszeren

Telepítse a Plesket a CentOS 7 rendszeren

Más rendszert használ? A Plesk egy szabadalmaztatott webtárhely-vezérlőpult, amely lehetővé teszi a felhasználók számára, hogy adminisztrálják személyes és/vagy ügyfeleik webhelyeit, adatbázisait

A Squid Proxy telepítése a CentOS rendszeren

A Squid Proxy telepítése a CentOS rendszeren

A Squid egy népszerű, ingyenes Linux-program, amely lehetővé teszi továbbítási webproxy létrehozását. Ebben az útmutatóban megtudhatja, hogyan telepítheti a Squid-et a CentOS rendszerre, hogy megfordítsa

A Lighttpd (LLMP Stack) telepítése a CentOS 6 rendszeren

A Lighttpd (LLMP Stack) telepítése a CentOS 6 rendszeren

Bevezetés A Lighttpd az Apache forkja, amely sokkal kevésbé erőforrás-igényes. Könnyű, innen kapta a nevét, és meglehetősen egyszerű a használata. Telepítés

A statikus hálózat és az IPv6 konfigurálása CentOS 7 rendszeren

A statikus hálózat és az IPv6 konfigurálása CentOS 7 rendszeren

A VULTR a közelmúltban változtatásokat hajtott végre a saját oldalukon, és most már mindennek jól kell működnie, ha a NetworkManager engedélyezve van. Ha szeretné letiltani

Az Icinga2 módosítása a mester/kliens modell használatához CentOS 6 vagy CentOS 7 rendszeren

Az Icinga2 módosítása a mester/kliens modell használatához CentOS 6 vagy CentOS 7 rendszeren

Az Icinga2 egy hatékony felügyeleti rendszer, és mester-kliens modellben használva helyettesítheti az NRPE-alapú felügyeleti ellenőrzések szükségességét. A mester-kliens

Az Apache Cassandra 3.11.x telepítése CentOS 7 rendszeren

Az Apache Cassandra 3.11.x telepítése CentOS 7 rendszeren

Más rendszert használ? Az Apache Cassandra egy ingyenes és nyílt forráskódú NoSQL adatbázis-kezelő rendszer, amelyet úgy terveztek, hogy biztosítsa a méretezhetőséget,

A Microweber telepítése CentOS 7 rendszeren

A Microweber telepítése CentOS 7 rendszeren

Más rendszert használ? A Microweber egy nyílt forráskódú drag and drop CMS és online bolt. A Microweber forráskódja a GitHubon található. Ez az útmutató megmutatja neked

A Vanilla Forum telepítése a CentOS 7 rendszeren

A Vanilla Forum telepítése a CentOS 7 rendszeren

Más rendszert használ? A Vanilla forum egy nyílt forráskódú, PHP-ben írt fórumalkalmazás. Ez egy teljesen testreszabható, könnyen használható, és támogatja a külsőt

A Mattermost 4.1 telepítése CentOS 7 rendszeren

A Mattermost 4.1 telepítése CentOS 7 rendszeren

Más rendszert használ? A Mattermost egy nyílt forráskódú, saját üzemeltetésű alternatívája a Slack SAAS üzenetküldő szolgáltatásnak. Más szóval, a Mattermost segítségével kb

Minecraft szerverek hálózatának létrehozása BungeeCord segítségével Debian 8, Debian 9 vagy CentOS 7 rendszeren

Minecraft szerverek hálózatának létrehozása BungeeCord segítségével Debian 8, Debian 9 vagy CentOS 7 rendszeren

Mire lesz szüksége Egy Vultr VPS legalább 1 GB RAM-mal. SSH hozzáférés (root/adminisztrátori jogosultságokkal). 1. lépés: A BungeeCord telepítése Először is

Encrypt on Plesk

Encrypt on Plesk

A Plesk vezérlőpult nagyon szép integrációt kínál a Lets Encrypt számára. A Lets Encrypt egyike az egyetlen SSL-szolgáltatónak, amely teljes tanúsítványt ad ki

Lehetővé teszi a titkosítást a cPanel-en

Lehetővé teszi a titkosítást a cPanel-en

A Lets Encrypt egy tanúsító hatóság, amely ingyenes SSL-tanúsítványokat biztosít. A cPanel ügyes integrációt épített ki, így Ön és ügyfele

A Concrete5 telepítése CentOS 7 rendszeren

A Concrete5 telepítése CentOS 7 rendszeren

Más rendszert használ? A Concrete5 egy nyílt forráskódú CMS, amely számos megkülönböztető és hasznos funkciót kínál, hogy segítse a szerkesztőket a tartalom egyszerű létrehozásában.

Hogyan telepítsük az értékelő táblát a CentOS 7 rendszeren

Hogyan telepítsük az értékelő táblát a CentOS 7 rendszeren

Más rendszert használ? A Review Board egy ingyenes és nyílt forráskódú eszköz a forráskód, a dokumentáció, a képek és még sok más áttekintésére. Ez egy web alapú szoftver

Állítsa be a HTTP-hitelesítést az Nginx segítségével a CentOS 7 rendszeren

Állítsa be a HTTP-hitelesítést az Nginx segítségével a CentOS 7 rendszeren

Ebből az útmutatóból megtudhatja, hogyan állíthat be HTTP-hitelesítést egy CentOS 7 rendszeren futó Nginx webszerverhez. Követelmények A kezdéshez szüksége lesz a következőre:

A GoAccess telepítése a CentOS 7 rendszeren

A GoAccess telepítése a CentOS 7 rendszeren

Más rendszert használ? A GoAccess egy nyílt forráskódú webnapló-elemző. Használhatja naplók valós idejű elemzésére akár a terminálon, akár a

A YOURLS telepítése a CentOS 7 rendszeren

A YOURLS telepítése a CentOS 7 rendszeren

A YOURLS (Your Own URL Shortener) egy nyílt forráskódú URL-rövidítő és adatelemző alkalmazás. Ebben a cikkben a telepítés folyamatával foglalkozunk

Az ArangoDB telepítése és konfigurálása a CentOS 7 rendszeren

Az ArangoDB telepítése és konfigurálása a CentOS 7 rendszeren

Más rendszert használ? Bevezetés Az ArangoDB egy nyílt forráskódú NoSQL adatbázis, amely rugalmas adatmodellt kínál dokumentumokhoz, grafikonokhoz és kulcsértékekhez. Ez

Az Etckeeper használata az /etc verziókezeléshez

Az Etckeeper használata az /etc verziókezeléshez

Bevezetés Az /etc/ könyvtár kritikus szerepet játszik a Linux rendszer működésében. Ennek az az oka, hogy szinte minden rendszerkonfiguráció

Miért érdemes SSHFS-t használni? Távoli fájlrendszer csatlakoztatása SSHFS-sel a CentOS 6 rendszeren

Miért érdemes SSHFS-t használni? Távoli fájlrendszer csatlakoztatása SSHFS-sel a CentOS 6 rendszeren

Sok rendszergazda nagy mennyiségű kiszolgálót kezel. Ha a fájlokhoz különböző szervereken keresztül kell hozzáférni, mindegyikbe külön-külön kell bejelentkezni kb

A gépek felemelkedése: Az AI valós világbeli alkalmazásai

A gépek felemelkedése: Az AI valós világbeli alkalmazásai

A mesterséges intelligencia nem a jövőben, hanem itt a jelenben. Ebben a blogban Olvassa el, hogyan hatott a mesterséges intelligencia alkalmazások különböző ágazatokra.

DDOS támadások: Rövid áttekintés

DDOS támadások: Rövid áttekintés

Ön is DDOS támadások áldozata, és tanácstalan a megelőzési módszereket illetően? Olvassa el ezt a cikket a kérdések megoldásához.

Gondolkozott már azon, hogyan keresnek pénzt a hackerek?

Gondolkozott már azon, hogyan keresnek pénzt a hackerek?

Talán hallottál már arról, hogy a hackerek sok pénzt keresnek, de elgondolkodtál már azon, hogyan kereshetnek ennyi pénzt? beszéljük meg.

A Google forradalmi találmányai, amelyek megkönnyítik az életét.

A Google forradalmi találmányai, amelyek megkönnyítik az életét.

Szeretné látni a Google forradalmi találmányait, és azt, hogy ezek a találmányok hogyan változtatták meg minden mai ember életét? Ezután olvassa el a blogot, és nézze meg a Google találmányait.

Essential péntek: Mi történt az AI-vezérelt autókkal?

Essential péntek: Mi történt az AI-vezérelt autókkal?

Az önvezető autók koncepciója, hogy mesterséges intelligencia segítségével kerüljenek az utakra, már egy ideje álmunk. De számos ígéret ellenére sehol sem látszanak. Olvassa el ezt a blogot, hogy többet megtudjon…

Technológiai szingularitás: az emberi civilizáció távoli jövője?

Technológiai szingularitás: az emberi civilizáció távoli jövője?

Ahogy a tudomány gyors ütemben fejlődik, átveszi erőfeszítéseink nagy részét, megnő annak a kockázata is, hogy alávetjük magunkat egy megmagyarázhatatlan szingularitásnak. Olvassa el, mit jelenthet számunkra a szingularitás.

Az adattárolás fejlődése – Infografika

Az adattárolás fejlődése – Infografika

Az adatok tárolási módjai az Adatok születése óta alakulhatnak. Ez a blog egy infografika alapján mutatja be az adattárolás fejlődését.

A Big Data Reference Architecture Layerek funkciói

A Big Data Reference Architecture Layerek funkciói

Olvassa el a blogot, hogy a legegyszerűbb módon ismerje meg a Big Data Architecture különböző rétegeit és azok funkcióit.

Az okosotthoni eszközök 6 lenyűgöző előnye az életünkben

Az okosotthoni eszközök 6 lenyűgöző előnye az életünkben

Ebben a digitálisan vezérelt világban az intelligens otthoni eszközök az élet döntő részévé váltak. Íme az intelligens otthoni eszközök néhány elképesztő előnye, hogyan teszik életünket érdemessé és egyszerűbbé.

A macOS Catalina 10.15.4 kiegészítés frissítése több problémát okoz, mint a megoldás

A macOS Catalina 10.15.4 kiegészítés frissítése több problémát okoz, mint a megoldás

Az Apple a közelmúltban kiadott egy kiegészítést a macOS Catalina 10.15.4-hez a problémák megoldására, de úgy tűnik, hogy a frissítés több problémát okoz, ami a Mac gépek blokkolásához vezet. További információért olvassa el ezt a cikket