Conform secțiunea 6 din RFC 3074, se pare că procesul de selectare a unui server de echilibrare a încărcăturii în ISC DHCP este următorul:
- Clientul difuzează un mesaj de descoperire, care fie ajunge direct la serverele DHCP în stare activ-activ, fie care este transmis către ambele servere (ignorăm posibilitatea de a secțiunea 5.4 „HBA destinat unui expeditor” pentru acest exemplu).
- Serverele atribuie un ID de tranzacție de serviciu (STID) tranzacției pentru uz intern(?). Adresa hardware a clientului (
chaddr
) este hashing folosind algoritmul de hashing Pearson, care trece peste cheie (chaddr
) și efectuează un NOT pe biți față de iterația anterioară și setează rezultatul ca număr găsit la indexul acelei valori într-un tabel pseudoaleator de 256 de numere de la 1 la 255.
- Rezultatul hash-ului, un număr de la 1 - 255, este comparat cu HBA, care în cazul unui server ISC DHCP cu doar
Despică
câmp definit în configurația HA, este o hartă de biți în care numărul de 1 începând de la stânga (sau la dreapta, pe serverul secundar) se potrivește cu valoarea Despică
câmpul de configurare. De exemplu, a Despică
de 100 ar corespunde unui HBA pe primar ca FF FF FF FF FF FF FF FF FF FF FF FF F0 00 00 00 00
iar pe secundar ca 00 00 00 00 00 00 00 00 00 00 00 00 0F FF FF FF FF ...
. Dacă HBA are un 1 la bitul de la indexul dat (din rezultatul hash), atunci serverul servește mesajul de ofertă DHCP către client.
După înțelegerea mea, atâta timp cât HBA nu are o suprapunere între servere, nu este posibil ca ambele servere să decidă în cele din urmă să deservească clientul.
TL;DR: algoritmul de echilibrare a sarcinii DHCP garantează că un singur server DHCP va răspunde unui anumit client.
Întrebarea mea acum este de ce am un client care primește o ofertă de la ambele servere. De fapt, văd că numărul de oferte afișate pe interfața routerului meu este aproape dublu față de numărul de solicitări, ceea ce înseamnă că aceasta nu este doar o problemă pentru singurul client pe care îl am (dar nu am confirmat acest lucru). Singura mea idee a fost că de când Balanta de sarcină max secunde
câmpul din secțiunea HA a serverelor mele este 3, poate că acest client este prea lent pentru a fi acceptat și, astfel, serverul DHCP partener intervine.
În ce condiții două servere DHCP de echilibrare a încărcăturii ar oferi unui client o adresă?
Iată unde se întâmplă acest proces în ISC Kea:
Unde se ia decizia serverului:
https://gitlab.isc.org/isc-projects/kea/-/blob/master/src/hooks/dhcp/high_availability/query_filter.cc#L330
Funcția care are hash-ul chaddr:
https://gitlab.isc.org/isc-projects/kea/-/blob/master/src/hooks/dhcp/high_availability/query_filter.cc#L384
Nu știu unde este codul pentru ISC DHCP standard.