Keepalived konfigurira visoko dostopnost in plavajoče IP v CentOS 7

V tem članku bomo pogledali konfiguriranje varnostne konfiguracije dveh proxy strežnikov za lignje, tako da lahko uporabniki dostopajo do interneta iz korporativnega omrežja s preprostim uravnoteženjem obremenitve prek Round Robin DNS. Če želite zgraditi varnostno konfiguracijo, bomo ustvarili skupino HA s pomočjo keepalived.

HA grozd - To je skupina strežnikov z vgrajenim odpuščanjem, ki je ustvarjena za zmanjšanje izpadov aplikacije v primeru težav s strojno ali programsko opremo enega od članov skupine. Na podlagi te opredelitve je za delovanje grozda HA potrebno izvesti naslednje:

  • Preverjanje stanja strežnikov;
  • Samodejno preklapljanje virov v primeru okvare strežnika;

Obe nalogi omogočata ohranitev. Keepalived - sistemski demon v sistemih Linux, ki omogoča organiziranje napak v storitvi in ​​izravnavo obremenitve. Odstopanje napak je doseženo zaradi "plavajočega" naslova IP, ki v primeru okvare glavnega preklopi na rezervni strežnik. Protokol se uporablja za samodejno preklapljanje naslovov IP med strežniki VRRP (Virtual Router Redundancy Protocol), je standardiziran, opisan v RFC (https://www.ietf.org/rfc/rfc2338.txt).

Vsebina:

  • Načela VRRP
  • Namestite in konfigurirajte zaščitni program v CentOS-u
  • Keepalived: spremljajte zdravje aplikacij in vmesnikov
  • Keepalived: preizkus preklopa

Načela VRRP

Najprej morate upoštevati teorijo in osnovne definicije protokola VRRP.

  • VIP - Virtualni IP, virtualni IP naslov, ki lahko samodejno preklopi med strežniki v primeru okvare;
  • Master - strežnik, na katerem je trenutno aktiven VIP;
  • Varnostno kopiranje - strežniki, na katere se VIP preklopi, če čarovnik ne uspe;
  • VRID - ID navideznega usmerjevalnika, strežniki, združeni s skupnim virtualnim IP (VIP), tvorijo tako imenovani virtualni usmerjevalnik, katerega edinstven identifikator sprejme vrednosti od 1 do 255. Strežnik lahko hkrati sestavlja več VRID-ov, z edinstvenimi virtualnimi naslovi IP za vsak VRID.

Splošni algoritem dela:

  • Glavni strežnik pošlje pakete VRRP v rezerviranem naslovu 224.0.0.18 oddanega večkastnega (multicast) oddajanja v določenem intervalu in vsi podrejeni strežniki poslušajo ta naslov. Poštno pošiljanje več sporočil je, če je pošiljatelj eden in je lahko veliko prejemnikov.
    Je pomembno. Da bi strežniki lahko delovali v večkastnem načinu, mora omrežna oprema podpirati prenos multicast prometa.
  • Če podrejeni strežnik ne prejme paketov, začne postopek izbire glavnega strežnika in če prednostno preide v glavno stanje, aktivira VIP in strupe brezplačni ARP. Brezpogojni ARP je posebna vrsta odgovora ARP, ki posodobi tabelo MAC na povezana stikala, da vas obvesti o spremembi lastništva virtualnega naslova IP in mac naslova za preusmeritev prometa.

Namestite in konfigurirajte zaščitni program v CentOS-u

Namestitev in konfiguracija bosta izvedeni na primeru strežniki proxy-serv01 in proxy-serv02 na Centos 7 z nameščenimi lignji. V naši shemi bomo uporabili najpreprostejšo metodo uravnavanja obremenitve (uravnoteženje) - Round Robin DNS. Ta metoda predvideva, da je za eno ime v DNS registriranih več naslovov DNS, odjemalci pa na zahtevo prejmejo en naslov hkrati in nato še enega. Zato bomo potrebovali dva virtualna naslova IP, ki bosta registrirana v DNS z istim imenom in na katere bodo stranke na koncu stopile v stik. Omrežni diagram:

Vsak Linux strežnik ima dva fizična omrežna vmesnika: eth1 z belim IP naslovom in dostopom do interneta ter eth0 v lokalnem omrežju.

Kot pravi IP strežniki se uporabljajo naslednji naslovi:
192.168.2.251 - za proxy-server01
192.168.2.252 - za proxy-server02

Naslednji se uporabljajo kot navidezni IP naslovi, ki se bodo v primeru okvar samodejno preklopili med strežniki:
192.168.2.101
192.168.2.102

Je pomembno. Pri nastavitvi VRRP-ja resnični naslov strežnika ne uporablja kot naslov za virtualni IP, saj bo v primeru okvare njegov naslov prestavljen na sosednji, po obnovi pa bo izoliran iz omrežja. Stvar je v tem, da morate vrniti svoj naslov, če želite poslati paket v omrežje VRRP, vendar ne bo nobenega IP naslova, s katerega bi ga bilo mogoče storiti.

Na ukazni strežnik namestite paket, ki je ohranjen, z uporabo ukaza:

namestite keepalived

Ko je namestitev končana na obeh strežnikih, uredite konfiguracijsko datoteko

/etc/keepalived/keepalived.conf

Barvno poudarjene črte z različnimi parametri:

na strežniku proxy-serv01na strežniku proxy-serv02

Možnosti bomo podrobneje analizirali:

  • vrrp_instanca - Odsek za določitev primerka VRRP;
  • stanje - začetno stanje ob zagonu;
  • vmesnik - vmesnik, na katerem se bo izvajal VRRP;
  • virtual_router_id - edinstven identifikator primerka VRRP, se mora ujemati na vseh strežnikih;
  • prednost - nastavi prednost pri izbiri MASTER, strežnik z najvišjo prioriteto postane MASTER;
  • virtualna_predstavka - blok virtualnih naslovov IP, ki bodo aktivni na strežniku v stanju MASTER. Mora se ujemati na vseh strežnikih znotraj primerka VRRP.
Opomba. Najdete lahko veliko primerov, v katerih se uporablja možnost VRRP overjanje. Vendar v dokumentaciji keepalived omenjeno je bilo, da je bila avtentikacija odstranjena iz VRRPv2 v specifikaciji RFC3768 (https://tools.ietf.org/html/rfc3768) leta 2004, saj ni zagotavljala resnične varnosti. Priporočljivo je, da se izognete uporabi te možnosti..

Če trenutna omrežna konfiguracija ne dovoljuje večpredstavnosti, ima keepalived možnost uporabe enicast, tj. pošljejo pakete VRRP neposredno na seznam, določen na seznamu. Če želite uporabiti unicast, potrebujete možnosti:

  • unicast_src_ip - izvorni naslov za pakete VRRP;
  • unicast_peer - blok naslovov IP strežnikov, na katere bodo poslani paketi VRPP.

Tako naša konfiguracija določa dva primera VRRP, proxy_ip1 in proxy_ip2. Med normalnim delovanjem bo strežnik proxy-serv01 MASTER za virtualni IP 192.168.2.101 in BACKUP za 192.168.2.102, strežnik proxy-serv02 pa bo MASTER za virtualni IP 192.168.2.102 in BACKUP za 192.168.2.101.

Če je na strežniku aktiviran požarni zid, morate z dovoljenjem iptables dodati dovoljena pravila za promet z več mesti in vrrp protokol:

iptables -A INPUT -i eth0 -d 224.0.0.0/8 -j ACCEPT
iptables -A INPUT -p vrrp -i eth0 -j SPREJEM

Aktiviramo zagone in na obeh strežnikih zaženemo ohranjeno storitev:

systemctl omogočiti nastavitev
systemctl start keepalived

Po zagonu storitve, ki je ohranjena tako, da bodo vmesniki iz konfiguracijske datoteke dodeljeni navidezni IP-ji. Poglejmo trenutne naslove IP na strežnem vmesniku eth0:

ip show eth0

Na strežniku proxy-serv01:

Na strežniku proxy-serv02:

Keepalived: spremljajte zdravje aplikacij in vmesnikov

Zahvaljujoč protokolu VRRP je mogoče spremljati stanje strežnika, na primer med popolno fizično okvaro strežnika ali omrežnim vratom na strežniku ali stikalu. Možne pa so tudi druge problematične situacije:

  • napaka v storitvi proxy strežnika - odjemalci, ki pridejo do virtualnega naslova tega strežnika, bodo v brskalniku prejeli sporočilo z napako, da proxy strežnik ni na voljo;
  • zavrnitev drugega internetnega vmesnika - odjemalci, ki pridejo do virtualnega naslova tega strežnika, bodo v brskalniku prejeli sporočilo z napako, da povezave ni bilo mogoče vzpostaviti.

Za reševanje zgornjih situacij bomo uporabili naslednje možnosti:

  • track_interface - spremljanje stanja vmesnikov; postavi primerek VRRP v stanje NAPREJ, če je eden od naštetih vmesnikov v stanju DOL;
  • track_script - spremljanje s skriptom, ki bi moral vrniti 0, če je preverjanje uspešno zaključeno, 1 - če preverjanje ni uspelo.

Posodobite konfiguracijo, dodajte nadzor nad vmesnikom eth1 (privzeto bo primerek VRRP preveril vmesnik, na katerega je vezan, tj. V trenutni konfiguraciji eth0):

track_interface eth1 

Direktiva track_script zažene skript s parametri, določenimi v bloku vrrp_script, ki ima naslednjo obliko:

vrrp_script interval intervala - pogostost izvajanja skripta, privzeto 1 sekunda padec - kolikokrat je skript vrnil ničelno vrednost, pri kateri se preklopi v naraščanje stanja FAULT - kolikokrat je skript vrnil ničelno vrednost in pri tem za izhod iz stanja napake FAULT - čas, dokler skript ne vrne rezultata, nato pa vrne vrednost, ki ni nič. teža - vrednost, s katero se bo zmanjšala prednost strežnika v primeru prehoda v stanje NAPAKA. Privzeta vrednost je 0, kar pomeni, da bo strežnik po neuspešnem izvajanju skripta prešel v stanje FAULT za tolikokrat, kot je določeno s parametrom pada.  

Konfigurirajte spremljanje učinkovitosti lignjev. Z ukazom lahko preverite, ali je postopek aktiven:

lignjev -k ček

Ustvari vrrp_script, s parametri frekvence izvršitve vsake 3 sekunde. Ta blok je opredeljen zunaj blokov. vrrp_instanca.

vrrp_script chk_squid_service script "/ usr / sbin / squid -k check" interval 3 

Dodajte naš skript za spremljanje znotraj obeh blokov vrrp_instanca:

track_script chk_squid_service

Zdaj, če storitev proxy Squid ne uspe, bo virtualni naslov IP prešel na drug strežnik.

Lahko dodate dodatna dejanja ko se stanje strežnika spremeni.

Če je Squid konfiguriran za sprejem povezav s katerega koli vmesnika, tj. http_port 0.0.0.0 ∗ 128, potem pri preklopu navideznega naslova IP ne bo težav, lignji bodo na novem naslovu sprejemali povezave. Če pa so konfigurirani določeni naslovi IP, na primer:

http_port 192.168.2.101 128 http_port 192.168.2.102pogoji128

nato Squid ne bo vedel, da se je v sistemu pojavil nov naslov, kjer morate poslušati zahteve strank. Če želite obvladovati takšne situacije, ko morate pri zamenjavi virtualnega naslova IP izvesti dodatna dejanja, vsebuje keepalived možnost izvajanja skripta, ko se zgodi dogodek, ko se stanje strežnika spremeni, na primer iz MASTER v BACKUP, ali obratno. Izvaja se z možnostjo:

obvesti "pot do izvršljive datoteke"

Keepalived: preizkus preklopa

Po nastavitvi virtualnega IP-ja bomo preverili, kako pravilno pride do obdelave napak. Prvi test je simulirati okvaro enega od strežnikov. Iz omrežja izključimo notranji omrežni vmesnik eth0 strežnika proxy-serv01, medtem ko preneha pošiljati pakete VRRP in strežnik proxy-serv02 mora aktivirati navidezni IP naslov 192.168.2.101. Rezultat bomo preverili z ukazom:

ip show eth0

Na strežniku proxy-serv01:

Na strežniku proxy-serv02:

Kot je bilo pričakovano, je strežnik proxy-serv02 aktiviral virtualni IP naslov 192.168.2.101. Poglejmo, kaj se je zgodilo v dnevnikih z ukazom:

mačka / var / log / sporočila | grep -i keepalived

na strežniku proxy-serv01na strežniku proxy-serv02
Keepalived_vrrp [xxxxx]: Jedro poroča: vmesnik eth0 DOWN Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Vstop v FAULT STATE Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) odstranjevanje VIP protokola. Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Zdaj je v stanju napake
Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Prehod na MASTER STATE
Keepalived prejme signal, da je vmesnik eth0 v stanju DOL in postavi primerek VRRP proxy_ip1 v stanje NAPAST, sprosti navidezne naslove IP.Keepalived postavi primerek VRRP proxy_ip1 v stanje MASTER, aktivira naslov 192.168.2.101 na eth0 in pošlje brezplačen ARP.

Preverili bomo, da se bo virtualni IP 192.168.2.101 po vklopu omrežja vmesnik eth0 na strežniku proxy-serv01 na omrežje preklopil nazaj.

na strežniku proxy-serv01na strežniku proxy-serv02
Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) prisili nove volitve MASTER Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Prehod na MASTER STATE Keepalived_vrrp [Keepback] VIP-ovci Keepalived_vrrp [xxxxx]: Pošiljanje brezplačnega ARP-ja na eth0 za 192.168.2.101
Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Prejeti oglas z višjo prioriteto 255, naših 100 Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Vstop v BACKUP STATE Keepalived_vrrp [xxxxx]: VRRPP__.
Keepalived prejme signal za obnovitev vmesnika eth0 in začne nove volitve MASTER za primer VRRP proxy_ip1. Po prehodu v stanje MASTER aktivira naslov 192.168.2.101 na vmesniku eth0 in pošlje brezplačen ARP.Keepalived prejme paket z visoko prioriteto za primer VRRP proxy_ip1 in postavi proxy_ip1 v stanje BACKUP in sprosti navidezne naslove IP.

