CRM (Resource Agents)
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:
- 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
- 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
)
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..
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)
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.
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.
nod-2:~# crm configure ra info ocf:dce:drbd
|
Volání agenta
CRM jako takové se stará o vzájemnou kooperaci mezi jednotlivými zdroji v rámci clusteru. Agenta volá v případě, že potřebuje provést lokální akci. Agent, je ve skutečnosti skript se sadou funkcí, které se spouštějí v závislosti na volání CRM. Přitom ovšem ne všechna volání "probublají" až do skriptu. Většina agentů zpracovává pouze následující volání:
meta_data | |
start | |
stop | |
monitor |
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.