Cluster MBA7

From PlcWiki

Jump to: navigation, search

Ukázalo se, že používat KVM a DRBD v clusteru bez specializovaného řídícího mechanismu je sice možné, ale spousta běžných činností se pak stává příliš složitou a jejich zajištění by vyžadovalo spoustu další práce.

Jeden příklad za všechny: nastartování VM kernelu při startu hostitelského stroje. Nastartovat kernel je samozřejmě možné pouze na jednom uzlu, takže kernel se nastartovat nesmí, pokud na druhém uzlu už jedna instance běží, což vyžaduje komunikaci mezi oběma uzly.

Všechno to je samozřejmě možné doimplementovat, ale mnohem lepší je použít zavedená a osvědčená řešení.

Zvolil jsem Pacemaker + Corosync(OpenAIS) - cluster stack upřednostňovaný jak Redhatem, tak i Novellem. Více o Pacemakeru na http://www.clusterlabs.org popř. http://www.slideshare.net/DanFrincu/pacemaker-drbd .

File:pacemaker.png

File:P1090775.JPG

Pacemaker v našem případě zajišťuje to, aby replikované DRBD úložistě bylo připojeno právě na jednom živém uzlu a v závislosti na tom, aby se na daný uzel přesouval virtualizovaný kernel. Zároveň pomocí pingd (test konektivity proti 10.48.1.240 a 10.48.1.3) sleduje konektivitu na jednotlivých uzlech a automaticky přesouvá primární DRBD úložiště na uzel, který konektivitu neztratil.

Současně s DRBD úložištěm se díky závislostem přesouvá i virtualizovaný kernel. Přesun kernelu probíhá tak, že se hibernuje na původním uzlu a obnoví svou činnost na cílovém uzlu. Celá operace obvykle proběhne do dvou minut (typicky za 90s), aniž by se např. přerušily otevřené SSH relace. Migraci lze vyvolat i ručně: buď příkazem nebo speciální aplikací.

Dalším prostředkem, který se automaticky přesouvá spolu s primárním DRBD úložištěm je IP adresa 10.48.1.48, kterou jsem si k tomuto účelu dovolil použít (tj. je to označení uzlu, na němž aktuálně běží kernel).

Pro pohodlné ovládání clusteru je dobré si nainstalovat Linux Cluster Management Console: http://sourceforge.net/projects/lcmc/files/

File:lcmc.png


Z konzole je možné cluster ovládat pomocí LSB služby clevervm, kterou jsem k tomuto účelu vytvořil (až na výjimky nezáleží na jakém uzlu se příkazy zadávají):


service clevervm status

Zobrazí podrobný stav cluster, příklad:

============
Last updated: Thu May 31 12:42:05 2012
Last change: Thu May 31 12:33:14 2012 via cibadmin on sasmbohost1.mbo.sas-automotive.com
Stack: openais
Current DC: sasmbohost1.mbo.sas-automotive.com - partition with quorum
Version: 1.1.6-3.el6-a02c0f19a00c1eb2527ad38f146ebc0834814558
2 Nodes configured, 2 expected votes
8 Resources configured.
============

Node sasmbohost2.mbo.sas-automotive.com: online
        res_drbd_1:1    (ocf::linbit:drbd) Master
        res_Filesystem_1        (ocf::heartbeat:Filesystem) Started
        res_clevervm_1  (lsb:clevervm) Started
        res_libvirtd_libvirtd   (lsb:libvirtd) Started
        res_ping_gateway:1      (ocf::pacemaker:ping) Started
        res_IPaddr2_CIP (ocf::heartbeat:IPaddr2) Started
Node sasmbohost1.mbo.sas-automotive.com: online
        res_ping_gateway:0      (ocf::pacemaker:ping) Started
        res_drbd_1:0    (ocf::linbit:drbd) Slave

Inactive resources:


Migration summary:
* Node sasmbohost2.mbo.sas-automotive.com:
* Node sasmbohost1.mbo.sas-automotive.com:

====== DRBD storage =======

  1:a3/0  Connected Primary/Secondary UpToDate/UpToDate A r----- /opt ext4 253G 107G 134G 45%

==== Virtual machines =====

---------------------------
Name:           plcmba7krnl
State:          running
Managed save:   no
---------------------------

service clevervm start

Nastartuje virtuální stroj(e). Pokud je ovšem v Pacemakeru služba označena jako zastavená, dojde k nekonsistenci a bude nutné stav nějak ošetřit. Doporučuji nepoužívat, stejně jako startování virtuálního stroje pomocí virsh, jehož je tento příkaz obdobou.


service clevervm forcestart

Nastartuje virtuální stroj(e) pomocí Pacemakeru. To se hodí se, pokud byla předtím služba označena v Pacemakeru jako zastavená.


service clevervm stop

Zastaví (hibernuje) virtuální stroj(e). Pokud je ovšem v Pacemakeru služba označena jako spuštěná, Pacemaker ji znovu nastartuje. Doporučuji nepoužívat, stejně jako hibernování virtuálního stroje pomocí virsh, jehož je tento příkaz obdobou.


service clevervm forcestop

Zastaví virtuální stroj(e) pomocí Pacemakeru a označí službu jako zastavenou.


service clevervm cleanup

Vyčistí stav služby - smaže případné záznamy o selháních, čímž umožní službu znovu nastartovat, pokud byl dosažen počet povolených selhání na daném uzlu.


service clevervm migrate

Donutí Pacemaker, aby migroval primární DRBD úložiště (a tím i všechny závislé služby) pryč z tohoto uzlu (tj. na protější uzel). Tento uzel bude označen jako nezpůsobilý k provozu služeb. Pro odejmutí tohoto omezení je nutné zavolat po migraci příkaz unmigrate.


service clevervm unmigrate

Odebere od tohoto uzlu příznak "nezpůsobilý k provozu služeb". Neznamená to automatický přesun služeb zpět, jelikož funguje určitá setrvačnost (stickiness), zabraňující službám fluktuovat.


Split-brain

DRBD split-brain recovery: http://www.drbd.org/users-guide/s-resolve-split-brain.html

Personal tools