CRM (Resource Agents)

Z DCEwiki
Skočit na navigaci Skočit na vyhledávání

Provoz jakékoliv zdroje zajišťuje tzv. Resource Agent, což může být buď shellový skript, nebo binární soubor, který je pravidelných intervalech spouštěn. Základní sady těchto "agentů", jsou součástí několika instalačních balíků cluster-agents, lsb... Postupy ke konfiguraci CRM, které se válí na internetu, jsou většinou založeny na jejich použití. Můžete se však dostat do situace, kdy žádný z nich vašim potřebám vyhovovat nebude. V takovém případě máte dvě možnosti:

  1. Vyzkoušet použít agenta od jiného poskytovatele ("providera") Viz seznamu agentů na kterém naleznete mj. i popis k těm distribučním
  2. Napsat si agenta vlastního. Tomu, jak takový agent má vypadat bude věnována až následující kapitola.

Resource agent obsahuje funkce a nastavení výchozích proměnných, které se při konfiguraci přenastaví podle potřeb zdroje. Tato konfigurace se provádí prostřednictvím konzolového nástroje crm, a to buď při výchozí konfiguraci zdroje ( crm -> configure ), nebo i operativně, později za běhu ( crm -> resource ). Jaké parametry lze u použitého agenta nastavit, se lze dozvědět přes jejich informační rozhraní ( crm -> ra )

Poznámka Jelikož mi zpočátku dlouho nebylo jasné, co je u crm konzolový příkaz a co konfigurační sekvence, pokusil jsem se pro větší přehlednost u konfiguračních sekvencí uvádět znaky ->, kterými jsem chtěl naznačit krok - "dopiš a dej enter"

Zcela konkrétně. Sekvence crm -> ra -> help by měla vést k tomu, že se na konzoli vypíše přehled dostupných příkazů v rámci sekvence ra, což je oblast v níž lze zjišťovat informace o dostupných agentech - jak lze u nich použít parametry, jaké jsou u nich doporučené hodnoty, atp.

Při nastavení zdroje se cesta k agentovi, který má být použit uvádí přes tři parametry, navzájem oddělené dvojtečkami:

class:provider:agent

Třída - "class" seskupuje agenty určitého typu. Jelikož může být na jednu službu dostupných více agentů od různých poskytovatelů (poskytovatel - "provider"), může v rámci hierarchické struktury crm existovat ještě tzv. "provider", což je vlastně podadresář, v němž je skript (nebo binární soubor) resource agenta umístěn. Pokud se tedy nějaký "provider" v rámci třídy vyskytuje, je vypsán při sekvenci crm -> ra -> classes za lomítkem..

Poznámka
crm(live)ra# classes
heartbeat
lsb
ocf / dce heartbeat linbit pacemaker
stonith

Jak už bylo zmíněno, class a provider nejsou v podstatě nic jiného, než popis cesty k resource agentu..

heartbeat
/etc/ha.d/resource.d/ (skripty)
lsb
/etc/init.d (systémové spouštěcí skripty)
ocf
/usr/lib/ocf/resource.d/ (skripty)
stonith
/usr/lib/stonith/plugins/stonith2 (binárky)
/usr/lib/stonith/plugins/external (skripty)
Upozornění Než začnete psát vlastního agenta byste měli vědět jak se crm pracuje a pak začít, dejme tomu s úpravou některého již osvědčeného agenta. V základní sadě je agent s názvem Dummy, který nedělá nic jiného, než demonstruje kde běží. Na něm si můžete odzkoušet přesuny zdroje mezi nody, seskupování, zastavování, spouštění atp.

Tato kapitola je věnována poznámkám pro tvorbu vlastního "Resource Agenta". Jak použít stávající agenty se můžete dočíst v samostatných článcích:

Vlastní agent

Kdy a proč si napsat vlastního agenta?

Důvody mohou být různé, mne osobně k tomu přimělo několik následujících důvodů:

  • Agent pro OCFS2 (ocf:pacemaker:o2cb) byl nedodělaný (jeho autor se očividně spokojil jen s hrubou předělávkou modulu ocf:heartbeat:pingd
  • Agent pro připojení souborových systémů (ocf:heartbeat:Filesystem) zase pro změnu nefungoval jak měl.
  • A agent pro KVM virtualizaci (ocf:heartbeat:VirtualDomain) byl zase na můj vkus až příliš závislý na knihovně libvirt

Umístění agenta

Vlastního agenta je nejlépe začít tvořit ve vlastním "provider" adresáři, tak aby nemohl nabourat ostatní agenty.

Poznámka Vzhledem k tomu, že by skript agenta měl být identický na všech nodech, ulehčí práci skript, kterým po každé změně můžeme provést jeho rozkopírování mezi nody. Abychom se přitom nemuseli zdržovat zadáváním hesla, je vhodné nastavit pro vzájemnou autorizaci mezi nody, u uživatele pod kterým agenta chcete psát autorizaci přes veřejné ssh klíče.

Když se objeví ve skriptu nějaká chyba, lze ji nejsnáze nalézt, je-li zavolán crm jako příkaz, když crmd démon neběží. Jinak se objeví pouze oznámení o chybě, bez konkrétního výpisu.

Poznámka
nod-2:~# crm configure ra info ocf:dce:drbd

Základem každého agenta je funkce meta_data(), skrz kterou se do CRM načítá výchozí konfigurace instance zdroje v XML formátu. V tomto XML kódu se rovněž definují:

proměnné
se kterými pak lze v rámci agenta pracovat (jejich hodnoty se přiřazují při konfiguraci primitiva jako parameter); jsou součástí elementu parameters
výchozí časové intervaly pro akce
které pak lze při konfiguraci upracovat přes meta; jsou součástí elementu action.
Upozornění Agenti nemají žádnou lokalizaci, přestože parametr lang="en" v elementech budí dojem, že ano. Ve skutečnosti CRM u elementů nastavením tohoto parametru ignoruje, takže když do něj naprasíte text v utf8, tak se na konzoli normálně vypíše včetně diakritiky.