Článek přečtěte do 8 min.

Jednou z nových funkcí v Zabbix 7.0 LTS je vyvažování zátěže proxy. Jak říká dokumentace:

Vyrovnávání zátěže proxy umožňuje monitorování hostitelů pomocí skupiny proxy s automatickou distribucí hostitelů mezi proxy a vysokou dostupností proxy.

Pokud jeden proxy ze skupiny proxy přejde do režimu offline, jeho hostitelé budou okamžitě rozděleni mezi ostatní proxy s nejmenším počtem přiřazených hostitelů ve skupině.

Proxy group je nová konstrukce, která umožňuje serveru Zabbix činit dynamická rozhodnutí o odpovědnosti za monitorování v rámci skupiny (skupin) proxy. Jak můžete vidět v dokumentaci, skupina proxy má pouze minimální sadu konfigurovatelných nastavení.

Jednou z důležitých informací, které je třeba pochopit, je, že server Zabbix vždy ví (v rozumném časovém rámci), které proxy ve skupinách proxy jsou online a které ne. Je to proto, že všechny aktivní proxy se připojují k serveru Zabbix ve výchozím nastavení každou 1 sekundu (DataSenderFrequencynastavení v proxy) a server Zabbix se ve výchozím nastavení připojuje k pasivním proxy také každou 1 sekundu (ProxyDataFrequencynastavení na serveru), takže pokud tato připojení neprobíhají pak je něco špatně s používáním proxy.

Zpočátku server Zabbix vyrovná hostitele mezi proxy ve skupině proxy. V případě potřeby může také později vyvážit hostitele, algoritmus je popsán v dokumentaci. To je něco, co nepotřebujeme konfigurovat (to je výše zmíněná „automatizovaná distribuce hostitelů“). Myšlenka je taková, že v každém daném okamžiku je každý hostitel nakonfigurovaný tak, aby byl monitorován skupinou proxy, monitorován pouze jedním proxy.

Nyní se podívejme, jak skutečná připojení fungují s aktivními a pasivními agenty Zabbix. Na aktivních/pasivních režimech proxy (s konektivitou serveru Zabbix) v tomto kontextu nezáleží, ale pro zjednodušení používám ve svých testech aktivní proxy.

Prohlášení: Toto jsou moje vlastní pozorování z mého vlastního nastavení Zabbix pomocí 7.0.0 a nemusí být nutně založeno na žádné oficiální dokumentaci Zabbix. V každém případě jsem otevřen jakémukoli komentáři nebo opravám.

Na úplný konec tohoto příspěvku jsme zahrnuli vzorky zachyceného provozu agentů pro každý z níže uvedených případů.

Pasivní agenti monitorovaní proxy skupinou

Pro pasivní agenty je vyvažování zátěže proxy skutečně takto jednoduché: Kdykoli dojde k výpadku proxy ve skupině proxy, budou všichni hostitelé, kteří byli dříve monitorováni tímto proxy, monitorováni ostatními dostupnými proxy ve stejné skupině proxy.

V pasivních agentech není nic nového ke konfiguraci, pouze obvyklá Serverdirektiva umožňující konkrétním proxy (IP adresy, DNS jména, podsítě) komunikovat s agentem.

Připomínáme, že pasivní agent znamená, že naslouchá příchozím požadavkům od proxy serveru Zabbix (nebo serveru Zabbix) a poté shromažďuje a vrací požadovaná data. Všechny relevantní brány firewall je také nutné nakonfigurovat tak, aby umožňovaly připojení ze serverů proxy Zabbix k portu TCP 10050 agenta.

Další připomínkou je, že každý agent (nebo monitorovaný hostitel) může mít nakonfigurované pasivní i aktivní položky, což znamená, že bude naslouchat příchozím požadavkům Zabbixu, ale také bude aktivně vyžadovat jakékoli aktivní úlohy od proxy nebo serverů Zabbix. Ale opět, toto je dlouho existující funkce, nic nového v Zabbix 7.0.

Aktivní agenti monitorovaní skupinou proxy

aktivních agentů vyžaduje vyrovnávání zátěže proxy trochu nové ladění na straně agentů.

Podle definice je aktivním agentem strana, která ve výchozím nastavení iniciuje připojení k proxy (nebo serveru) Zabbix k portu TCP 10051. Konfigurace se provádí pomocí ServerActivedirektivy v konfiguraci agenta. Podle oficiální dokumentace bylo poskytování více adres oddělených čárkami ve ServerActive směrnici možné po věky, ale je to za účelem poskytování dat více nezávislým instalacím Zabbix současně. (Přemýšlejte o agentovi Zabbix na monitorovaném hostiteli, který je sledován jak poskytovatelem služeb, tak interním IT oddělením.)

