Kuinka määrittää ja ylläpitää korkeaa käytettävyyttä/klusterointia Linuxissa


High Availability (HA) viittaa yksinkertaisesti järjestelmän laatuun, joka toimii jatkuvasti ilman vikoja pitkän ajan. HA-ratkaisut voidaan toteuttaa laitteistolla ja/tai ohjelmistolla, ja yksi yleisimmistä ratkaisuista HA:n toteuttamiseen on klusterointi.

Tietojenkäsittelyssä klusteri koostuu kahdesta tai useammasta tietokoneesta (tunnetaan yleisesti nimellä solmut tai jäsenet), jotka toimivat yhdessä suorittaakseen tehtävän. Tällaisessa asennuksessa vain yksi solmu tarjoaa palvelun ja toissijaiset solmut ottavat haltuunsa, jos se epäonnistuu.

Klusterit jakautuvat neljään päätyyppiin:

  • Tallennus: Tarjoa yhtenäinen tiedostojärjestelmäkuva klusterin palvelimille, jolloin palvelimet voivat samanaikaisesti lukea ja kirjoittaa yhteen jaettuun tiedostojärjestelmään.
  • Korkea käytettävyys: eliminoi yksittäiset vikakohdat ja siirtämällä palvelut klusterin solmusta toiseen, jos solmu menee epäkuntoon.
  • Kuormituksen tasapainotus: lähetä verkkopalvelupyynnöt useille klusterin solmuille pyyntökuormituksen tasapainottamiseksi klusterin solmujen välillä.
  • Suuri suorituskyky: suorita rinnakkaista tai samanaikaista käsittelyä, mikä auttaa parantamaan sovellusten suorituskykyä.

Toinen laajalti käytetty ratkaisu HA:n tarjoamiseen on replikointi (erityisesti tietojen replikaatiot). Replikointi on prosessi, jolla yksi tai useampi (toissijainen) tietokanta voidaan pitää synkronoituna yhden ensisijaisen (tai pää-) tietokannan kanssa.

Klusterin määrittämiseksi tarvitsemme vähintään kaksi palvelinta. Tässä oppaassa käytämme kahta Linux-palvelinta:

  • Solmu1: 192.168.10.10
  • Node2: 192.168.10.11

Tässä artikkelissa esittelemme perusasiat korkean käytettävyyden/klusteroinnin käyttöönotosta, määrittämisestä ja ylläpitämisestä Ubuntu 16.04/18.04:ssä ja CentOS 7:ssä. Näytämme kuinka Nginx HTTP -palvelu lisätään klusteriin.

Paikallisten DNS-asetusten määrittäminen jokaiselle palvelimelle

Jotta kaksi palvelinta voivat kommunikoida keskenään, meidän on määritettävä asianmukaiset paikalliset DNS-asetukset molempien palvelimien /etc/hosts-tiedostossa.

Avaa ja muokkaa tiedostoa käyttämällä suosikkikomentorivieditoria.

sudo vim /etc/hosts  

Lisää seuraavat merkinnät palvelimiesi todellisilla IP-osoitteilla.

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

Tallenna muutokset ja sulje tiedosto.

Nginx-verkkopalvelimen asentaminen

Asenna nyt Nginx-verkkopalvelin käyttämällä seuraavia komentoja.

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

Kun asennus on valmis, käynnistä Nginx-palvelu toistaiseksi ja ota se käyttöön automaattisesti käynnistyksen yhteydessä. Tarkista sitten, onko se käynnissä systemctl-komennolla.
Ubuntussa palvelun pitäisi käynnistyä automaattisesti heti paketin esimääritysten valmistuttua, voit ottaa sen käyttöön.

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

Nginx-palvelun käynnistämisen jälkeen meidän on luotava mukautettuja verkkosivuja molempien palvelimien toimintojen tunnistamiseksi ja testaamiseksi. Muokkaamme Nginx-oletushakemistosivun sisältöä kuvan mukaisesti.

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

Corosyncin ja sydämentahdistimen asentaminen ja määrittäminen

Seuraavaksi meidän on asennettava Pacemaker, Corosync ja PC jokaiseen solmuun seuraavasti.

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

Kun asennus on valmis, varmista, että pcs-daemon on käynnissä molemmilla palvelimilla.

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

Klusterin luominen

Asennuksen aikana luodaan järjestelmän käyttäjä nimeltä "hacluster". Joten meidän on määritettävä tietokoneille tarvittava todennus. Aloitetaan luomalla uusi salasana "hacluster" -käyttäjälle. Meidän on käytettävä samaa salasanaa kaikissa palvelimissa:

sudo passwd hacluster

Suorita seuraavaksi jollakin palvelimista (Node1) seuraava komento määrittääksesi tietokoneille tarvittava todennus.

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

Luo nyt klusteri ja täytä se joillakin solmuilla (klusterin nimi ei saa ylittää 15 merkkiä, tässä esimerkissä olemme käyttäneet esimerkkiklusteria) Node1-palvelimella.

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

Ota nyt klusteri käyttöön käynnistyksen yhteydessä ja käynnistä palvelu.

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

Tarkista nyt, onko klusteripalvelu käytössä ja käynnissä seuraavalla komennolla.

sudo pcs status
OR
sudo crm_mon -1

Yllä olevan komennon tulosteesta näet, että STONITH-laitteita ei ole varoitettu, mutta STONITH on edelleen käytössä klusterissa. Lisäksi klusterin resursseja/palveluita ei ole määritetty.

