Docker Swarm pre dosiahnutie vysokej dostupnosti



Tento blog o Docker Swarm vysvetľuje moc nastavenia zoskupenia motorov Docker cez nakonfigurovaný Docker Swarm na dosiahnutie vysokej dostupnosti.

Čo je najdôležitejšou vlastnosťou akejkoľvek webovej aplikácie? Je ich veľa, ale pre mňa vysoká dostupnosť je najdôležitejšie. To nám pomáha Docker Swarm dosiahnuť! Pomáha to pri vysokej dostupnosti aplikácie.

V mojom predchádzajúci blog , Vysvetlil som, ako funguje Docker Compose. Tento blog o Docker Swarm nadväzuje na predchádzajúci dokument a tu boli vysvetlené výhody používania Docker Swarm na kontajnerovanie akýchkoľvek aplikácií s viacerými kontajnermi.





V prípade tohto blogu sa jedná iba o aplikáciu Angular, ktorou bude Docker Swarm’ed.
Poznámka : Metóda kontajnerovania aplikácie MEAN Stack je rovnaká.

Takže, čo je Docker Swarm?

Docker Swarm je technika na vytváranie a udržiavanie zoskupenia Docker Engines . Dockerove motory môžu byť hostené na rôznych uzloch a tieto uzly, ktoré sú na vzdialených miestach, tvoria a Klaster keď je pripojený v režime rojenia.



Prečo používať Docker Swarm?

Z už spomenutých dôvodov! Dosiahnutie vysoká dostupnosť bez akýchkoľvek prestojov je prioritou každého poskytovateľa služieb. Zaujme vysoká dostupnosť vašich klientov? No neurobí na nich dojem, ak budú čeliť výpadkom. To je samozrejmé.

Ďalšie výhody roja Docker

Rovnako ako mnoho ďalších služieb, aj Docker Swarm pracuje automaticky rozdelenie výkonu pre nás. Preto nie je potrebné, aby inžinieri DevOps smerovali požiadavky na spracovanie do iných uzlov, keď jeden zlyhá. Správca klastra za nás automaticky vykoná vyvažovanie záťaže.

Decentralizovaný prístup je ďalšou výhodou. Čo to znamená? To znamená, že ku všetkým uzlom má manažér ľahký prístup. Správca bude tiež pravidelne vyzývať uzly a bude sledovať jeho zdravotný stav / stav, aby sa vyrovnal s výpadkami. Uzly však nemôžu získať prístup alebo sledovať služby bežiace v iných uzloch / správcoch.



Môžete skontrolovať č. kontajnerov bežiacich v uzle, zvýšiť č. nádob alebo zmenšiť č. na základe našej požiadavky iba vykonaním jediného príkazu.

Aj po nasadení aplikácie môžeme vydať problém postupné aktualizácie a uistite sa, že je dosiahnutá CI (kontinuálna integrácia). Postupné aktualizácie sa vydávajú jednému uzlu za druhým, čím sa zaisťuje, že nedochádza k výpadkom a distribúcii záťaže medzi ďalšie uzly v klastri.

Takže, čo ďalej? Aby bolo zrejmé. Začnite s programom Docker Swarm, ak ste na ňom už pracovali alebo ak si vaša organizácia želá vytvoriť spoľahlivú webovú službu.

Poznámka : Dockerové motory sú nainštalované na nezávislých hostiteľoch / serveroch alebo na viacerých virtuálnych počítačoch v hostiteľovi.

Začíname s režimom rojenia

Docker Swarm je iniciovaný manažérom, alebo to poviem takto, inštancia, ktorá spustí klaster Swarm, sa stane správcom. Príkaz na spustenie klastra je:

$ docker swarm init --advertise-addr ip-adresa

Tu sa príznak ‘–advertise-addr’ používa na samotnú inzerciu na ďalšie uzly, ktoré sa chcú pripojiť ku klastru. Spolu s príznakom je potrebné uviesť IP adresu správcu. Nižšie je ukážka snímky obrazovky.

príkaz docker init - docker swarm - edureka

