Docker Swarm pro dosažení vysoké dostupnosti



Tento blog o Docker Swarm vysvětluje sílu nastavení clusteru motorů Docker prostřednictvím nakonfigurovaného Docker Swarm pro dosažení vysoké dostupnosti.

Co je nejdůležitější funkcí jakékoli webové aplikace? Je jich mnoho, ale pro mě vysoká dostupnost je nejdůležitější. To nám pomáhá Docker Swarm dosáhnout! Pomáhá při vysoce dostupné aplikaci.

V mém předchozí blog , Vysvětlil jsem, jak funguje Docker Compose. Tento blog o Docker Swarm je pokračováním prvního a zde byly vysvětleny výhody používání Docker Swarm pro kontejnerizaci jakékoli aplikace s více kontejnery.





V případě tohoto blogu to bude pouze aplikace Angular, která bude Docker Swarm’ed.
Poznámka : Metoda kontejnerizace aplikace MEAN Stack je stejná.

Co je tedy Docker Swarm?

Docker Swarm je technika pro vytváření a údržbu shluku Docker Engines . Docker enginy mohou být hostovány na různých uzlech a tyto uzly, které jsou ve vzdálených umístěních, tvoří a Klastr při připojení v režimu roje.



Proč používat Docker Swarm?

Z již zmíněných důvodů! Dosažení vysoká dostupnost bez prostojů je prioritou každého poskytovatele služeb. Zapůsobí na vaše klienty vysoká dostupnost? Nebudou ohromeni, pokud budou čelit výpadkům. To je samozřejmost.

Další výhody Docker Swarm

Stejně jako mnoho dalších služeb i Docker Swarm pracuje automaticky vyvažování zátěže pro nás. Proto není potřeba, aby inženýři DevOps směrovali požadavky na zpracování do jiných uzlů, když jeden selže. Správce klastru za nás automaticky provede rozložení zátěže.

Decentralizovaný přístup je další výhoda. Co to znamená? To znamená, že ke všem uzlům lze snadno získat přístup od správce. Správce také pravidelně vyzve uzly a bude sledovat jeho stav / stav, aby zvládl prostoje. Uzly však nemohou přistupovat nebo sledovat služby běžící v jiných uzlech / správcích.



Můžete zkontrolovat č. kontejnerů běžících v uzlu, zvýšit č. kontejnerů nebo zmenšit č. na základě našeho požadavku pouhým provedením jediného příkazu.

I po nasazení aplikace můžeme vydat postupné aktualizace a ujistěte se, že je dosaženo CI (Continuous Integration). Postupné aktualizace se vydávají na jeden uzel za druhým, čímž se zajistí, že nedochází k prostojům a zatížení je distribuováno mezi ostatní uzly v klastru.

Co dál? Aby bylo zřejmé. Začněte s Docker Swarm, pokud jste již na Dockeru pracovali nebo pokud si vaše organizace přeje kontejnerovat spolehlivou webovou službu.

Poznámka : Docker engine jsou nainstalovány na nezávislých hostitelích / serverech nebo na více virtuálních počítačích v hostiteli.

Začínáme s režimem roje

Docker Swarm je iniciován manažerem, nebo to řeknu tímto způsobem, instance, která spustí cluster Swarm, se stane správcem. Příkaz ke spuštění clusteru je:

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

Zde se příznak „–advertise-addr“ používá k samotné inzerci na další uzly, které se chtějí připojit ke klastru. Spolu s příznakem je třeba zadat IP adresu správce. Níže je ukázka obrazovky.

příkaz docker init - docker swarm - edureka

Když je zahájen shluk roje, na konci manažera je vygenerován token. Tento token musí být použit jinými uzly, aby se připojil ke shluku rojů.

Jak je to přesně? Zkopírujte celý token vygenerovaný v ukotvitelném modulu správce, vložte jej do ukotvitelného modulu uzlu a spusťte jej. Zvýrazněná část výše uvedeného snímku obrazovky je token. Když je token spuštěn na pracovním uzlu, bude vypadat jako snímek obrazovky níže.

Jakýkoli uzel, který se připojí ke clusteru, může být později povýšen na manažera. V případě, že chcete, aby se docker engine připojil jako správce, proveďte na konci správce následující příkaz:

$ docker swarm join-token manager

A později, pokud chcete, aby se token uzlu připojil ke clusteru, spusťte následující příkaz:

$ docker swarm join-token node

Pokračujte a proveďte token v každém uzlu, který chcete, abyste se připojili ke clusteru. Když je vše hotové, můžete spustit příkaz docker node list a zkontrolovat, kolik uzlů se připojilo ke clusteru spolu s jejich stavem. Příkaz je:

$ docker node ls

Screenshot je níže:

Vytváření obrazu Dockeru pro úhlovou aplikaci