Použití adres serverů oddělených středníkem v ServerActivedirektivě je možné od Zabbix 6.0, kdy jsou servery Zabbix konfigurovány v clusteru s vysokou dostupností. To vyžaduje specifickou implementaci databáze serveru Zabbix, aby všechny uzly clusteru používaly stejnou databázi a některé další sdílené konfigurace.

Nyní v Zabbix 7.0 lze stejný styl konfigurace použít pro agenta k připojení ke všem proxy ve skupině proxy zadáním všech adres proxy do ServerActivekonfigurace, oddělených středníkem. Nicméně, abychom byli přesní, toto není popsáno v ServerActivedokumentaci k tomuto psaní. Spíše to konkrétně říká: „Z každého serveru/klastru Zabbix by neměl být specifikován více než jeden proxy Zabbix.“ Ale jde to, uvidíme jak.

Použití více adres proxy oddělených středníkem funguje díky nové funkci přesměrování v komunikaci mezi proxy a agentem: Kdykoli aktivní agent odešle zprávu proxy, proxy sdělí agentovi, aby se připojil k jinému proxy, pokud je agent aktuálně přiřazen k nějaký jiný proxy. Agent se poté přestane připojovat k předchozímu proxy serveru a místo toho začne používat proxy adresu uvedenou v přesměrování. Agent tedy konverguje k používání pouze jedné určené adresy proxy.

V tomto jednoduchém příkladu server Zabbix určil, že agent by měl být monitorován proxy 1, takže když agent původně kontaktoval proxy 1 (protože jeho IP adresa je první v seznamu ServerActive), proxy reagoval normálně a agent byl s tím spokojen.

V případě, že by server Zabbix z jakéhokoli důvodu určil, že agent by měl být monitorován proxy 2, pak by proxy 1 odpověděl přesměrováním a agent by to následoval. (V níže uvedených souborech zachycení budou příklady přesměrování.)

Aby bylo jasno, toto přesměrování agenta ze skupiny proxy funguje v době psaní tohoto článku pouze s agenty Zabbix 7.0.

Poznámka: V počáteční verzi tohoto příspěvku jsem použil adresy proxy oddělené čárkamiServerActive (namísto oddělených středníkem), což způsobilo duplicitní připojení od agenta k určenému proxy (protože agent není vybaven, aby rozpoznal, že se připojuje k dvakrát stejný proxy), což nakonec způsobí duplikaci dat v databázi Zabbix. Použití proxy adres oddělených čárkami tedy není funkčním řešením pro využití vyrovnávání zátěže proxy.

Pokud server Zabbix změní přiřazení hostitele a proxy pro vyrovnání zátěže mezi proxy, dříve určený proxy přesměruje agenta na správnou proxy adresu a situace je znovu optimalizována.

Poznámka: Při konfiguraci proxy v uživatelském rozhraní Zabbix existuje nové pole Adresa pro aktivní agenty. To je hodnota adresy, kterou používají servery proxy, když odpovídají pomocí zpráv o přesměrování agentům.

Scénáře selhání skupiny proxy s aktivními agenty

Proxy spadne

Pokud určený proxy aktivního agenta přejde do režimu offline, takže již agentovi neodpovídá, agent si uvědomí situaci, zahodí informace o přesměrování, které měl, a ServerActiveznovu se vrátí k používání proxy adres z direktivy.

Nyní je to zajímavý případ kvůli některým závislostem na časování. V konfiguraci skupiny proxy existuje konfigurace období přepnutí při selhání, která řídí citlivost serveru Zabbix na dostupnost proxy s ohledem na opětovné vyvážení agentů v rámci skupiny proxy. Pokud se tedy agent vrátí k používání ostatních proxy rychleji, než server Zabbix rozpozná situaci a upozorní ostatní proxy ve skupině proxy, agent obdrží odpovědi na přesměrování od ostatních proxy, které mu sdělí, aby použil aktuálně offline proxy. A totéž se stane znovu: agent se nepodaří připojit k přesměrovanému proxy a vrátí se k používání jiných místně nakonfigurovaných proxy atd.

V testech tato smyčka nebyla příliš intenzivní, pouze dvě kola každou sekundu, takže to nebylo příliš významné z hlediska sítě a situace se automaticky sblíží, když server Zabbix upozorní proxy na opětovné vyvážení hostitele.

Takže toto dočasné zacyklení není velký problém. Výsledkem je, že celý systém konverguje automaticky z neúspěšného proxy.

Po obnovení neúspěšného serveru proxy do režimu online zůstanou agenti se svými určenými servery proxy ve skupině proxy.

Jak bylo zmíněno na začátku, server Zabbix v případě potřeby po nějaké době automaticky znovu vyrovná hostitele.

Proxy je online, ale není dostupný z aktivního agenta

Dalším zajímavým případem je případ, kdy samotný proxy běží a komunikuje se serverem Zabbix, je tedy v online režimu ve skupině proxy, ale aktivní agent se k němu nemůže dostat, přičemž se stále může připojit k ostatním proxy ve skupině skupina. To se může stát kvůli různým problémům se směrováním souvisejícím s internetem, například pokud jsou proxy servery geograficky distribuovány a daleko od agenta.

