Sådan konfigureres og opretholdes høj tilgængelighed/klyngedannelse i Linux


Høj tilgængelighed (HA) henviser simpelthen til et systems kvalitet, der fungerer kontinuerligt uden svigt i lang tid. HA-løsninger kan implementeres ved hjælp af hardware og/eller software, og en af de fælles løsninger til implementering af HA er klyngedannelse.

I computing består en klynge af to eller flere computere (almindeligvis kendt som noder eller medlemmer), der arbejder sammen for at udføre en opgave. I en sådan opsætning leverer kun en node tjenesten, hvor den eller de sekundære knudepunkter overtager, hvis den fejler.

Klynger falder i fire hovedtyper:

  • Storage: giver et ensartet filsystembillede på tværs af servere i en klynge, så serverne kan læse og skrive samtidigt til et enkelt delt filsystem.
  • Høj tilgængelighed: eliminere enkelte fejlpunkter og ved at fejle over tjenester fra en klyngenode til en anden, hvis en node går ude af drift.
  • Load Balancing: send netværksserviceanmodninger til flere klyngenoder for at afbalancere anmodningen om belastning blandt klyngenoder.
  • Høj ydeevne: Udfør parallel eller samtidig behandling, hvilket hjælper med at forbedre applikationernes ydeevne.

En anden udbredt løsning til at levere HA er replikering (specifikt datareplikationer). Replikering er den proces, hvorved en eller flere (sekundære) databaser kan holdes synkroniseret med en enkelt primær (eller master) database.

For at opsætte en klynge har vi brug for mindst to servere. Med henblik på denne vejledning bruger vi to Linux-servere:

  • Knude1: 192.168.10.10
  • Node2: 192.168.10.11

I denne artikel vil vi demonstrere det grundlæggende om, hvordan man implementerer, konfigurerer og opretholder høj tilgængelighed/klyngedannelse i Ubuntu 16.04/18.04 og CentOS 7. Vi vil demonstrere, hvordan man tilføjer Nginx HTTP-service til klyngen.

Konfiguration af lokale DNS-indstillinger på hver server

For at de to servere skal kommunikere til hinanden, er vi nødt til at konfigurere de relevante lokale DNS-indstillinger i/etc/hosts-filen på begge servere.

Åbn og rediger filen ved hjælp af din foretrukne kommandolinjeditor.

$ sudo vim /etc/hosts  

Tilføj følgende poster med faktiske IP-adresser på dine servere.

192.168.10.10	node1.example.com
192.168.10.11 	node2.example.com

Gem ændringerne, og luk filen.

Installation af Nginx Web Server

Installer nu Nginx-webserver ved hjælp af følgende kommandoer.

$ sudo apt install nginx  [On Ubuntu]
$ sudo yum install epel-release && sudo yum install nginx [On CentOS 7]

Når installationen er afsluttet, skal du starte Nginx-tjenesten indtil videre og aktivere den til automatisk start ved opstartstid, og derefter kontrollere, om den er i gang ved hjælp af systemctl-kommandoen.
På Ubuntu skal tjenesten startes automatisk umiddelbart efter, at pakkekonfigurationen er færdig, du kan bare aktivere den.

$ sudo systemctl enable nginx
$ sudo systemctl start nginx
$ sudo systemctl status nginx

Efter start af Nginx-tjenesten skal vi oprette brugerdefinerede websider til identifikation og test af operationer på begge servere. Vi vil ændre indholdet af standard Nginx-indekssiden som vist.

$ echo "This is the default page for node1.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS1
$ echo "This is the default page for node2.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS2

Installation og konfiguration af Corosync og Pacemaker

Dernæst skal vi installere Pacemaker, Corosync og Pcs på hver node som følger.

$ sudo apt install corosync pacemaker pcs	#Ubuntu 
$ sudo yum install corosync pacemaker pcs	#CentOS 

Når installationen er færdig, skal du sørge for, at pc-dæmonen kører på begge servere.

$ sudo systemctl enable pcsd
$ sudo systemctl start pcsd
$ sudo systemctl status pcsd

Under installationen oprettes en systembruger kaldet “hacluster”. Så vi er nødt til at konfigurere den nødvendige godkendelse til pc'er. Lad os starte med at oprette en ny adgangskode til "hacluster" -brugeren, vi skal bruge den samme adgangskode på alle servere:

$ sudo passwd hacluster

Derefter kører følgende kommando på en af serverne (Node1) for at konfigurere den nødvendige godkendelse til pc'er.

$ sudo pcs cluster auth node1.example.com node2.example.com -u hacluster -p password_here --force

Opret nu en klynge, og udfyld den med nogle noder (klyngenavnet må ikke overstige 15 tegn, i dette eksempel har vi brugt eksamplluster) på Node1-serveren.

$ sudo pcs cluster setup --name examplecluster node1.example.com node2.example.com 

Aktiver nu klyngen ved opstart og start tjenesten.

$ sudo pcs cluster enable --all
$ sudo pcs cluster start --all

Kontroller nu, om klyngetjenesten er i gang ved hjælp af følgende kommando.

$ sudo pcs status
OR
$ sudo crm_mon -1

Fra output fra ovenstående kommando kan du se, at der er en advarsel om ingen STONITH-enheder, men STONITH er stadig aktiveret i klyngen. Derudover er der ikke konfigureret klyngeressourcer/-tjenester.