Drugi preizkus je simuliranje okvare zunanjega omrežnega vmesnika, saj za to izključimo zunanji omrežni vmesnik eth1 strežnika proxy-serv01 iz omrežja. Rezultat preverjanja bomo preverili po dnevnikih.

na strežniku proxy-serv01na strežniku proxy-serv02
Keepalived_vrrp [xxxxx]: Jedro poroča: vmesnik eth1 DOWN Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Vstop v FAULT STATE Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) odstranjevanje VIP protokola. Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Zdaj je v stanju napake
Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Prehod v MASTER STATE Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Vstop v MASTER STATE Keepalived_vrrp [xxxxx]: VRRP_Insts Pro. Keepalived_vrrp [xxxxx]: Pošiljanje brezplačnega ARP-ja na eth0 za 192.168.2.101
Keepalived prejme signal, da je vmesnik eth1 v stanju DOL, in primerek VRRP proxy_ip1 postavi v stanje NAPAST, sprosti navidezne naslove IP.Keepalived postavi primerek VRRP proxy_ip1 v stanje MASTER, aktivira naslov 192.168.2.101 na eth0 in pošlje brezplačen ARP.

Tretji pregled je posnetek napake proxy storitve Squid; za to ročno zapustite storitev z ukazom: systemctl stop lignji Rezultat preverjanja bomo preverili po dnevnikih.

