Docker roj za postizanje visoke dostupnosti

Ovaj blog o Docker Swarmu objašnjava moć postavljanja klastera Dockerovih motora putem konfiguriranog Docker Swarma za postizanje visoke dostupnosti.

Koja je najvažnija značajka bilo koje web-bazirane aplikacije? Mnogo ih je, ali za mene visoka dostupnost je najvažnije. To je ono što nam Docker Swarm pomaže postići! Pomaže u tome što je aplikacija visoko dostupna.

U mojoj prethodni blog , Objasnio sam kako Docker Compose radi. Ovaj blog o Docker Swarmu nastavak je prvoga i ovdje su objašnjene prednosti upotrebe Docker Swarma za kontejneriranje bilo koje aplikacije s više spremnika.





U slučaju ovog bloga, to je samo Angular aplikacija koja će biti Docker Swarm’ed.
Bilješka : Metoda sadržavanja aplikacije MEAN Stack ista je.

Pa, što je Docker Swarm?

Docker Roj je tehnika za stvaranje i održavanje klastera Docker motori . Dockerovi motori mogu se hostirati na različitim čvorovima, a ti čvorovi koji se nalaze na udaljenim mjestima čine a Klastera kada je povezan u načinu rojenja.



Zašto koristiti Docker Swarm?

Iz već spomenutih razloga! Postizanje visoka dostupnost bez zastoja je prioritet svakog pružatelja usluga vani. Hoće li visoka dostupnost impresionirati vaše klijente? Pa, neće biti impresionirani ako se suoče sa zastojima. To nema smisla.

Ostale prednosti Docker Swarma

Kao i mnoge druge usluge, Docker Swarm radi automatski uravnoteženje opterećenja za nas. Stoga nema potrebe za inženjerima DevOps-a da usmjeravaju zahtjeve za obradu na druge čvorove kad jedan ne uspije. Upravitelj klastera automatski će izvršiti uravnoteženje opterećenja za nas.

Decentralizirani pristup je još jedna korist. Što to znači? To znači da se svim čvorovima može lako pristupiti od upravitelja. Voditelj će redovito pozivati ​​čvorove i voditi evidenciju o njegovom zdravstvenom / statusu kako bi se mogao nositi s zastojima. Međutim, čvorovi ne mogu pristupiti ili pratiti usluge pokrenute u drugim čvorovima / upraviteljima.



Možete provjeriti br. spremnika koji rade u čvoru, povećavanje br. kontejnera ili umanjivanje br. na temelju našeg zahtjeva, samo izvršavanjem jedne naredbe.

Čak i nakon što je aplikacija postavljena, možemo je izdati valjanje-ažuriranja i pobrinite se da se postigne CI (kontinuirana integracija). Pokretna ažuriranja izdaju se jedan za drugim čvorom, čime se osigurava da nema zastoja i da se opterećenje raspoređuje između ostalih čvorova u klasteru.

Pa, što dalje? Da učinim očito. Započnite s Docker Swarmom ako ste već radili na Dockeru ili ako vaša organizacija želi sadržavati pouzdanu web uslugu.

Bilješka : Docker motori instalirani su na neovisnim hostovima / poslužiteljima ili u više VM-ova u hostu.

Početak rada s načinom rojenja

Docker Swarm pokreće upravitelj, ili da to tako kažem, instanca koja pokreće klaster Swarm postaje upravitelj. Naredba za pokretanje klastera je:

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

Ovdje se oznaka ‘–advertise-addr’ koristi za oglašavanje drugim čvorovima koji se žele pridružiti klasteru. Uz oznaku treba navesti IP adresu upravitelja. Ispod je primjer snimke zaslona.

docker init naredba - docker roj - edureka

Kada se pokrene klaster Swarm, na kraju upravitelja generira se token. Ovaj token trebaju koristiti drugi čvorovi za pridruživanje grozdu rojeva.

Kako je točno? Kopirajte čitav token generiran u upraviteljskom dock-engineu, zalijepite ga u docker-ov stroj čvora i pokrenite. Istaknuti dio gornje snimke zaslona je znak. Kada se token izvrši na radnom čvoru, izgledat će kao dolje snimka zaslona.

Bilo koji čvor koji se pridruži klasteru može se kasnije unaprijediti u upravitelja. U slučaju da želite da se motor dockera pridruži kao upravitelj, izvršite donju naredbu na kraju upravitelja:

$ docker roj menadžer pridružnih tokena

A kasnije, ako želite da se token za čvor pridruži klasteru, pokrenite donju naredbu:

$ docker roj čvor za pridruživanje-token

Samo naprijed i izvršite token na svakom čvoru koji želite da biste se pridružili klasteru. Kada je sve gotovo, možete pokrenuti naredbu popisa čvorova dockera kako biste provjerili koliko se čvorova pridružilo klasteru zajedno sa svojim statusom. Naredba je:

$ docker čvor ls

Snimak zaslona nalazi se u nastavku:

Stvaranje slike Dockera za kutnu aplikaciju

