Wéi konfiguréieren an erhalen High Disponibilitéit/Clustering am Linux


Héich Disponibilitéit (HA) bezitt sech einfach op eng Qualitéit vun engem System fir kontinuéierlech ouni Feeler fir eng laang Zäit ze bedreiwen. HA Léisunge kënne mat Hardware an/oder Software implementéiert ginn, an eng vun de gemeinsame Léisunge fir HA ëmzesetzen ass Clustering.

Am Informatik besteet e Stärekoup aus zwee oder méi Computeren (allgemeng bekannt als Noden oder Memberen) déi zesumme schaffen fir eng Aufgab auszeféieren. An esou engem Setup liwwert nëmmen een Node de Service mat dem sekundären Node (en) iwwerhuelen wann et klappt.

Cluster falen a véier Haaptarten:

  • Lagerung: stellt e konsequent Dateiesystembild iwwer Serveren an engem Cluster zur Verfügung, sou datt d'Servere gläichzäiteg an engem eenzege gemeinsame Dateiesystem liesen a schreiwen.
  • Héich Verfügbarkeet: eliminéiert eenzel Punkte vum Echec an duerch Feeler iwwer Servicer vun engem Cluster Node op en aneren am Fall wou en Node net funktionnéiert.
  • Load Balancing: verschéckt Netzwierkservice Ufroe fir verschidde Clusternoden fir d'Ufrobelaaschtung tëscht de Clusternoden ze balanséieren.
  • Héich Leeschtung: Maacht parallel oder gläichzäiteg Veraarbechtung aus, hëlleft domat d'Performance vun Uwendungen ze verbesseren.

Eng aner wäit benotzt Léisung fir HA ze liwweren ass Replikatioun (speziell Datereplikatioune). Replikatioun ass de Prozess, duerch deen eng oder méi (sekundär) Datenbanken mat enger eenzeger primärer (oder Master) Datebank synchroniséiert kënne ginn.

Fir e Cluster opzestellen, brauche mir op d'mannst zwee Serveren. Fir den Zweck vun dësem Guide benotze mir zwee Linux Server:

  • Node1: 192.168.10.10
  • Node2: 192.168.10.11

An dësem Artikel wäerte mir d'Grondlage weisen, wéi Dir eng héich Disponibilitéit/Clustering an Ubuntu 16.04/18.04 an CentOS 7 z'installéieren, konfiguréieren an erhalen.

Lokal DNS Astellungen op all Server konfiguréieren

Fir datt déi zwee Server matenee kommunizéieren, musse mir déi entspriechend lokal DNS-Astellungen an der /etc/hosts Datei op béide Server konfiguréieren.

Öffnen an änneren d'Datei mat Ärem Liiblings Kommandozeil Editor.

$ sudo vim /etc/hosts  

Füügt déi folgend Entréen mat aktuellen IP Adresse vun Äre Serveren.

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

Späichert d'Ännerungen a schléisst d'Datei.

Nginx Web Server installéieren

Installéiert elo den Nginx Webserver mat de folgende Kommandoen.

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

Soubal d'Installatioun fäerdeg ass, start den Nginx Service fir elo an aktivéiert et automatesch bei der Bootzäit unzefänken, kontrolléiert dann ob et mat dem Systemctl Kommando leeft.
Op Ubuntu soll de Service automatesch gestart ginn nodeems d'Package Pre-Konfiguratioun fäerdeg ass, Dir kënnt et einfach aktivéieren.

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

Nodeems mir den Nginx Service gestart hunn, musse mir personaliséiert Websäiten erstellen fir Operatiounen op béide Server z'identifizéieren an ze testen. Mir änneren den Inhalt vun der Standard Nginx Index Säit wéi gewisen.

$ 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

Corosync a Pacemaker installéieren a konfiguréieren

Als nächst musse mir Pacemaker, Corosync a Pcs op all Node installéieren wéi follegt.

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

Soubal d'Installatioun fäerdeg ass, gitt sécher datt pcs Daemon op béide Server leeft.

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

Wärend der Installatioun gëtt e Systembenotzer mam Numm hacluster erstallt, also musse mir d'Authentifikatioun opbauen, déi fir pcs néideg ass. Fänke mer un mat engem neie Passwuert fir den hacluster Benotzer, mir mussen datselwecht Passwuert benotzen all Serveren:

$ sudo passwd hacluster

Als nächst, op engem vun de Serveren (Node1), fuert de folgende Kommando fir d'Authentifikatioun opzemaachen, déi fir PCs néideg ass.

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

Erstellt elo e Cluster a populéiert et mat e puer Noden (de Clusternumm kann net méi wéi 15 Charaktere sinn, an dësem Beispill hu mir Beispillcluster benotzt) um Node1 Server.

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

Elo aktivéiert de Cluster beim Boot an start de Service.

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

Elo kontrolléiert ob de Clusterservice op a leeft mat dem folgenden Kommando.

$ sudo pcs status
OR
$ sudo crm_mon -1

Vun der Ausgab vum uewe genannte Kommando kënnt Dir gesinn datt et eng Warnung gëtt iwwer keng STONITH Geräter awer de STONITH ass nach ëmmer am Cluster aktivéiert. Zousätzlech si keng Clusterressourcen/Servicer konfiguréiert.