Pokud je vše v pořádku, můžeme spustit naši službu Swarm, pokud je vytvořen Docker Image. Docker obrázek lze vytvořit z Dockerfile. Soubor Docker používaný k vytváření aplikací je níže:

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']

Soubor Docker se používá k provádění sady příkazů společně pro vytváření vlastního obrazu Dockeru ze základního obrazu. Jak vidíte, základní obrázek, který jsem použil, je „Uzel: 6“. NodeJS je obrázek I z Docker Hubu, který je označen verzí 6.

Pak vytvářím nový adresář Docker uvnitř kontejneru a dělám z něj pracovní adresář uvnitř mého kontejneru.

Jsem kopírování souboru ‚package.json 'z místního počítače do pracovního adresáře kontejneru. Poté zadám příkazy „RUN npm cache clean“ a „RUN npm install“. instalace NPM příkaz stáhne verzi závislostí uvedenou v souboru package.json.

Pak zkopíruji všechny kódy projektu z místního počítače do kontejneru, vystavím číslo portu 4200 pro přístup k aplikaci Angular v prohlížeči a nakonec specifikuji příkaz npm start, který kontejnerizuje aplikaci.

Nyní, chcete-li vytvořit image Dockeru na základě tohoto souboru Docker, spusťte následující příkaz:

$ docker build -t úhlový obraz.

Poznámka: Docker Images musí být zabudovány do všech uzlů v clusteru. Bez něj nelze kontejnery točit v jiných motorech Docker.

Spuštění Docker Swarm Service

Vzhledem k tomu, že je vytvořen náš Docker Image, můžeme z tohoto obrázku vytočit kontejner. Ale uděláme něco lepšího: vytvořte z toho službu Docker Swarm. Příkaz k vytvoření rojové služby je:

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

Zde se příznak „name“ používá k pojmenování mé služby a příznak „p“ se používá k vystavení portu kontejneru hostitelskému portu. V souboru package.json jsem určil port kontejneru, na kterém by měla být úhlová aplikace hostována. A 4200 v tomto příkazu pomáhá mapovat port 4200 kontejneru na port hostitele 4200. „Angular-image“ je název obrazu, který jsem dříve vytvořil.

jak implementovat propojený seznam v c

Pamatovat si : Když vytvoříme službu, může být hostována na libovolném ukotvitelném modulu v clusteru. Správce roje rozhodne, kde bude hostován. Ale bez ohledu na to, ve kterém uzlu je hostován, k aplikaci lze přistupovat na localhost: 4200 z kteréhokoli z uzlů připojených v klastru.

Jak je to možné? Protože Swarm interně zpřístupňuje čísla portů, aby byla přístupná všem dalším uzlům v klastru. To znamená, port č. 4200 na libovolném uzlu / správci v klastru by vykreslil úhlovou aplikaci.

Co teď? Je kontejner aktivní?

Spuštěním příkazu docker service list můžete ověřit, zda je služba kontejnerizovaná. Nasazení kontejneru však může trvat minutu. Níže je uveden příkaz:

$ docker service ls

Tento příkaz vypíše všechny služby spravované clusterem Swarm. V našem případě by měl zobrazit jeden aktivní kontejner. Podívejte se na níže uvedený snímek obrazovky.

Zde „REPLICAS = 1/1“ označuje, že v klastru existuje jedna „služba“ tohoto kontejneru. A „MODE = replicated“ označuje, že služba je replikována na všech uzlech v klastru.

Nyní, abychom zjistili, na kterém uzlu / správci je aplikace hostována, můžeme spustit příkaz docker service ps příkazu následovaný názvem kontejneru. Příkaz je:

$ docker service ps Angular-App-Container

Screenshot stejného obrázku je níže.

Toto uvádí podrobnosti o uzlu, na kterém je aplikace hostována, spolu s příkazem použitým ke spuštění služby.

Příkaz „docker ps“ vrhá světlo na podrobnosti o aktivním kontejneru. Příkaz je:

$ docker ps

Podívejte se na níže uvedený snímek obrazovky.

Tento příkaz však bude fungovat pouze na správci clusteru a uzlu, kde je služba ve skutečnosti hostována.

Chcete-li zkontrolovat, kolik uzlů běží, spusťte příkaz seznam uzlů. Příkaz je:

$ docker node ls

Chcete-li zkontrolovat kontejnery spuštěné v konkrétním hostiteli, spusťte příkaz uzel ps. Příkaz je:

$ docker uzel ps

Pokud si pamatujete, dříve jsem zmínil, že služba aktuálně běží v replikovaném REŽIMU. To znamená, že služba je replikována napříč všemi uzly v klastrech. Myslíte si, že existuje alternativa?

Absolutně! Existuje něco, čemu se říká Global MODE. V tomto režimu je služba tohoto kontejneru spuštěna u každého / manažera v clusteru. Nezapomeňte před spuštěním další sady kontejnerů zastavit aktuální službu / kontejner.

Příkaz k tomu je:

$ docker service rm Angular-App-Container

Příkaz k otočení kontejneru v globálním režimu je:

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

To by vytvořilo 3 služby na 3 uzlech v našem klastru. Můžete to ověřit spuštěním příkazu docker service list. Snímek obrazovky je níže.

Když je spuštěn příkaz docker service ps, uvidíte něco jako toto:

Jak vidíte, říká se, že režim je replikován a repliky tohoto kontejneru jsou 3. Nyní přichází ta nejlepší část tohoto blogu.

Aby byly mezi třemi kontejnery spuštěny 2 repliky služeb, můžeme použít příznak replik. Podívejte se na příkaz níže:

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

Všimnete si, že tyto 2 služby jsou vyrovnány mezi třemi uzly v klastru. Spuštěním příkazu docker service process ověřte, ve kterých uzlech jsou kontejnery aktivní. Podívejte se na níže uvedený snímek obrazovky. Kontejnery jsou aktivní v jednom uzlu správce a jednom pracovním uzlu.

V uzlu Worker můžete ověřit, že je kontejner spuštěn, spuštěním příkazu ‚docker ps '.

Docker Swarm pro vysokou dostupnost

Nyní, abychom skutečně ověřili, že v našem klastru je vysoká dostupnost, musíme zažít scénář, kdy jeden z uzlů spadne a ostatní uzly v klastru to napraví. Tento scénář můžeme vyvolat ručním zastavením kontejneru z jednoho z uzlů pomocí tohoto příkazu:

$ docker stop Angular-App-Container

Spusťte výše uvedený příkaz v uzlu: Worker-1, kde je spuštěný kontejner.Ve správci spusťte příkaz:

$ docker service ps Angular-App-Container

Nyní si všimnete, že kontejner nyní běží v uzlu: Worker-2 a Manager. Bylo to však vypnutí z uzlu: Worker-1. Totéž je vidět na níže uvedeném snímku obrazovky.

Takhle Vysoká dostupnost Dockeru je dosaženo. Ján přestože je kontejner neaktivní v Worker-1, lze aplikaci vykreslit na portu číslo 4200 v tomto pracovním uzlu. Důvodem je, že je interně propojen s dalšími uzly v klastru a je schopen vykreslit aplikaci v prohlížeči.

Vysoká dostupnost po rozšíření služeb

Ať už v replikovaném režimu nebo globálním režimu, můžeme zvýšit počet služeb spuštěných v našem klastru. A dokonce i po navýšení kapacity si budeme moci udržet vysokou dostupnost. Úžasné, že?

html značka pro vložení zalomení řádku

Ale vraťme se k naší věci, podívejme se, jak snadné je zvýšit počet služeb v našem klastru. Za předpokladu, že v našem klastru máme buď 2 nebo 3 repliky, zvětšme služby na 5 pouhým spuštěním jediného příkazu. Příkaz je:

$ docker service scale Angular-App-Container = 5

Snímek obrazovky je níže.

Spuštěním příkazu docker service list, si můžete všimnout, že počet replik je nyní 5. A spuštěním příkazu docker service ps spolu s názvem služby můžete vidět, jak je 5 služeb vyváženo a distribuováno na 3 uzlech . Příkazy jsou:

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

A konečně, v nastavení Docker Swarm, pokud nechcete, aby se váš manažer účastnil řízení a udržoval ho obsazený pouze pro správu procesů, můžeme manažera zbavit hostování jakékoli aplikace. Protože to tak ve světě funguje, že? Manažeři jsou pouze pro správu ostatních pracovníků. Příkaz k tomu je:

$ docker node update --availability drain Manager-1

Můžete ověřit, zda se správce nyní účastní klastru spuštěním příkazu docker node list a příkazu docker service ps:

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

Nyní si můžete všimnout, že služby kontejneru byly rozděleny mezi uzly Worker a uzel Manager byl ve skutečnosti vyčerpán z kontejnerizace jakékoli služby. Screenshot je níže.

Tím je ukončen tento blog o Docker Swarm. Doufám, že tento blog vysvětlil, jak důležité je implementovat režim Swarm pro dosažení vysoké dostupnosti. Sledujte další blogy v této sérii tutoriálů Docker.

Můžete také sledovat video níže, abyste pochopili, jak Docker Swarm funguje. Ve videu jsou popsány všechny výše vysvětlené koncepty.

Docker Swarm pro vysokou dostupnost Výukový program pro Docker | Výukový program DevOps

Nyní, když jste se dozvěděli o Dockeru, podívejte se na Edureka, důvěryhodná online vzdělávací společnost se sítí více než 250 000 spokojených studentů rozložených po celém světě. Tento kurz Edureka Docker Certification Training pomáhá studentům získat odborné znalosti v implementaci Dockeru a jeho zvládnutí.

Máte na nás dotaz? Uveďte to prosím v sekci komentáře a my se vám ozveme.