Den første mulighed er at deaktivere STONITH (eller Shoot The Other Node In The Head), hegnimplementeringen på Pacemaker.

Denne komponent hjælper med at beskytte dine data mod at blive ødelagt af samtidig adgang. Med henblik på denne vejledning deaktiverer vi den, da vi ikke har konfigureret nogen enheder.

For at slå STONITH fra skal du køre følgende kommando:

$ sudo pcs property set stonith-enabled=false

Dernæst skal du også ignorere Quorum-politikken ved at køre følgende kommando:

$ sudo pcs property set no-quorum-policy=ignore

Når du har indstillet ovenstående indstillinger, skal du køre følgende kommando for at se egenskabslisten og sikre, at ovenstående indstillinger, stonith og beslutningsdygtighedspolitikken er deaktiveret.

$ sudo pcs property list

I dette afsnit vil vi se på, hvordan du tilføjer en klyngeressource. Vi konfigurerer en flydende IP, som er den IP-adresse, der øjeblikkeligt kan flyttes fra en server til en anden inden for det samme netværk eller datacenter. Kort sagt er en flydende IP et teknisk almindeligt udtryk, der bruges til IP'er, der ikke er strengt bundet til en enkelt grænseflade.

I dette tilfælde vil det blive brugt til at understøtte failover i en klynge med høj tilgængelighed. Husk, at flydende IP'er ikke kun er til failover-situationer, de har et par andre brugssager. Vi er nødt til at konfigurere klyngen på en sådan måde, at kun det aktive medlem af klyngen "ejer" eller reagerer på den flydende IP til enhver tid.

Vi tilføjer to klyngeressourcer: den flydende IP-adresse-ressource kaldet "floating_ip" og en ressource til Nginx-webserveren kaldet "http_server".

Start først med at tilføje floating_ip som følger. I dette eksempel er vores flydende IP-adresse 192.168.10.20.

$ sudo pcs resource create floating_ip ocf:heartbeat:IPaddr2 ip=192.168.10.20 cidr_netmask=24 op monitor interval=60s

hvor:

  • floating_ip: er navnet på tjenesten.
  • “ocf: heartbeat: IPaddr2”: fortæller Pacemaker hvilket script der skal bruges, IPaddr2 i dette tilfælde, hvilket navneområde det er i (pacemaker) og hvilken standard det er i overensstemmelse med ocf.
  • “op monitor interval = 60s”: beder Pacemaker om at kontrollere denne tjenestes helbred hvert minut ved at ringe til agentens monitorhandling.

Tilføj derefter den anden ressource med navnet http_server. Her er tjenestens ressourceagent ocf: hjerterytme: nginx.

$ sudo pcs resource create http_server ocf:heartbeat:nginx configfile="/etc/nginx/nginx.conf" op monitor timeout="20s" interval="60s"

Når du har tilføjet klyngetjenesterne, skal du udstede følgende kommando for at kontrollere status for ressourcer.

$ sudo pcs status resources

Når man ser på output af kommandoen, er de to tilføjede ressourcer: "floating_ip" og "http_server" er blevet vist. Tjenesten floating_ip er slået fra, fordi den primære node er i drift.

Hvis du har aktiveret firewall på dit system, skal du tillade al trafik til Nginx og alle tjenester med høj tilgængelighed gennem firewallen for korrekt kommunikation mellem noder:

-------------- CentOS 7 -------------- 
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=high-availability		
$ sudo firewall-cmd --reload

-------------- Ubuntu -------------- 
$ sudo ufw allow http	
$ sudo ufw allow high-availability						
$ sudo ufw reload 

Det sidste og vigtige trin er at teste, at vores opsætning med høj tilgængelighed fungerer. Åbn en webbrowser, og naviger til adressen 192.168.10.20, du skal se Nginx-standardsiden fra node2.example.com som vist på skærmbilledet.

For at simulere en fejl skal du køre følgende kommando for at stoppe klyngen på node2.example.com.

$ sudo pcs cluster stop http_server

Genindlæs derefter siden 192.168.10.20, du skal nu få adgang til Nginx-standardwebsiden fra node1.example.com.

Alternativt kan du simulere en fejl ved at fortælle tjenesten at stoppe direkte uden at stoppe klyngen på en hvilken som helst node ved hjælp af følgende kommando på en af noderne:

 
$ sudo crm_resource --resource http_server --force-stop 

Derefter skal du køre crm_mon i interaktiv tilstand (standard) inden for skærmintervallet på 2 minutter, du skal kunne se klyngen bemærke, at http_server mislykkedes og flytte den til en anden node.

For at dine klyngetjenester kan køre effektivt, skal du muligvis indstille nogle begrænsninger. Du kan se pc-man-siden (man pc'er) for en liste over alle brugskommandoer.

For mere information om Corosync og Pacemaker, se: https://clusterlabs.org/

I denne vejledning har vi vist det grundlæggende om, hvordan man distribuerer, konfigurerer og vedligeholder høj tilgængelighed/klyngedannelse/replikering i Ubuntu 16.04/18.04 og CentOS 7. Vi demonstrerede, hvordan man tilføjer Nginx HTTP-service til en klynge. Hvis du har nogle tanker at dele eller spørgsmål, så brug feedbackformularen nedenfor.