section

F5 - Priority Group Activation

28.12.2023 | Tag F5

Spolu se základními balancovacími technikami F5 umožňuje nastavení záložních nodů v poolu, které odbavování provozu převezmou až v případě výpadku primárních nodů.

Teorie

Na první pohled nemusí být zřejmé, k čemu je tato funkce dobrá. Nicméně nedávno jsem měla zajímavý požadavek na nastavení balancingu na F5. Šlo o interní stránky hostované na dvou serverech, ty však nebyly rovnocenné. Jeden server byl read-write, tedy byla na něm dostupná administrace, a druhý byl read-only, kdy se na něm daly informace pouze zobrazit. Požadavek byl, aby stránky vždy obsluhoval read-write nod a teprve pokud by přestal odpovídat, aby provoz odbavoval read-only nod. Přesně pro tento případ se hodí priority group activation. (Další příklad třeba můžou být nody umístěné v různých datacentrech, kdy chceme, aby primárně obsluhovaly nody z konkrétního datacentra a další byly jen jako záloha při výpadku).

Jak to tedy teoreticky funguje.. Jednotlivým členům poolu/nodům se zadá jejich priority skupina. Čím vyšší hodnota, tím větší prioritu nod má a tím spíš odbavuje. Obráceně to znamená, že nod s hodnotou priority group 0 bude aktivní pouze v případě, kdy nody s vyšší hodnotou nebudou dostupné, nebo nebudou splňovat potřebný počet pro odbavování. Pokud mají dva nody stejnou hodnotu, jsou ve stejné skupině a odbavují společně, proto také název priority group. Priority skupin může být mnoho, reálného limitu se asi nedá v běžném provozu dosáhnout.

Teď má každý člen poolu nastavenou svou priority skupinu. Dál se v rámci poolu určí, kolik aktivních nodů musí ve skupině pro odbavování být, přičemž minimum je 1. Běžně budou odbavovat nody s vyšší priority skupinou, ale jakmile jejich počet klesne pod nastavené minimum, přidá se další skupina nodů s nižší prioritou. Takto se v případě potřeby budou přidávat další a další skupiny. Jakmile se nody s vyšší prioritou zase oživí, provoz se bude rozdělovat opět jen mezi ně. To je nastavení Priority Group Activation, které v defaultu bývá při vytváření poolu vypnuté. Zda je člen aktivní nebo ne klasicky určuje jeho stav podle přiřazeného health monitoru, případně se členové dají administrativně aktivovat/deaktivovat.

Ještě doplním, že balancovací metoda poolu se i s použitím priority group dá normálně konfigurovat, nastavení balancingu bude platit na všechny nody ze skupin, které zrovna odbavují. Toliko teorie, dále příklad, který snad bude pochopitelnější.

Příklad

Ačkoli reálný požadavek, ze kterého článek vychází, počítal s jedním aktivním a jedním backup serverem, tento příklad uděláme zajímavější. Budeme mít 4 web servery, kdy dva budou primárně odbavovat – budou mít priority skupinu 20, v našem poolu nejvyšší. Třetí a čtvrtý nod budou backup pro případ, že primární nody selžou. Tj. pokud počet aktivních nodů klesne pod dva, přidá se další skupina. Zkusíme scénář 1, kdy třetí a čtvrtý nod budou mít prioritu 10, a scénář 2, kdy třetí nod bude mít prioritu 10 a čtvrtý nod bude mít prioritu 5.

Na F5 vytvoříme úplně jednoduchý http virtual server. A protože mám omezené zdroje, reálné servery ve skutečnosti zastoupí jeden virtuální Debian s Nginxem a 4 síťovkami. Na každé síťovce bude vlastní IP adresa a na ní jednoduchá webová stránka, která pouze řekne, na kterém interface zrovna jsme.

Konfigurace

Napřed potřebujeme reálné servery, ale tím se nebudeme zatěžovat, proto jen ukážu, co je na každé IP adrese vystaveno a že Nginx nám poslouchá na 4 rozhraních. Pro F5 jde o 4 unikátní IP adresy, bude je tedy brát jako klasické samostatné nody.

PRIOR1
PRIOR2

Na straně F5 začneme konfigurací samotného poolu, protože ho pro virtuální server stejně budeme potřebovat. Pool vytvoříme přes levé menu a položku Local Traffic - Pools - Pool List a tlačítko Create v pravém rohu, nebo plusko v menu. Je vcelku jedno, co si zvolíme za monitoring a balancovací metodu, podstatná je pro nás položka Priority Group Activation. Zde z defaultu přepneme na Less than.. a zadáme minimální počet aktivních nodů. V našem případě chceme minimálně dva aktivní nody, proto hodnota 2.

PRIOR3

Během přidávání členů do poolu zadáme jejich adresy (volitelně jméno), port 80, na kterém Nginx poslouchá, a hlavně vyplníme položku Priority. Na konci budou mít dva členové prioritu 20, ty budou primárně odbavovat. Pak podle scénáře budou dva zbývající členové s prioritou 10 a alternativně jeden s prioritou 10 a druhý s prioritou 5. Touto malou změnou se nám změní i výsledné chování poolu. Nastavení priority vidíme u každého člena vypsané vpravo a samozřejmě ji můžeme pod každým členem dle potřeby měnit.

PRIOR4
PRIOR5

Nakonec uděláme úplně obyčejný virtual server na portu 80 bez certifikátu a dalších profilů, pouze přivazbíme vytvořený pool. V reálu samozřejmě může být konfigurace VIP jakkoliv komplexní, nyní však potřebujeme jen vystavit nějakou službu.

PRIOR6
PRIOR7

Tím je konfigurace hotová. Výsledná služba bude při balancování vypadat nějak takto.

PRIOR8
PRIOR9

Testovat toto prostředí jde různými způsoby. Buďto se na straně webserveru zablokuje některá ze síťovek, nebo se na straně F5 nod administrativně vypne, což je vidět na mých screenshotech. Bohužel, testovat funkci balancingu s jedním klientským strojem jde velmi těžko, nedokážu tedy pořádně ukázat, co se po vypnutí nodu dva bude dít, ale mohu zkusit celý proces popsat.

Chování poolu se dá monitorovat pomocí jeho statistik, kde je hezky vidět, které nody jsou aktivní a které čekají. Začíná se s vynulovanou statistikou a po chvilce provozu uvidíme, jak na tom jednotliví členové jsou z pohledu spojení a přenesených dat. Statistiku si můžeme podle potřeby vyresetovat.

PRIOR10

Zde je vidět statistika pro scénář 2, kdy odbavuje jeden server s prioritou 20, druhý server se stejnou prioritou je vypnutý, třetí s prioritou 10 také odbavuje a čtvrtý s prioritou 5 čeká.

PRIOR11

Pokud bychom se vrátili k příkladu zmíněném na začátku, konfigurace poolu by byla následovně: Activation Priority Group by mělo hodnotu Less than 1. Read-write nod by měl hodnotu 10 a read-only může mít hodnotu 0. Dokud je RW nod živý, bude odbavovat pouze on. Jakmile přestane fungovat, začne odbavovat RO nod.