Ako je sve u redu, tada možemo pokrenuti našu uslugu Swarm, pod uvjetom da je izgrađena Docker Image. Slika Dockera može se izgraditi iz datoteke Docker. Dockerfile koji se koristi za izgradnju aplikacija nalazi se u nastavku:

FROM čvor: 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 IZLOŽITI 4200 CMD ['npm', 'start']

Dockerfile koristi se za zajedničko izvršavanje niza naredbi za izgradnju prilagođene Docker slike iz osnovne slike. Kao što vidite, osnovna slika koju sam koristio je 'Node: 6'. NodeJS je slika I iz Docker Hub-a koja je označena verzijom 6.

Tada stvaram novi Docker direktorij unutar spremnika i pretvaram ga u radni direktorij unutar mog spremnika.

Kopiram datoteku 'package.json' s mog lokalnog računala u radni direktorij spremnika. Tada navodim naredbe 'RUN npm cache clean' i 'RUN npm install'. npm instalirati naredba preuzima verziju ovisnosti spomenutu u datoteci package.json.

Zatim kopiram sve projektne kodove s lokalnog stroja u spremnik, izlažem broj porta 4200 za pristup aplikaciji Angular u pregledniku i na kraju, navodim naredbu npm start koja kontejnerira aplikaciju.

Sada, da biste kreirali Docker sliku na temelju ove Dockerfile datoteke, pokrenite donju naredbu:

$ docker build -t kutna slika.

Bilješka: Slike Dockera moraju biti ugrađene u sve čvorove klastera. Bez nje se kontejneri ne mogu vrtjeti u drugim Docker motorima.

Pokretanje usluge Docker Swarm

S obzirom na to da je naša Docker slika izgrađena, možemo iz nje iscijediti spremnik. Ali, učinit ćemo nešto bolje: od nje stvoriti uslugu Docker Swarm. Naredba za stvaranje usluge roja je:

$ docker usluga create --name 'Angular-App-Container' -p 4200: 4200 kutna slika

Ovdje se zastava ‘name’ koristi za davanje naziva mojoj usluzi, a oznaka ‘p’ koristi se za izlaganje porta spremnika luci domaćina. U datoteci package.json odredio sam port spremnika na kojem treba biti smještena aplikacija Angular. I 4200 u ovoj naredbi pomaže mapiranju priključka 4200 spremnika na priključku domaćina 4200. 'angular-image' naziv je slike koju sam ranije izgradio.

Zapamtiti : Kada stvorimo uslugu, ona se može hostirati na bilo kojem dock mehanizmu u klasteru. Upravitelj roja odlučit će gdje će biti domaćin. No, bez obzira u kojem je čvoru smješten, aplikaciji se može pristupiti na localhost: 4200 s bilo kojeg čvora povezanog u klaster.

Kako je to moguće? Budući da Swarm interno izlaže brojeve priključaka kako bi im mogao pristupiti svaki drugi čvor u klasteru. To znači, luka br. 4200 na bilo kojem čvoru / upravitelju u klasteru prikazao bi aplikaciju Angular.

Što sad? Je li spremnik aktivan?

Pokretanjem naredbe popisa usluga dockera možete provjeriti je li usluga kontejnerizirana. No, može potrajati minuta dok se spremnik ne postavi. Ispod je naredba:

$ docker usluga ls

Ova naredba će navesti sve usluge kojima upravlja Swarm klaster. U našem bi slučaju trebao prikazivati ​​jedan aktivni spremnik. Pogledajte referencu na donjem snimku zaslona.

Ovdje 'REPLICAS = 1/1' označava da u klasteru postoji jedna jedina 'usluga' tog spremnika. A “MODE = replicirano” označava da se usluga replicira na svim čvorovima u klasteru.

Sada, da bismo identificirali na kojem je čvoru / upravitelju smještena aplikacija, možemo pokrenuti naredbu docker service ps naredbu nakon koje slijedi ime spremnika. Naredba je:

$ docker usluga ps Angular-App-Container

Snimak zaslona za isti nalazi se u nastavku.

Ovdje se spominju detalji o čvoru na kojem je aplikacija smještena, zajedno s naredbom koja se koristi za pokretanje usluge.

Naredba 'docker ps' baca svjetlo na detalje o aktivnom spremniku. Naredba je:

$ docker ps

Pogledajte referencu na donjem snimku zaslona.

Ali, ova će naredba raditi samo na upravitelju klastera i čvoru na kojem se usluga zapravo hostira.

Da biste provjerili koliko je čvorova pokrenuto, pokrenite naredbu popisa čvorova. Naredba je:

$ docker čvor ls

Da biste provjerili spremnike koji se izvode na određenom hostu, pokrenite naredbu node ps. Naredba je:

$ docker čvor ps

Ako se sjećate, ranije sam spomenuo da se usluga trenutno izvodi u repliciranom MODU. To znači da se usluga replicira na svim čvorovima u klasterima. Mislite li da postoji alternativa?

Apsolutno! Postoji nešto što se naziva Globalni NAČIN. U ovom načinu rada usluga ovog spremnika radi na svakom pojedinom upravitelju u klasteru. Ne zaboravite zaustaviti trenutnu uslugu / spremnik prije nego što zavrte drugi set spremnika.

