Com configurar i mantenir l'alta disponibilitat/agrupament a Linux


L'alta disponibilitat (HA) simplement es refereix a la qualitat d'un sistema per funcionar contínuament sense fallar durant un llarg període de temps. Les solucions d'HA es poden implementar mitjançant maquinari i/o programari, i una de les solucions habituals per implementar HA és l'agrupació.

En informàtica, un clúster està format per dos o més ordinadors (comunament coneguts com a nodes o membres) que treballen junts per realitzar una tasca. En aquesta configuració, només un node proporciona el servei i els nodes secundaris prenen el control si falla.

Els clústers es divideixen en quatre tipus principals:

  • Emmagatzematge: proporcioneu una imatge coherent del sistema de fitxers entre els servidors d'un clúster, cosa que permet als servidors llegir i escriure simultàniament en un únic sistema de fitxers compartit.
  • Alta disponibilitat: elimineu els punts d'error únics i, en cas que un node esdevingui inoperant, fes una fallada dels serveis d'un node de clúster a un altre.
  • Equilibri de càrrega: envia sol·licituds de servei de xarxa a diversos nodes de clúster per equilibrar la càrrega de sol·licitud entre els nodes de clúster.
  • Alt rendiment: duu a terme processaments paral·lels o concurrents, ajudant així a millorar el rendiment de les aplicacions.

Una altra solució àmpliament utilitzada per proporcionar HA és la replicació (específicament les rèpliques de dades). La replicació és el procés pel qual una o més bases de dades (secundàries) es poden mantenir sincronitzades amb una única base de dades primària (o mestra).

Per configurar un clúster, necessitem almenys dos servidors. Per als propòsits d'aquesta guia, utilitzarem dos servidors Linux:

  • Node1: 192.168.10.10
  • Node2: 192.168.10.11

En aquest article, demostrarem els fonaments bàsics de com desplegar, configurar i mantenir una alta disponibilitat/agrupament a Ubuntu 16.04/18.04 i CentOS 7. Demostrarem com afegir el servei HTTP Nginx al clúster.

Configuració de la configuració de DNS local a cada servidor

Per tal que els dos servidors es comuniquin entre ells, hem de configurar els paràmetres DNS locals adequats al fitxer /etc/hosts dels dos servidors.

Obriu i editeu el fitxer amb el vostre editor de línia d'ordres preferit.

$ sudo vim /etc/hosts  

Afegiu les entrades següents amb les adreces IP reals dels vostres servidors.

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

Deseu els canvis i tanqueu el fitxer.

Instal·lació del servidor web Nginx

Ara instal·leu el servidor web Nginx mitjançant les ordres següents.

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

Un cop finalitzada la instal·lació, inicieu el servei Nginx de moment i activeu-lo perquè s'iniciï automàticament en el moment d'arrencar i, a continuació, comproveu si està en funcionament mitjançant l'ordre systemctl.
A Ubuntu, el servei s'hauria d'iniciar automàticament immediatament després que s'hagi completat la preconfiguració del paquet, simplement podeu activar-lo.

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

Després d'iniciar el servei Nginx, hem de crear pàgines web personalitzades per identificar i provar les operacions als dos servidors. Modificarem el contingut de la pàgina d'índex Nginx predeterminada tal com es mostra.

$ 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

Instal·lació i configuració de Corosync i Pacemaker

A continuació, hem d'instal·lar Pacemaker, Corosync i Pcs a cada node de la manera següent.

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

Un cop finalitzada la instal·lació, assegureu-vos que el dimoni pcs s'està executant als dos servidors.

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

Durant la instal·lació, es crea un usuari del sistema anomenat \hacluster. Per tant, hem de configurar l'autenticació necessària per als ordinadors. Comencem creant una nova contrasenya per a l'usuari \hacluster, hem d'utilitzar la mateixa contrasenya a tots els servidors:

$ sudo passwd hacluster

A continuació, en un dels servidors (Node1), executeu l'ordre següent per configurar l'autenticació necessària per als ordinadors.

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

Ara creeu un clúster i ompliu-lo amb alguns nodes (el nom del clúster no pot superar els 15 caràcters, en aquest exemple, hem utilitzat examplecluster) al servidor Node1.

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

Ara activeu el clúster a l'arrencada i inicieu el servei.

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

Ara comproveu si el servei de clúster està en funcionament mitjançant l'ordre següent.

$ sudo pcs status
OR
$ sudo crm_mon -1

A la sortida de l'ordre anterior, podeu veure que hi ha un avís sobre no hi ha dispositius STONITH, encara que STONITH encara està habilitat al clúster. A més, no s'ha configurat cap recurs/servei del clúster.