na strežniku proxy-serv01na strežniku proxy-serv02
Keepalived_vrrp [xxxxx]: VRRP_Script (chk_squid_service) ni uspel Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Vstop v FAULT STATE Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1). Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Zdaj je v stanju napake
Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Prehod v MASTER STATE Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Vstop v MASTER STATE Keepalived_vrrp [xxxxx]: VRRP_Insts Pro. Keepalived_vrrp [xxxxx]: Pošiljanje brezplačnega ARP-ja na eth0 za 192.168.2.101
Skript preverjanja dejavnosti storitve lignjev proxy ne uspe. Keepalived postavi primerek VRRP proxy_ip1 v stanje FAULT in sprosti navidezne naslove IP.Keepalived postavi primerek VRRP proxy_ip1 v stanje MASTER, aktivira naslov 192.168.2.101 na eth0 in pošlje brezplačen ARP.

Vsi trije preverjanja so bila uspešno opravljena, pravilno nastavljena. V nadaljevanju tega članka bomo z uporabo Pacemakerja konfigurirali skupino HA in upoštevali posebnosti vsakega od teh orodij..

Končna konfiguracijska datoteka /etc/keepalived/keepalived.conf za strežnik proxy-serv01:

vrrp_script chk_squid_service script "/ usr / sbin / squid -k check" interval 3 vrrp_instance proxy_ip1 stanje MASTER vmesnik eth0 virtual_router_id 1 prioritet 255 virtual_ipaddress 192.168.2.101/24 dev eth0 oznaka eth0: 1 track_interface eth1 track_interface eth1 track1interface eth1 track1interface eth1 track_interface eth1 track_interface eth1 track1interface eth1 track1interface eth1 track1interface eth1 track1interface eth1 track1interface eth1 track1interface eth1 track_interface eth1 track1interface eth1 track1interface eth1 track_interface eth1 track1interface eth1 track1interface eth1 track1interface eth1 track_interface eth1  vrrp_instanca proxy_ip2 stanje BACKUP vmesnik eth0 virtual_router_id 2 prioriteta 100 virtualna_predstavitev 192.168.2.102/24 dev eth0 oznaka eth0: 2 track_interface eth1 track_script chk_squid_service 

Končna konfiguracijska datoteka /etc/keepalived/keepalived.conf za strežnik proxy-serv02:

vrrp_script chk_squid_service skript "/ usr / sbin / squid -k preverjanje" interval 3 vrrp_in substance proxy_ip1 stanje BACKUP vmesnik eth0 virtual_router_id 1 prioritet 100 virtual_ipaddress 192.168.2.101/24 dev eth0 oznaka eth0: 1 track_interface eth1 track1interface eth1 track1interface eth1 track1interface eth1 track1interface eth1 track1interface eth1 track1interface eth1  vrrp_instanca proxy_ip2 stanje MASTER vmesnik eth0 virtual_router_id 2 prioriteta 255 virtualna_predstavitev 192.168.2.102/24 dev eth0 oznaka eth0: 2 track_interface eth1 track_script chk_squid_service