Folosesc keepalived pentru a oferi disponibilitate între două servere Alma 8 Nginx (găzduite pe VMWare, dacă asta are vreo relevanță). Când firewalld este activat, în ciuda setării unei reguli bogate pentru VRRP, când aduc firewalld, ambele gazde încep să răspundă pe IP-ul virtual:
root@dca-nfs01:~# arping 172.31.5.233
60 de octeți de la 00:50:56:84:ac:d0 (172.31.5.233): index=39 time=1.960 usec
60 de octeți de la 00:50:56:84:ac:d0 (172.31.5.233): index=40 time=20.660 usec
60 de octeți de la 00:50:56:84:52:ed (172.31.5.233): index=41 time=24.930 usec
60 de octeți de la 00:50:56:84:ac:d0 (172.31.5.233): index=42 time=534.616 msec
60 de octeți de la 00:50:56:84:52:ed (172.31.5.233): index=43 time=534.646 msec
Configurația mea keepalived este preluată dintr-un șablon de tutorial standard și arată după cum urmează:
[root@dca-ngx01-al ~]# cat /etc/keepalived/keepalived.conf
global_defs {
# Identificatorul procesului Keeplivered
router_id nginx
}
# Script pentru a verifica dacă Nginx rulează sau nu
vrrp_script check_nginx {
scriptul „/sbin/pidof nginx”
intervalul 2
greutate 50
}
# Interfață virtuală - Prioritatea specifică ordinea în care interfața alocată va prelua în cazul unui failover
vrrp_instance VI_01 {
stat MAESTRU
interfata ens192
virtual_router_id 151
prioritate 110
# Adresa IP virtuală partajată între cele două servere web NGINX care va pluti
adresa_virtuală {
172.31.5.233
}
track_script {
check_nginx
}
autentificare {
auth_type AH
auth_pass secret
}
}
Ambele casete au un firewall simplu cu o singură zonă și am adăugat o regulă bogată pentru a permite comunicarea VRRP între cele două gazde:
[root@dca-ngx01-al ~]# firewall-cmd --list-all
public (activ)
target: implicit
icmp-block-inversion: nu
interfețe: ens192
surse:
servicii: dhcpv6-client http https ssh
porturi: 10050/tcp
protocoale:
înainte: nu
mascarada: nu
porturi înainte:
porturi sursă:
icmp-blocks:
reguli bogate:
rule protocol value="vrrp" accept
am setat si eu net.ipv4.ip_forward = 1
în /etc/sysctl.conf
.
Când firewalld este oprit pe ambele casete, keepalived se comportă corect, dar când este activat, să pară că ambele părți își pierd legătura una cu cealaltă și doar trimit pachete ARP gratuite repetate:
â keepalived.service - Monitor de înaltă disponibilitate LVS și VRRP
Încărcat: încărcat (/usr/lib/systemd/system/keepalived.service; activat; prestabilit furnizor: dezactivat)
Activ: activ (în rulare) din Vineri 2022-03-25 12:48:25 GMT; acum 2h 35min
Proces: 7140 ExecReload=/bin/kill -HUP $MAINPID (cod=ieșit, stare=0/SUCCESS)
Proces: 12966 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (cod=ieșit, stare=0/SUCCESS)
PID principal: 12967 (păstrat)
Sarcini: 2 (limită: 11406)
Memorie: 1,8 M
CGroup: /system.slice/keepalived.service
ââ12967 /usr/sbin/keepalived -D
ââ12968 /usr/sbin/keepalived -D
Mar 25 15:08:15 dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: Se trimite ARP gratuit pe ens192 pentru 172.31.5.233
Mar 25 15:08:15 dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: Se trimite ARP gratuit pe ens192 pentru 172.31.5.233
Mar 25 15:08:15 dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: Se trimite ARP gratuit pe ens192 pentru 172.31.5.233
Mar 25 15:08:15 dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: Se trimite ARP gratuit pe ens192 pentru 172.31.5.233
Mar 25 15:08:18 dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: (VI_01) Trimiterea/punerea în coadă ARP-uri gratuite pe ens192 pentru 1>
Mar 25 15:08:18 dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: Se trimite ARP gratuit pe ens192 pentru 172.31.5.233
Mar 25 15:08:18 dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: Se trimite ARP gratuit pe ens192 pentru 172.31.5.233
Mar 25 15:08:18 dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: Se trimite ARP gratuit pe ens192 pentru 172.31.5.233
Mar 25 15:08:18 dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: Se trimite ARP gratuit pe ens192 pentru 172.31.5.233
Mar 25 15:08:18 dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: Se trimite ARP gratuit pe ens192 pentru 172.31.5.233
Cu toate acestea, pot vedea din utilizarea TCPDump că pachetele obișnuite VRRP de la cealaltă gazdă ajung cel puțin în interfața de rețea atunci când firewalld este activ:
tcpdump: ieșirea verbosă a fost suprimată, utilizați -v sau -vv pentru decodarea completă a protocolului
ascultare pe ens192, tip link EN10MB (Ethernet), dimensiunea capturii 262144 octeți
15:25:21.532300 IP dca-ngx02-al.REDACTED.local > vrrp.mcast.net: AH(spi=0xac1f05e5,seq=0x3160): VRRPv2, Advertisement, vrid 151, prior 150, int length ah, authtype ah 20
15:25:22.532419 IP dca-ngx02-al.REDACTED.local > vrrp.mcast.net: AH(spi=0xac1f05e5,seq=0x3161): VRRPv2, Advertisement, vrid 151, prior 150, int authtype ah1s 20
15:25:23.532476 IP dca-ngx02-al.REDACTED.local > vrrp.mcast.net: AH(spi=0xac1f05e5,seq=0x3162): VRRPv2, Advertisement, vrid 151, prio 150, int length ahs, authtype a1s 20
15:25:24.532544 IP dca-ngx02-al.REDACTED.local > vrrp.mcast.net: AH(spi=0xac1f05e5,seq=0x3163): VRRPv2, Advertisement, vrid 151, prior 150, int authtype ah1s 20
Are cineva vreo idee despre cum pot remedia această problemă în continuare?
Mulțumesc anticipat.