Naredba za to je:

$ docker usluga rm Angular-App-Container

Naredba za okretanje spremnika u globalnom načinu je:

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

To bi stvorilo 3 usluge na 3 čvora u našem klasteru. Možete ga provjeriti pokretanjem naredbe popisa usluga dockera. Snimak zaslona ovoga nalazi se u nastavku.

Kad se izvrši naredba usluge docker ps, vidjet ćete otprilike ovako:

Kao što vidite, piše da se način replicira i da su replike ovog spremnika 3. Sad dolazi najbolji dio ovog bloga.

Da bi se dvije replike usluga izvodile između tri spremnika, možemo koristiti zastavicu replika. Pogledajte naredbu u nastavku:

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

Primijetit ćete da su ove dvije usluge uravnotežene između tri čvora u klasteru. Pokrenite naredbu procesa postupka dockera za provjeru u kojim su čvorovima spremnici aktivni. Pogledajte referencu na donjem snimku zaslona. Spremnici su aktivni u jednom čvoru upravitelja i jednom radnom čvoru.

Iz čvora Worker možete provjeriti radi li spremnik izvršavanjem naredbe ‘docker ps’.

Docker Swarm za visoku dostupnost

Da bismo zapravo provjerili postoji li velika dostupnost u našem klasteru, moramo iskusiti scenarij u kojem se jedan od čvorova spušta, a drugi čvorovi u klasteru to nadoknađuju. Taj scenarij možemo postići ručnim zaustavljanjem spremnika s jednog od čvorova pomoću ove naredbe:

java koje su varijable instance
$ docker stop Angular-App-Container

Pokrenite gornju naredbu na čvoru: Worker-1 gdje se izvodi spremnik.Iz upravitelja pokrenite naredbu:

$ docker usluga ps Angular-App-Container

Sad ćete primijetiti da se spremnik sada izvodi u čvoru: Worker-2 i Manager. Međutim, isključen je s čvora: Worker-1. Isto je vidljivo na donjem snimku zaslona.

Ovo je kako Docker velika dostupnost postignuto je. JaUnatoč tome što je spremnik neaktivan u Worker-1, aplikacija se može prikazati na portu broja 4200 na tom radničkom čvoru. To je zato što je iznutra povezan s drugim čvorovima klastera i sposoban je prikazati aplikaciju u pregledniku.

Velika dostupnost nakon povećanja usluga

Bilo u repliciranom ili globalnom načinu, možemo povećati broj usluga koje se izvode u našem klasteru. Čak i nakon povećanja moći ćemo zadržati visoku dostupnost. Sjajno zar ne?

No, vratimo se svojoj poanti, uvidimo kako je lako povećati broj usluga u našem klasteru. Pod pretpostavkom da imamo 2 ili 3 replike u našem klasteru, povećajmo usluge na 5 samo izvršavanjem jedne naredbe. Naredba je:

$ docker skala usluge Angular-App-Container = 5

Snimak zaslona ovoga nalazi se u nastavku.

Pokretanjem naredbe popisa usluga dockera možete primijetiti da je broj replika sada 5. A pokretanjem naredbe usluge docker usluge ps zajedno s imenom usluge možete vidjeti kako je 5 usluga uravnoteženo opterećenje i raspoređeno na 3 čvora . Naredbe su:

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

I na kraju, u postavci Docker Swarm ako ne želite da vaš upravitelj sudjeluje u postupku i zaokuplja ga samo za upravljanje procesima, tada možemo upravnika isprazniti iz hostiranja bilo koje aplikacije. Jer ovako to funkcionira u svijetu, zar ne? Menadžeri su samo za upravljanje ostalim radnicima. U svakom slučaju, naredba za to je:

Ažuriranje čvora $ docker - dostupnost odvoda Manager-1

Možete provjeriti sudjeluje li upravitelj sada u klasteru pokretanjem naredbe popisa čvorova dockera i naredbe docker usluge ps:

$ docker čvor ls $ docker usluga ps Angular-App-Container

Sada možete primijetiti da su usluge spremnika podijeljene između čvorova Worker i da je čvor Manager istrošen iz kontejnerizacije bilo koje usluge. Snimak zaslona nalazi se u nastavku.

Dakle, to dovodi do kraja ovog bloga na Docker Swarmu. Nadam se da je ovaj blog objasnio koliko je važno implementirati način rojenja za postizanje visoke dostupnosti. Pratite još blogova u ovoj Docker seriji vodiča.

Alternativno možete pogledati video u nastavku kako biste razumjeli kako Docker Swarm djeluje. Svi gore navedeni pojmovi obrađeni su u videu.

Docker roj za visoku dostupnost | Vodič za Dockere | Vodič za DevOps

Sad kad ste saznali za Docker, pogledajte Edureka, pouzdane tvrtke za internetsko učenje s mrežom od više od 250 000 zadovoljnih učenika raširenih širom svijeta. Ovaj tečaj za certificiranje Edureka Dockera pomaže učenicima da steknu stručnost u primjeni Dockera i njegovom svladavanju.

Imate pitanje za nas? Molimo spomenite to u odjeljku za komentare i javit ćemo vam se.