Hvordan konfigurere og vedlikeholde høy tilgjengelighet/klynger i Linux


Høy tilgjengelighet (HA) refererer ganske enkelt til kvaliteten på et system som skal fungere kontinuerlig uten feil over lang tid. HA-løsninger kan implementeres ved hjelp av maskinvare og/eller programvare, og en av de vanlige løsningene for å implementere HA er klynging.

I databehandling består en klynge av to eller flere datamaskiner (ofte kjent som noder eller medlemmer) som jobber sammen for å utføre en oppgave. I et slikt oppsett er det kun én node som gir tjenesten den eller de sekundære nodene som overtar hvis den svikter.

Klynger faller inn i fire hovedtyper:

  • Lagring: gi et konsistent filsystembilde på tvers av servere i en klynge, slik at serverne kan lese og skrive samtidig til et enkelt delt filsystem.
  • Høy tilgjengelighet: eliminer enkeltpunkter for feil og ved å feile tjenester fra en klyngennode til en annen i tilfelle en node blir inoperativ.
  • Lastbalansering: Send nettverkstjenesteforespørsler til flere klyngenoder for å balansere forespørselsbelastningen blant klyngenodene.
  • Høy ytelse: utfør parallell eller samtidig behandling, og bidrar dermed til å forbedre ytelsen til applikasjoner.

En annen mye brukt løsning for å gi HA er replikering (spesielt datareplikasjoner). Replikering er prosessen der en eller flere (sekundære) databaser kan holdes synkronisert med en enkelt primær (eller master) database.

For å sette opp en klynge trenger vi minst to servere. For formålet med denne veiledningen vil vi bruke to Linux-servere:

  • Node1: 192.168.10.10
  • Node2: 192.168.10.11

I denne artikkelen vil vi demonstrere det grunnleggende om hvordan du distribuerer, konfigurerer og vedlikeholder høy tilgjengelighet/clustering i Ubuntu 16.04/18.04 og CentOS 7. Vi vil demonstrere hvordan du legger til Nginx HTTP-tjenesten i klyngen.

Konfigurere lokale DNS-innstillinger på hver server

For at de to serverne skal kommunisere med hverandre, må vi konfigurere de riktige lokale DNS-innstillingene i filen /etc/hosts på begge serverne.

Åpne og rediger filen ved å bruke din favoritt kommandolinjeredigerer.

$ sudo vim /etc/hosts  

Legg til følgende oppføringer med faktiske IP-adresser til serverne dine.

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

Lagre endringene og lukk filen.

Installere Nginx Web Server

Installer nå Nginx webserver ved å bruke følgende kommandoer.

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

Når installasjonen er fullført, start Nginx-tjenesten for nå og aktiver den til å starte automatisk ved oppstart, og sjekk om den er oppe og kjører med systemctl-kommandoen.
På Ubuntu skal tjenesten startes automatisk umiddelbart etter at forhåndskonfigurasjonen av pakken er fullført, du kan ganske enkelt aktivere den.

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

Etter å ha startet Nginx-tjenesten, må vi lage tilpassede nettsider for å identifisere og teste operasjoner på begge serverne. Vi vil endre innholdet på 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

Installere og konfigurere Corosync og pacemaker

Deretter må 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 installasjonen er fullført, sørg for at pcs daemon kjører på begge serverne.

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

Under installasjonen opprettes det en systembruker kalt \hacluster. Så vi må sette opp autentiseringen som trengs for pc'er. La oss starte med å lage et nytt passord for \hacluster-brukeren, vi må bruke samme passord på alle servere:

$ sudo passwd hacluster

Deretter, på en av serverne (Node1), kjør følgende kommando for å sette opp autentiseringen som trengs for pcs.

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

Lag nå en klynge og fyll den med noen noder (klyngenavnet kan ikke overstige 15 tegn, i dette eksemplet har vi brukt eksempelklynge) på Node1-serveren.

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

Aktiver nå klyngen ved oppstart og start tjenesten.

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

Sjekk nå om klyngetjenesten er oppe og kjører ved å bruke følgende kommando.

$ sudo pcs status
OR
$ sudo crm_mon -1

Fra utdataene fra kommandoen ovenfor kan du se at det er en advarsel om ingen STONITH-enheter, men STONITH er fortsatt aktivert i klyngen. I tillegg er ingen klyngeressurser/tjenester konfigurert.