La primera opció és desactivar STONITH (o disparar a l'altre node al cap), la implementació d'esgrima a Pacemaker.

Aquest component ajuda a protegir les vostres dades contra l'accés concurrent. Als efectes d'aquesta guia, la desactivarem ja que no hem configurat cap dispositiu.

Per desactivar STONITH, executeu l'ordre següent:

$ sudo pcs property set stonith-enabled=false

A continuació, també ignoreu la política de quòrum executant l'ordre següent:

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

Després de configurar les opcions anteriors, executeu l'ordre següent per veure la llista de propietats i assegureu-vos que les opcions anteriors, Stonith i la política de quòrum estiguin desactivades.

$ sudo pcs property list

En aquesta secció, veurem com afegir un recurs de clúster. Configurarem una IP flotant que és l'adreça IP que es pot moure instantàniament d'un servidor a un altre dins de la mateixa xarxa o centre de dades. En resum, una IP flotant és un terme tècnic comú, utilitzat per a les IP que no estan lligades estrictament a una única interfície.

En aquest cas, s'utilitzarà per donar suport a la migració per error en un clúster d'alta disponibilitat. Tingueu en compte que les IP flotants no són només per a situacions de failover, sinó que tenen alguns altres casos d'ús. Hem de configurar el clúster de tal manera que només el membre actiu del clúster \propietari o respongui a la IP flotant en un moment donat.

Afegirem dos recursos de clúster: el recurs d'adreça IP flotant anomenat \floating_ip i un recurs per al servidor web Nginx anomenat \http_server.

Primer comenceu afegint el floating_ip de la manera següent. En aquest exemple, la nostra adreça IP flotant és 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

on:

  • floating_ip: és el nom del servei.
  • \ocf:heartbeat:IPaddr2: indica a Pacemaker quin script ha d'utilitzar, IPaddr2 en aquest cas, en quin espai de noms es troba (marcapassos) i amb quin estàndard s'ajusta a ocf.
  • “interval del monitor operatiu=60 s”: indica a Pacemaker que comprovi l'estat d'aquest servei cada minut trucant a l'acció del monitor de l'agent.

A continuació, afegiu el segon recurs, anomenat http_server. Aquí, l'agent de recursos del servei és ocf:heartbeat:nginx.

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

Un cop hàgiu afegit els serveis del clúster, emeteu l'ordre següent per comprovar l'estat dels recursos.

$ sudo pcs status resources

Mirant la sortida de l'ordre, s'han llistat els dos recursos afegits: \floating_ip i \http_server. El servei floating_ip està desactivat perquè el node principal està en funcionament.

Si teniu el tallafoc habilitat al vostre sistema, heu de permetre tot el trànsit a Nginx i tots els serveis d'alta disponibilitat a través del tallafoc per a una comunicació adequada entre els nodes:

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

El pas final i important és comprovar que la nostra configuració d'alta disponibilitat funciona. Obriu un navegador web i navegueu a l'adreça 192.168.10.20, hauríeu de veure la pàgina Nginx predeterminada des de node2.example.com tal com es mostra a la captura de pantalla.

Per simular un error, executeu l'ordre següent per aturar el clúster a node2.example.com.

$ sudo pcs cluster stop http_server

A continuació, torneu a carregar la pàgina a 192.168.10.20, ara hauríeu d'accedir a la pàgina web predeterminada de Nginx des de node1.example.com.

Alternativament, podeu simular un error dient-li al servei que s'aturi directament, sense aturar el clúster en cap node, utilitzant l'ordre següent en un dels nodes:

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

Aleshores, haureu d'executar crm_mon en mode interactiu (per defecte), dins de l'interval del monitor de 2 minuts, hauríeu de poder veure l'avís del clúster que http_server ha fallat i moure'l a un altre node.

Perquè els vostres serveis de clúster funcionin de manera eficient, és possible que hàgiu d'establir algunes limitacions. Podeu veure la pàgina man de pcs (man pcs) per obtenir una llista de totes les ordres d'ús.

Per obtenir més informació sobre Corosync i Pacemaker, consulteu: https://clusterlabs.org/

En aquesta guia, hem mostrat els conceptes bàsics de com desplegar, configurar i mantenir una alta disponibilitat/clúster/replicació a Ubuntu 16.04/18.04 i CentOS 7. Hem demostrat com afegir el servei HTTP Nginx a un clúster. Si teniu alguna reflexió per compartir o pregunta, feu servir el formulari de comentaris que trobareu a continuació.