CRM (konfigurace zdrojů)

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

CRM (Cluster Resource Management) pracuje se "zdroji" (resource). "Zdroje" jsou ve své podstatě pojmenované konfigurace agentů, co zajišťují běh různých, vzájemně na sobě závislých služeb. Agent je ve své podstatě spustitelný skript, připravený takto pojmenovanou konfiguraci zpracovat a na základě výsledku jejího zpracování pak vrací hodnotu, kterou crm zobrazuje jako stav zdroje.

Takovým zdrojem je kupř. služba která zajistí nahození IP adresy, spuštění webového serveru, namountování adresáře do určitého bodu, aj.

Jednotlivé zdroje mohou (ale nemusí) být na sobě závislé. Některé mohou být vázané jen na učité stroje a u jiných zase může být důležité pořadí spouštění - tohle všechno řeší Pacemaker.

init skripty (LSB) versus zdroje

Upozornění Při použití Pacemakeru by se tedy měly prostřednictvím init skriptů automaticky spouštět pouze služby, které jsou nezbytné pro jeho nahození. Spouštění ostatních služeb by již měla ošetřit jeho konfigurace.

Je totiž třeba si uvědomit, že Pacemaker je řešení pro clusterové prostředí, kdežto init skripty jsou určeny k lokálnímu použití. Samy o sobě nemají k dispozici žádné prostředky k tomu, aby mohly zajistit, že při spuštění nedojde ke konfliktu s konfigurací jiného stroje.

Pacemaker - díky tomu že využívá síťovou komunikaci v rámci infrastruktury clusteru - má přehled o tom, kde která služba zrovna běží a díky tomu může potencionálnímu konfliktu včas zabránit.


CIB

Interně jsou veškerá data clusteru, včetně konfigurace a stavových informací, uchovávána v XML souboru zvaném CIB ( zkratka z angl. Cluster Information Base ). Ten je lokálně uložen jako /var/lib/heartbeat/crm/cib.xml, a průběžně replikován démonem /usr/lib/heartbeat/cib mezi ostatní nody, proto se důrazně nedoporučuje editovat tento soubor přímo.

Veškeré operace s CIB se provádí výhradně prostřednictvím konzolových nástrojů k tomu určených:

cibadmin

Se dá brát jako primární nástroj pro manipulaci s CIB souborem. Jeho pomocí lze informace z CIB nejenom získat, ale také je změnit. V jistém smyslu jde o XML editor, takže při dotazování lze používat také Xpath výrazy aj.

Tímto nástrojem lze kupř. zjistit zda je instance CRM zdroje na aktuálním nodu v režimu Master nebo Slave ale i řada dalších informací.

To se může hodit při psaní vlastních agentů ( viz kapitola CRM (CLI)), obzvláště těch, které potřebujou vědět o stavu zdroje na ostatních nodech. Pacemaker má (na rozdíl od dřívější verze Heartbeatu) sám o sobě má pouze omezené množství (shellových) proměnných, které lze u agenta využít a týkají se spíš jeho vlastního prostředí. Z CIB však toho lze zjistit mnohem více.

Použití

Omlouvám se za obsáhlý výpis, nicméně na něm lze dobře demonstrovat, jaké informace lze z CIB získat:

  • zdroj s názvem ZDROJ využívá agenta s názvem Dummy, který spadá do třídy ocf a jelikož je poskytovatelem dce je z výpisu zřejmé, že jde nejspíš o upraveného agenta, který nedělá nic než pouze to že běží.
  • ZDROJ není typu Master/Slave, ani klon. Kdyby tomu tak bylo, tak by atribut id vypadal takto: ZDROJ:0, resp. ZDROJ:1, atd. V případě zdroje, který je nakonfigurován jako klon, je třeba výraz pro Xpath sestavit jinak.
  • Pro každý nod existuje element lrm_resource, a v něm subelementy pro každou akci, které obsahují další informace.