Déi éischt Optioun ass STONITH auszeschalten (oder Shoot The Other Node In The Head), d'Fechterimplementatioun um Pacemaker.

Dëse Bestanddeel hëlleft Är Donnéeën ze schützen géint duerch gläichzäiteg Zougang korruptéiert ze ginn. Fir den Zweck vun dësem Guide wäerte mir et auszeschalten well mir keng Apparater konfiguréiert hunn.

Fir STONITH auszeschalten, fuert de folgende Kommando:

$ sudo pcs property set stonith-enabled=false

Als nächst ignoréiert och d'Quorum Politik andeems Dir de folgende Kommando ausféiert:

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

Nodeems Dir déi uewe genannte Optiounen agestallt hutt, fuert de folgende Kommando fir d'Eegeschaftslëscht ze gesinn a sécherzestellen datt déi uewe genannte Optiounen, stonith an d'Quorumpolitik deaktivéiert sinn.

$ sudo pcs property list

An dëser Sektioun wäerte mir kucken wéi Dir eng Clusterressource derbäi kënnt. Mir konfiguréieren eng schwiewend IP, déi d'IP Adress ass, déi direkt vun engem Server op en aneren am selwechte Netzwierk oder Datenzenter geplënnert ka ginn. Kuerz gesot, eng schwiewend IP ass en technesche gemeinsame Begrëff, benotzt fir IPs déi net strikt un eng eenzeg Interface gebonnen sinn.

An dësem Fall gëtt et benotzt fir Failover an engem Cluster mat héijer Disponibilitéit z'ënnerstëtzen. Denkt drun datt schwiewend IPs net nëmme fir Failover Situatiounen sinn, si hunn e puer aner Benotzungsfäll. Mir mussen de Cluster esou konfiguréieren datt nëmmen den aktive Member vum Cluster besëtzt oder op déi schwiewend IP zu all Moment reagéiert.

Mir addéieren zwee Clusterressourcen: déi schwiewend IP Adressressource mam Numm floating_ip an eng Ressource fir den Nginx Webserver mam Numm http_server.

Fänkt als éischt un andeems Dir de Floating_ip bäidréit wéi follegt. An dësem Beispill ass eis schwiewend IP Adress 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

wou:

  • floating_ip: ass den Numm vum Service.
  • \ocf:heartbeat:IPaddr2: seet dem Pacemaker wéi ee Skript ze benotzen, IPaddr2 an dësem Fall, a wéi engem Nummraum et ass (Pacemaker) a wéi engem Standard et entsprécht ocf.
  • op monitor interval=60s: instruéiert de Pacemaker d'Gesondheet vun dësem Service all Minutt ze kontrolléieren andeems de Agent seng Monitoraktioun urufft.

Füügt dann déi zweet Ressource dobäi, mam Numm http_server. Hei ass de Ressource Agent vum Service ocf:heartbeat:nginx.

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

Wann Dir d'Clusterservicer bäigefüügt hutt, gitt de folgende Kommando aus fir de Status vun de Ressourcen ze kontrolléieren.

$ sudo pcs status resources

Wann Dir d'Ausgab vum Kommando kuckt, sinn déi zwee zousätzlech Ressourcen: \floating_ip an \http_server\ opgelëscht. De Floating_ip Service ass aus well de primäre Node a Betrib ass.

Wann Dir Firewall op Ärem System aktivéiert hutt, musst Dir all Traffic op Nginx an all High Disponibilitéitsservicer duerch d'Firewall erlaben fir eng korrekt Kommunikatioun tëscht Noden:

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

De leschte a wichtege Schrëtt ass ze testen datt eis héich Disponibilitéitssetup funktionnéiert. Öffnen e Webbrowser a navigéiert op d'Adress 192.168.10.20 Dir sollt d'Standard Nginx Säit vun der node2.example.com gesinn wéi am Screenshot gewisen.

Fir e Feeler ze simuléieren, lafen de folgende Kommando fir de Cluster op der node2.example.com ze stoppen.

$ sudo pcs cluster stop http_server

Da lued d'Säit op 192.168.10.20 erof, Dir sollt elo op d'Standard Nginx Websäit vun der node1.example.com kommen.

Alternativ kënnt Dir e Feeler simuléieren andeems Dir de Service seet direkt ze stoppen, ouni de Cluster op all Node ze stoppen, andeems Dir de folgende Kommando op engem vun den Noden benotzt:

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

Da musst Dir crm_mon am interaktive Modus lafen (de Standard), am Monitorintervall vun 2 Minutten, sollt Dir fäeg sinn de Cluster ze gesinn datt den http_server gescheitert ass an en an en aneren Node réckelen.

Fir datt Äre Clusterservicer effizient lafen, musst Dir vläicht e puer Aschränkungen setzen. Dir kënnt d'PCs Mann Säit gesinn (Man PCs) fir eng Lëscht vun all Benotzungsbefehl.

Fir méi Informatiounen iwwer Corosync a Pacemaker, kuckt op: https://clusterlabs.org/

An dësem Guide hu mir d'Grondlage gewisen, wéi Dir eng héich Disponibilitéit/Clustering/Replikatioun an Ubuntu 16.04/18.04 an CentOS 7 z'installéieren, konfiguréieren an erhalen. Wann Dir Gedanken hutt fir ze deelen oder Froen, benotzt de Feedbackformular hei ënnen.