Pri spustení klastra Roj sa na konci manažéra vygeneruje token. Tento token musia použiť ďalšie uzly na pripojenie sa k rojovému klastru.

Ako to presne je? Skopírujte celý token vygenerovaný v ukotviteľnom jadre manažéra, vložte ho do ukotviteľného modulu uzla a vykonajte ho. Zvýraznená časť snímky obrazovky vyššie je token. Keď sa token vykoná na pracovnom uzle, bude vyzerať ako nasledujúca snímka obrazovky.

Akýkoľvek uzol, ktorý sa pripojí ku klastru, môže byť neskôr povýšený na manažéra. Ak chcete, aby sa modul ukotvenia pripojil ako správca, vykonajte na konci správcu nasledujúci príkaz:

$ docker swarm join-token manager

A neskôr, ak chcete, aby sa token uzla pripojil ku klastru, spustite nasledujúci príkaz:

$ docker swarm join-token node

Pokračujte a vykonajte token v každom uzle, ktorý chcete, aby ste sa pripojili ku klastru. Keď je všetko hotové, môžete spustiť príkaz docker node list a skontrolovať, koľko uzlov sa pripojilo ku klastru spolu s ich stavom. Príkaz je:

$ docker node ls

Screenshot je nižšie:

Vytváranie obrazu ukotvenia pre uhlovú aplikáciu

Ak je všetko v poriadku, potom môžeme spustiť našu službu Roj za predpokladu, že je zostavený Docker Image. Obrázok Dockera je možné vytvoriť zo súboru Docker. Súbor Docker používaný na zostavenie aplikácií je uvedený nižšie:

FROM node: 6 RUN mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm cache clean RUN npm install COPY. / usr / src / app EXPOSE 4200 CMD ['npm', 'start']

Súbor Docker sa používa na spoločné vykonávanie sady príkazov na vytvorenie vlastného obrázka Docker zo základného obrázka. Ako vidíte, základný obrázok, ktorý som použil, je „Uzol: 6“. NodeJS je obrázok I z Docker Hubu, ktorý je označený verziou 6.

Potom vo vnútri kontajnera vytváram nový adresár Dockeru a robím z neho pracovný adresár v mojom kontajneri.

Skopírujem súbor „package.json“ z môjho lokálneho počítača do pracovného adresára kontajnera. Potom špecifikujem príkazy „RUN npm cache clean“ a „RUN npm install“. npm nainštalovať príkaz stiahne verziu závislostí uvedených v súbore package.json.

Potom skopírujem všetky kódy projektu z lokálneho počítača do kontajnera, vystavím číslo portu 4200 pre prístup k aplikácii Angular v prehliadači a nakoniec špecifikujem príkaz npm start, ktorý aplikáciu kontajneruje.

Teraz, ak chcete vytvoriť obraz Dockeru založený na tomto súbore Docker, spustite nasledujúci príkaz:

$ docker build -t uhlový obraz.

Poznámka: Obrázky Dockera je potrebné zabudovať do všetkých uzlov v klastri. Bez toho by sa nádoby nemohli točiť v iných motoroch Docker.

Spustenie služby Docker Swarm

Vzhľadom na to, že náš obrázok Dockeru je zostavený, môžeme z tohto obrázka vytočiť kontajner. Urobíme však niečo lepšie: vytvoríme z toho službu Docker Swarm. Príkaz na vytvorenie rojovej služby je:

$ docker service create --name 'Angular-App-Container' -p 4200: 4200 angular-image

Tu sa príznak „meno“ používa na pomenovanie mojej služby a znak „p“ sa používa na vystavenie portu kontajnera hostiteľskému portu. V súbore package.json som určil port kontajnera, na ktorom by mala byť hostená úhlová aplikácia. A 4200 v tomto príkaze pomáha mapovať port 4200 kontajnera na port hostiteľa 4200. „angular-image“ je názov obrazu, ktorý som predtým vytvoril.

java, kedy to použiť