Det første alternativet er å deaktivere STONITH (eller Shoot The Other Node In The Head), gjerdeimplementeringen på Pacemaker.

Denne komponenten bidrar til å beskytte dataene dine mot å bli ødelagt av samtidig tilgang. For formålet med denne veiledningen vil vi deaktivere den siden vi ikke har konfigurert noen enheter.

For å slå av STONITH, kjør følgende kommando:

$ sudo pcs property set stonith-enabled=false

Deretter ignorerer du også Quorum-policyen ved å kjøre følgende kommando:

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

Etter å ha angitt alternativene ovenfor, kjør følgende kommando for å se egenskapslisten og sikre at alternativene ovenfor, stonith og quorumspolicyen er deaktivert.

$ sudo pcs property list

I denne delen skal vi se på hvordan du legger til en klyngressurs. Vi vil konfigurere en flytende IP som er IP-adressen som umiddelbart kan flyttes fra en server til en annen innenfor samme nettverk eller datasenter. Kort sagt, en flytende IP er et teknisk fellesbegrep som brukes for IP-er som ikke er strengt bundet til ett enkelt grensesnitt.

I dette tilfellet vil den bli brukt til å støtte failover i en klynge med høy tilgjengelighet. Husk at flytende IP-er ikke bare er for failover-situasjoner, de har noen få andre brukstilfeller. Vi må konfigurere klyngen på en slik måte at bare det aktive medlemmet av klyngen \eier eller svarer på den flytende IP-en til enhver tid.

Vi vil legge til to klyngeressurser: den flytende IP-adresseressursen kalt \floating_ip og en ressurs for Nginx-nettserveren kalt \http_server.

Start først med å legge til floating_ip som følger. I dette eksemplet er vår flytende 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: forteller Pacemaker hvilket skript som skal brukes, IPaddr2 i dette tilfellet, hvilket navneområde det er i (pacemaker) og hvilken standard det er i samsvar med ocf.
  • “op monitor interval=60s”: instruerer Pacemaker om å sjekke tilstanden til denne tjenesten hvert minutt ved å ringe agentens monitorhandling.

Legg deretter til den andre ressursen, kalt http_server. Her er ressursagent for tjenesten ocf:heartbeat: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 lagt til klyngetjenestene, utfør følgende kommando for å sjekke statusen til ressursene.

$ sudo pcs status resources

Når du ser på utdataene til kommandoen, er de to ekstra ressursene: \floating_ip og \http_server\ listet opp. Floating_ip-tjenesten er av fordi den primære noden er i drift.

Hvis du har brannmur aktivert på systemet ditt, må du tillate all trafikk til Nginx og alle tjenester med høy tilgjengelighet gjennom brannmuren for riktig kommunikasjon mellom 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 siste og viktige trinnet er å teste at oppsettet med høy tilgjengelighet fungerer. Åpne en nettleser og naviger til adressen 192.168.10.20. Du skal se standard Nginx-siden fra node2.example.com som vist på skjermbildet.

For å simulere en feil, kjør følgende kommando for å stoppe klyngen på node2.example.com.

$ sudo pcs cluster stop http_server

Last deretter inn siden på nytt på 192.168.10.20, du bør nå få tilgang til standard Nginx-nettsiden fra node1.example.com.

Alternativt kan du simulere en feil ved å fortelle tjenesten å stoppe direkte, uten å stoppe klyngen på noen node, ved å bruke følgende kommando på en av nodene:

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

Deretter må du kjøre crm_mon i interaktiv modus (standard), innenfor monitorintervallet på 2 minutter, bør du kunne se klyngen legge merke til at http_server mislyktes og flytte den til en annen node.

For at klyngetjenestene dine skal kjøre effektivt, må du kanskje sette noen begrensninger. Du kan se pcs man-siden (man pcs) for en liste over alle brukskommandoer.

For mer informasjon om Corosync og Pacemaker, sjekk ut: https://clusterlabs.org/

I denne veiledningen har vi vist det grunnleggende om hvordan du distribuerer, konfigurerer og vedlikeholder høy tilgjengelighet/klynger/replikering i Ubuntu 16.04/18.04 og CentOS 7. Vi demonstrerte hvordan du legger til Nginx HTTP-tjeneste i en klynge. Hvis du har noen tanker å dele eller spørsmål, bruk tilbakemeldingsskjemaet nedenfor.