Začněme situací, kdy je agent aktuálně monitorován Proxy 2 (jako na posledním obrázku výše). Když dojde k selhání a agent si uvědomí, že připojení k Proxy 2 již nejsou úspěšná, agent se vrátí k používání nakonfigurovaných proxy v ServerActive, připojí se k Proxy 1.

Ale proxy 1 ví (podle informací poskytnutých serverem Zabbix), že proxy 2 je stále online a že agent by měl být monitorován proxy 2, takže proxy 1 odpoví agentovi přesměrováním.

To samozřejmě nebude fungovat pro agenta, protože už nemá připojení k Proxy 2.

Toto je neopravitelná situace (alespoň se současným Zabbixem 7.0.0), zatímco problém s dosažitelností přetrvává: Agent neustále kontaktuje Proxy 1, stále přijímá přesměrování a totéž se opakuje znovu a znovu.

Všimněte si, že nezáleží na tom, zda je agent nyní místně překonfigurován tak, aby v této situaci používal pouze proxy 1, protože vyrovnávání zátěže hostitelů ve skupině proxy není řízeno žádnou místní konfigurací agenta. Skupina proxy (vedená serverem Zabbix) má jediné oprávnění přiřazovat hostitele k serverům proxy.

Jedním ze způsobů, jak z této situace uniknout, je zastavit nedostupný Proxy 2. Tímto způsobem si server Zabbix nakonec všimne, že Proxy 2 je offline, a hostitelé budou automaticky znovu vyváženi na jiné proxy ve skupině, čímž se odstraní přesměrování na straně agenta. k nedosažitelnému proxy.

Při plánování skupin proxy s rozmanitostí umístění proxy mějte na paměti tento potenciální scénář.

To je také něco k zamyšlení, pokud vaše proxy servery Zabbix mají více síťových rozhraní, kde připojení serveru Zabbix používá jiné rozhraní než připojení agenta. V takovém případě může nastat stejný problém kvůli vaší vlastní konfiguraci.

Závěrečná slova

Celkově vzato, vyvažování zátěže proxy vypadá velmi slibně, protože nevyžaduje žádné triky na úrovni sítě k dosažení vyrovnávání zátěže a vysoké dostupnosti. V Zabbix 7.0 je to nová funkce, takže můžeme očekávat další vývoj podrobností a chování v nadcházejících verzích.


Dodatek: Vzorové zachycené soubory

V ideálním případě by tyto soubory zachycení měly být prohlíženy pomocí Wireshark verze 4.3.0rc1 nebo novější, protože pouze nejnovější sestavení Wireshark obsahují podporu pro nejnovější funkce protokolu Zabbix. Wireshark 4.2.x by měl také zobrazovat většinu polí paketů Zabbix. Chcete-li zobrazit pouze pakety protokolu Zabbix, použijte filtr zobrazení zabbix, ale při pečlivějším zkoumání případů byste měli zkontrolovat také obyčejné pakety TCP (bez jakéhokoli filtru zobrazení), abyste o případech lépe porozuměli.

Tyto vzorky jsou pořizovány s komponentami Zabbix verze 7.0.0 s použitím výchozích časovačů v konfiguracích procesu Zabbix a 20 sekund jako období selhání skupiny proxy.

Pasivní agent s převzetím služeb při selhání proxy

  • Po snímku #50 byl proxy 1 zastaven a proxy 2 nakonec převzal monitorování.

Aktivní agent s převzetím služeb při selhání proxy

  • Agent zpočátku komunikuje s proxy 1.
  • Proxy 1 byl zastaven před snímkem #425.
  • Agent je připojen k proxy 2, ale proxy 2 stále odesílá přesměrování.
  • Proxy 2 byl přidělen agent před rámcem #1074, takže převzal monitorování a přijal připojení agenta.
  • Proxy 1 byl později restartován (ale agent se k němu ještě nepokusil připojit).
  • Agent byl ručně restartován před rámcem #1498 a znovu se připojil k proxy 1, dostal přesměrování na proxy 2 a znovu pokračoval s proxy 2.

Aktivní agent, s proxy nedostupným

  • Začalo to tím, že proxy 2 normálně monitoruje agenta.
  • Síť začala zahazovat všechny pakety od agenta k proxy 2 před rámcem #179, agent se začal připojovat k proxy 1 téměř okamžitě.
  • Z rámce #181 na proxy 1 odpoví přesměrováním na proxy 2 (což nefunguje).
  • Proxy 2 byl nakonec zastaven ručně.
  • Přesměrování pokračuje až do rámce #781, kdy je proxy 1 přiřazeno monitorování agenta a proxy 1 začne přijímat požadavky agenta.

Zdroj: Zabbix