Klusteriasetusten määrittäminen

Ensimmäinen vaihtoehto on poistaa käytöstä STONITH (tai Shoot The Other Node In The Head), joka on Pacemaker-suojaus.

Tämä komponentti auttaa suojaamaan tietojasi samanaikaisen käytön aiheuttamalta turmeltumiselta. Tätä opasta varten poistamme sen käytöstä, koska emme ole määrittäneet laitteita.

Poista STONITH käytöstä suorittamalla seuraava komento:

sudo pcs property set stonith-enabled=false

Ohita seuraavaksi myös Päätösvaltaisuus-käytäntö suorittamalla seuraava komento:

sudo pcs property set no-quorum-policy=ignore

Kun olet asettanut yllä olevat asetukset, suorita seuraava komento nähdäksesi ominaisuusluettelon ja varmistaaksesi, että yllä olevat vaihtoehdot, stonith ja quorum policy on poistettu käytöstä.

sudo pcs property list

Resurssi-/klusteripalvelun lisääminen

Tässä osiossa tarkastellaan klusterin resurssin lisäämistä. Määritämme kelluvan IP-osoitteen, joka on IP-osoite, joka voidaan siirtää välittömästi palvelimelta toiselle samassa verkossa tai datakeskuksessa. Lyhyesti sanottuna kelluva IP on tekninen yleinen termi, jota käytetään IP-osoitteille, jotka eivät ole tiukasti sidottu yhteen rajapintaan.

Tässä tapauksessa sitä käytetään tukemaan vikasietoa korkean käytettävyyden klusterissa. Muista, että kelluvat IP-osoitteet eivät ole vain vikasietotilanteita varten, vaan niillä on muutamia muita käyttötapauksia. Meidän on määritettävä klusteri siten, että vain klusterin aktiivinen jäsen "omistaa" kelluvan IP-osoitteen tai vastaa siihen kulloinkin.

Lisäämme kaksi klusteriresurssia: kelluvan IP-osoiteresurssin "floating_ip" ja Nginx-verkkopalvelimen resurssin "http_server".

Aloita lisäämällä floating_ip seuraavasti. Tässä esimerkissä kelluva IP-osoitteemme on 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

missä :

  • floating_ip: on palvelun nimi.
  • "ocf:heartbeat:IPaddr2": kertoo tahdistimelle, mitä komentosarjaa tulee käyttää, tässä tapauksessa IPaddr2:ta, missä nimiavaruudessa se on (tahdistin) ja minkä standardin se on ocf.
  • "op monitor interval=60s ": kehottaa sydämentahdistinta tarkistamaan tämän palvelun kunnon minuutin välein kutsumalla agentin valvontatoimintoa.

Lisää sitten toinen resurssi, nimeltä http_server. Tässä palvelun resurssiagentti on ocf:heartbeat:nginx.

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

Kun olet lisännyt klusteripalvelut, tarkista resurssien tila antamalla seuraava komento.

sudo pcs status resources

Tarkasteltaessa komennon tulosta, kaksi lisättyä resurssia: "floating_ip" ja "http_server" on listattu. Kelluva_ip-palvelu on pois päältä, koska ensisijainen solmu on toiminnassa.

Jos palomuuri on käytössä järjestelmässäsi, sinun on sallittava kaikki liikenne Nginxiin ja kaikki korkean käytettävyyden palvelut palomuurin kautta, jotta solmujen välinen viestintä on asianmukaista:

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

Korkean käytettävyyden/klusteroinnin testaus

Viimeinen ja tärkeä vaihe on testata, että korkean käytettävyyden asetukset toimivat. Avaa verkkoselain ja siirry osoitteeseen 192.168.10.20. Sinun pitäisi nähdä Nginx-oletussivu osoitteesta node2.example.com, kuten kuvakaappauksessa näkyy.

Voit simuloida virhettä suorittamalla seuraavan komennon pysäyttääksesi klusterin osoitteessa node2.example.com.

sudo pcs cluster stop http_server

Lataa sitten sivu uudelleen osoitteessa 192.168.10.20. Nyt sinun pitäisi käyttää Nginx-oletusverkkosivua osoitteesta node1.example.com.

Vaihtoehtoisesti voit simuloida virhettä käskemällä palvelua pysähtymään suoraan, pysäyttämättä klusteria missään solmussa, käyttämällä seuraavaa komentoa jossakin solmussa:

 
sudo crm_resource --resource http_server --force-stop 

Sitten sinun on suoritettava crm_mon interaktiivisessa tilassa (oletus) 2 minuutin monitorointivälin sisällä. Sinun pitäisi nähdä klusterin ilmoitus, että http_palvelin epäonnistui, ja siirry sen toiseen solmuun.

Jotta klusteripalvelusi toimisivat tehokkaasti, saatat joutua asettamaan joitain rajoituksia. Näet pcs-man-sivun (man kpl) luettelon kaikista käyttökomennoista.

Lisätietoja Corosyncistä ja Pacemakerista on osoitteessa https://clusterlabs.org/

Yhteenveto

Tässä oppaassa olemme näyttäneet perusasiat korkean käytettävyyden/klusteroinnin/replikoinnin käyttöönotosta, määrittämisestä ja ylläpitämisestä Ubuntu 16.04/18.04:ssä ja CentOS 7:ssä. Osoitimme, kuinka Nginx HTTP -palvelu lisätään klusteriin. Jos sinulla on jaettavaa ajatuksia tai kysymyksiä, käytä alla olevaa palautelomaketta.