Cluster MBA7
From PlcWiki
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 .
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/
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