last-run
Časové razítko informující o tom kdy byla akce naposledy zavolaná
last-rc-change
Časové razítko, které informuje o tom kdy byl naposledy změněn obsah některého z atributů
call-id
Pořadové číslo vykonané akce.
Poznámka
nod-1:~# cibadmin --query --xpath "//lrm_resource[@id='ZDROJ']"
<xpath-query>
  <lrm_resource id="ZDROJ" type="Dummy" class="ocf" provider="dce">
    <lrm_rsc_op id="ZDROJ_monitor_0" 
        operation="monitor" 
        crm-debug-origin="do_update_resource" 
        crm_feature_set="3.0.5" 
        transition-key="4:577:7:91a08d95-baaa-4fb3-a767-fff5582c0a53" 
        transition-magic="0:7;4:577:7:91a08d95-baaa-4fb3-a767-fff5582c0a53" 
        call-id="12" 
        rc-code="7" op-status="0" interval="0" 
        last-run="1305643306" 
        last-rc-change="1305643306" 
        exec-time="0" queue-time="0" 
        op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
    <lrm_rsc_op id="ZDROJ_start_0" operation="start" 
        crm-debug-origin="do_update_resource" 
        crm_feature_set="3.0.5" 
        transition-key="54:587:0:91a08d95-baaa-4fb3-a767-fff5582c0a53" 
        transition-magic="0:0;54:587:0:91a08d95-baaa-4fb3-a767-fff5582c0a53" 
        call-id="17"
        rc-code="0" op-status="0" interval="0" 
        last-run="1305643783" 
        last-rc-change="1305643783" 
        exec-time="10" queue-time="0" 
        op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" 
        op-force-restart=" state " 
        op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
    <lrm_rsc_op id="ZDROJ_stop_0" operation="stop" 
        crm-debug-origin="do_update_resource" 
        crm_feature_set="3.0.5" 
        transition-key="53:590:0:91a08d95-baaa-4fb3-a767-fff5582c0a53" 
        transition-magic="0:0;53:590:0:91a08d95-baaa-4fb3-a767-fff5582c0a53" 
        call-id="18"
        rc-code="0" op-status="0" interval="0" 
        last-run="1305645597" 
        last-rc-change="1305645597" 
        exec-time="10" queue-time="0" 
        op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
  </lrm_resource>
  <lrm_resource id="ZDROJ" type="Dummy" class="ocf" provider="dce">
    <lrm_rsc_op id="ZDROJ_monitor_0" 
        operation="monitor" 
        crm-debug-origin="do_update_resource" 
        crm_feature_set="3.0.5" 
        transition-key="6:577:7:91a08d95-baaa-4fb3-a767-fff5582c0a53" 
        transition-magic="0:7;6:577:7:91a08d95-baaa-4fb3-a767-fff5582c0a53" 
        call-id="154" 
        rc-code="7" op-status="0" interval="0" 
        last-run="1305643294" 
        last-rc-change="1305643294" 
        exec-time="10" 
        queue-time="0" 
        op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
    <lrm_rsc_op id="ZDROJ_start_0" operation="start" 
        crm-debug-origin="do_update_resource" 
        crm_feature_set="3.0.5" 
        transition-key="54:590:0:91a08d95-baaa-4fb3-a767-fff5582c0a53" 
        transition-magic="0:0;54:590:0:91a08d95-baaa-4fb3-a767-fff5582c0a53" 
        call-id="165" 
        rc-code="0" op-status="0" interval="0" 
        last-run="1305645587" 
        last-rc-change="1305645587" 
        exec-time="0" queue-time="0" 
        op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" 
        op-force-restart=" state " 
        op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
    <lrm_rsc_op id="ZDROJ_stop_0" operation="stop" 
        crm-debug-origin="do_update_resource" 
        crm_feature_set="3.0.5" 
        transition-key="53:587:0:91a08d95-baaa-4fb3-a767-fff5582c0a53" 
        transition-magic="0:0;53:587:0:91a08d95-baaa-4fb3-a767-fff5582c0a53" 
        call-id="164" 
        rc-code="0" op-status="0" interval="0" 
        last-run="1305643773" 
        last-rc-change="1305643773" 
        exec-time="0" queue-time="0" 
        op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
  </lrm_resource>
</xpath-query>

crm_attribute

Pro rychlou práci s atributy v konfiguraci CRM - k jejich vytvoření, i následnému dotazování, lze použít nástroj crm_attribute. Příkladem použití příkazu crm_attribute může být např. níže uvedený postup přidání poznámky do konfigurace ke stroji nod-2..

Použití

Poznámka
nod-2:~# crm_attribute -t nodes -N nod-2 -n note -v 'Stroj v racku 5'
nod-2:~# crm_attribute --type nodes --node-uname snoopy --attr-name note --get-value
scope=nodes  name=note value=Stroj v racku 5
nod-2:~# crm configure show
node nod-1
node nod-2 \
	attributes note="Stroj v racku 5"
property $id="cib-bootstrap-options" \
	dc-version="1.1.5-f91f06164622c14af01409655773c66dea21a4d9" \
	cluster-infrastructure="openais" \
	expected-quorum-votes="2" \
	no-quorum-policy="ignore" \
	stonith-enabled="false" \
	last-lrm-refresh="1303922378"
nod-2:~# crm_attribute --type nodes --node-uname nod-2 --attr-name note --delete
Deleted nodes attribute: id=nodes-nod-2-note name=note

nod-2:~# crm configure show
node nod-1
node nod-2
property $id="cib-bootstrap-options" \
	dc-version="1.1.5-f91f06164622c14af01409655773c66dea21a4d9" \
	cluster-infrastructure="openais" \
	expected-quorum-votes="2" \
	no-quorum-policy="ignore" \
	stonith-enabled="false" \
	last-lrm-refresh="1303922378"
Poznámka * není-li uveden parametr --type, pracuje se přímo s atributy nastavení celého clusteru (sekce property)
  • Hodnotou atributu musí být pouze ascii znaky. Ne proto že by nebylo možné vkládat unicode řetězce, ale proto že s nimi neumí (zatím) pracovat crm

Stejná operace realizovaná prostřednictvím crm

Poznámka
crm(live)node# attribute snoopy set note 'Stroj v racku 10'
crm(live)node# attribute snoopy show note
scope=nodes  name=note value=Stroj v racku 10
crm(live)node# show
charlie-brown: normal
snoopy: normal
	note: Příliš žluťoučký kůň

Vytvoření zdroje

CRM - vytváření zdrojů

Umístění a závislé spouštění zdrojů v rámci clusteru

CRM - přidělování zdrojů