Pamätaj : Keď vytvoríme službu, môže byť hostená na akomkoľvek ukotviteľnom jadre v klastri. Správca roja rozhodne, kde bude hostený. Ale bez ohľadu na to, v ktorom uzle je hostená, k aplikácii je možné pristupovať na localhost: 4200 z ktoréhokoľvek z uzlov pripojených v klastri.

Ako je to možné? Pretože Swarm interne vystavuje čísla portov, aby boli prístupné pre každý ďalší uzol v klastri. To znamená, prístav č. 4200 na ľubovoľnom uzle / správcovi v klastri by vykreslil aplikáciu Angular.

Teraz čo? Je kontajner aktívny?

Ak je služba kontajnerovaná, môžete skontrolovať spustením príkazu docker service list. Nasadenie kontajnera však môže trvať minútu. Nižšie je uvedený príkaz:

$ docker service ls

Tento príkaz vypíše všetky služby spravované klastrom Swarm. V našom prípade by mal zobrazovať jeden aktívny kontajner. Referenčný obrázok nájdete na nasledujúcom obrázku.

Tu „REPLICAS = 1/1“ označuje, že v klastri existuje jedna „služba“ tohto kontajnera. A „MODE = replicated“ označuje, že služba je replikovaná na všetkých uzloch v klastri.

Teraz, aby sme zistili, na ktorom uzle / manažérovi je aplikácia hostená, môžeme spustiť príkaz docker service ps príkaz nasledovaný názvom kontajnera. Príkaz je:

$ docker service ps Angular-App-Container

Screenshot toho istého je uvedený nižšie.

Toto uvádza podrobnosti o uzle, na ktorom je aplikácia hostená, spolu s príkazom použitým na spustenie služby.

Príkaz „docker ps“ vrhá svetlo na podrobnosti o aktívnom kontajneri. Príkaz je:

$ docker ps

Referenčný obrázok nájdete na nasledujúcom obrázku.

Tento príkaz však bude fungovať iba na správcovi klastrov a na uzle, kde je služba skutočne hostená.

Ak chcete skontrolovať, koľko uzlov je spustených, spustite príkaz zoznamu uzlov. Príkaz je:

$ docker node ls

Ak chcete skontrolovať kontajnery bežiace v konkrétnom hostiteľovi, spustite príkaz node ps. Príkaz je:

$ docker node ps

Ak si pamätáte, už som spomenul, že služba momentálne beží v replikovanom REŽIME. To znamená, že služba je replikovaná cez všetky uzly v klastroch. Myslíte si, že existuje alternatíva?

Absolútne! Existuje niečo, čo sa volá Global MODE. V tomto režime je služba tohto kontajnera spustená u každého správcu v klastri. Nezabudnite zastaviť súčasnú službu / kontajner pred odstreďovaním inej sady kontajnerov.

Príkaz na to je:

$ docker service rm Angular-App-Container

Príkaz na roztočenie nádoby v globálnom režime je:

$ docker service create --name 'Angular-App-Container' -p 4200: 4200 --mode global angular-image

Takto by sa vytvorili 3 služby na 3 uzloch v našom klastri. Môžete to overiť spustením príkazu docker service list. Screenshot z tohto obrázku je uvedený nižšie.

Po vykonaní príkazu docker service ps uvidíte niečo také:

Ako vidíte, hovorí sa, že režim je replikovaný a repliky tohto kontajnera sú 3. Teraz prichádza najlepšia časť tohto blogu.

Ak chcete, aby medzi tromi kontajnermi bežali 2 repliky služieb, môžeme použiť príznak replík. Pozrite sa na príkaz nižšie:

$ docker service create --name 'Angular-App-Container' -p 4200: 4200 --replicas = 2 angular-image

Všimnete si, že tieto 2 služby sú vyvážené zaťažením medzi tromi uzlami v klastri. Spustením príkazu docker service process overte, v ktorých uzloch sú kontajnery aktívne. Referenčný obrázok nájdete na nasledujúcom obrázku. Kontajnery sú aktívne v jednom uzle správcu a jednom pracovnom uzle.

V uzle Pracovník môžete skontrolovať, či je kontajner spustený, vykonaním príkazu „docker ps“.

Docker Swarm pre vysokú dostupnosť

Teraz, aby sme skutočne overili, že je v našom klastri vysoká dostupnosť, musíme zažiť scenár, keď jeden z uzlov spadne a ostatné uzly v klastri to napravia. Tento scenár môžeme dosiahnuť manuálnym zastavením kontajnera z jedného z uzlov pomocou tohto príkazu:

$ docker stop Angular-App-Container

Spustite vyššie uvedený príkaz na uzle: Worker-1, kde je spustený kontajner.Od správcu spustite príkaz:

$ docker service ps Angular-App-Container

Teraz si všimnete, že kontajner je teraz spustený v uzle: Worker-2 a Manager. Bolo to však vypnutie z uzla: Worker-1. To isté je viditeľné aj na obrázku nižšie.

To je ako Vysoká dostupnosť Docker je dosiahnutý. Jan napriek tomu, že je kontajner neaktívny v Worker-1, aplikáciu je možné vykresliť na čísle portu 4200 v tomto pracovnom uzle. Je to preto, lebo je vnútorne pripojený k iným uzlom v klastri a je schopný vykresliť aplikáciu v prehliadači.

Vysoká dostupnosť po rozšírení služieb

Či už v replikovanom režime alebo globálnom režime, môžeme zvýšiť počet služieb spustených v našom klastri. A aj po rozšírení si budeme môcť zachovať vysokú dostupnosť. Úžasné, však?

môžete vrhnúť double na int

Ale keď sa vrátime k veci, pozrime sa, aké ľahké je zvýšiť počet služieb v našom klastri. Za predpokladu, že v našom klastri máme buď 2 alebo 3 repliky, rozšírime služby na 5 spustením jediného príkazu. Príkaz je:

$ docker service scale Angular-App-Container = 5

Screenshot z tohto obrázku je uvedený nižšie.

Spustením príkazu docker service list si môžete všimnúť, že počet replík je teraz 5. A spustením príkazu docker service ps spolu s názvom služby uvidíte, ako je 5 služieb vyvážených a distribuovaných na 3 uzloch . Príkazy sú:

$ docker service ls $ docker service ps Angular-App-Container

A nakoniec, v nastavení Docker Swarm, ak nechcete, aby sa váš manažér zúčastňoval na rokovaniach a nechával ho obsadeným iba na správu procesov, potom môžeme manažéra odčerpať z hostovania akejkoľvek aplikácie. Pretože to tak vo svete funguje, je to tak? Manažéri sú iba na riadenie ostatných pracovníkov. Príkaz na vykonanie tohto príkazu je:

$ docker node update --availability drain Manager-1

To, či sa manažér teraz podieľa na klastri, môžete overiť spustením príkazu docker node list a príkazu docker service ps:

$ docker node ls $ docker service ps Angular-App-Container

Teraz si môžete všimnúť, že kontajnerové služby boli rozdelené medzi pracovné uzly a manažérsky uzol bol skutočne vyčerpaný z kontajnerovania akejkoľvek služby. Screenshot je uvedený nižšie.

Týmto sa končí tento blog o Docker Swarm. Dúfam, že tento blog vysvetlil, aké dôležité je implementovať režim Swarm pre dosiahnutie vysokej dostupnosti. Zostaňte naladení na ďalšie blogy v tejto sérii tutoriálov Dockeru.

Môžete si tiež pozrieť video nižšie, aby ste pochopili, ako Docker Swarm funguje. Všetky vyššie vysvetlené koncepty sú obsiahnuté vo videu.

Docker roj pre vysokú dostupnosť Výukový program pre ukotviteľný panel Výukový program pre DevOps

Teraz, keď ste sa dozvedeli o Dockeri, pozrite sa na autor: Edureka, dôveryhodná online vzdelávacia spoločnosť so sieťou viac ako 250 000 spokojných študentov rozmiestnených po celom svete. Tento certifikačný vzdelávací kurz Edureka Docker pomáha študentom získať odborné znalosti pri implementácii Dockeru a jeho osvojení.

Máte na nás otázku? Uveďte to prosím v sekcii komentárov a my sa vám ozveme.