Aktivní-aktivní, nebo aktivní-pasivní cluster?
Návrh clusteru by měl odpovědět na otázku, jestli mají všechny jeho nody přistupovat k datům simultánně (active-active cluster), nebo budou data v danou chvíli dostupná jen jednomu z nodů (active-passive). Zpravidla to bude záviset na aplikaci/aplikacích, které v clusteru chcete provozovat. Pokud je vaše aplikace schopná běžet na více strojích současně, pravděpodobně zvolíte aktivní-aktivní přístup (s tím, že aplikace musí počítat s možností výpadku nodu, např. z důvodu fencingu). Pokud plánujete cluster využívat hlavně jako rychlé zotavení v případě výpadku nodu/nodů, kde aplikace běží, sáhnete nejspíše po aktivním-pasivním clusteru.
Přístup k datům v clusteru se na distribucích odvozených od Fedory a RHEL řeší pomocí LVM. Veškerá sdílená data by měla být na svazcích LVM, protože právě to poskytuje clusteru potřebné prostředky pro správu přístupu k datům. U aktivního-aktivního clusteru budeme chtít, aby LV byly aktivovány na všech nodech současně. To zajistí CLVM, clustered LVM, jakási nadstavba nad běžné LVM. Pro aktivní-pasivní cluster bude stačit LVM dostupné při instalaci systému. V aktivním-pasivním clusteru je každé z LV, na kterém jsou uložena sdílená data, aktivováno vždy jen na jednom nodu, a to díky tzv. taggingu a exclusive módu.
Pokud jde o filesystémy, pro aktivní-aktivní cluster je potřeba použít takový, který umožňuje čtení a zápis z více nodů najednou. Jedním z nich je GFS2. Ve failover clusteru, tj. aktivním-pasivním, lze použít minimálně ext3, ext4 a XFS. Tyto nemají možnost zápisu z více nodů, a proto u nich nepoužijeme CLVM. Naopak nutné je CLVM při použití GFS2.
Máme sdílené úložiště. Jak ho použít?
Z předchozího dílu byste měli mít připravené úložiště pomocí iSCSI a multipath. To znamená, že na úrovni úložiště mají na LUNy přístup oba nody zároveň. Aby mohla o přístupu na LUNy rozhodovat logika clusteru, bude potřeba zahrnout je do LVM, a to buď CLVM, nebo běžného LVM – viz výše. V tomto díle do clusteru přidáme web server, který bude obsluhovat httpd
. To samo o sobě není schopno běžet v aktivním-aktivním módu; proto nakonfigurujeme úložiště jako aktivní-pasivní. V některém z příštích dílů se podíváme na aktivní-aktivní přístup k datům pomocí GFS2.
V tomto díle chceme docílit funkčního webserveru na aktivním-pasivním přístupu na data. Filesystém GFS2 tedy nepoužijeme a data uložíme na jeden z FS, umožňujících přístup jen z jednoho nodu, např. moderní XFS. Protože je v Linuxu zvykem oddělovat konfigurační soubory od dat, budeme se tohoto zvyku držet i v našem clusteru a vytvoříme ve sdílené VG jeden menší LV pro konfigurační soubory webserveru a druhý LV pro samotná data webové aplikace.
Příprava LVM a filesystémů pro použití v clusteru
Na jednom z nodů, např. nodu 1, vytvoříme VG z LUNu exportovaného přes iSCSI. Nejdříve se podíváme, jak se jmenuje mapa, mpath, pod kterou jsou všechny dostupné cesty, paths, k danému LUNu.
[root@f25a ~]# multipath -ll mpatha (36001405b2ca0e79775f4ef3bf59803e8) dm-1 LIO-ORG ,cluster1lun1 size=1.0G features='0' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=1 status=active | `- 3:0:0:1 sdb 8:16 active ready running `-+- policy='service-time 0' prio=1 status=enabled `- 2:0:0:1 sda 8:0 active ready running
Tuto mpath použijeme jako PV pro naši VG, kterou nazveme třeba havg1
[root@f25a ~]# pvcreate /dev/mapper/mpatha Physical volume "/dev/mapper/mpatha" successfully created. [root@f25a ~]# vgcreate havg1 /dev/mapper/mpatha Volume group "havg1" successfully created
Nyní ve VG havg1
vytvoříme dva LV, configlv
a datalv
, a na nich XFS. LV configlv
alokujeme 100MB a LV datalv
bude mít 300 MB. Tím, že ve VG ponecháme volné místo, budeme moci rychle přidat, pokud filesystémům místo dojde.
[root@f25a ~]# lvcreate -n configlv --size 100M havg1 Logical volume "configlv" created. [root@f25a ~]# lvcreate -n datalv --size 300M havg1 Logical volume "datalv" created. [root@f25a ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root fedora -wi-ao---- 4.49g configlv havg1 -wi-a----- 100.00m datalv havg1 -wi-a----- 300.00m [root@f25a ~]# mkfs.xfs /dev/havg1/configlv meta-data=/dev/havg1/configlv isize=512 agcount=4, agsize=6400 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=0, rmapbt=0, reflink=0 data = bsize=4096 blocks=25600, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=855, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 [root@f25a ~]# mkfs.xfs /dev/havg1/datalv meta-data=/dev/havg1/datalv isize=512 agcount=4, agsize=19200 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=0, rmapbt=0, reflink=0 data = bsize=4096 blocks=76800, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=855, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
Nakonec na obou nodech vytvoříme adresáře, kam cluster (přesněji pacemaker) tyto FS připojí, až se dané resources spustí.
[root@f25a ~]# mkdir -p /web/{data,config} [root@f25b ~]# mkdir -p /web/{data,config}
Přidání LVM a filesystémů do clusteru
Abychom mohli použít LVM resource v clusteru, budeme muset na obou cluster nodech nastavit určitý parametr v LVM konfiguraci. Ten parametr se nazývá volume_list
a určuje, které VG a LV se v systému aktivují při bootu. Obvykle se použije logika povolit aktivaci všech VG a LV, které nutně potřebujeme při bootu (v našem případě to bude jen systémová VG fedora), a ostatní VG a LV ponechat nedefinováné. Tím se aktivují jen ty VG a LV, které jsou definovány. Což je logické. Na rozdíl od aktivního-aktivního clusteru nepoužíváme v aktivním-pasivním CLVM, a proto by měly být sdílené LV aktivovány jen na jednom z nodů. Kdybychom LVM pomocí parametru volume_list
aktivaci neomezili jen na lokální VG a LV, oba nody by aktivovaly všechny LV, které v systému vidí, včetně sdílených.
/etc/lvm/lvm.conf # Example # volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ] volume_list = [ "fedora" ]
Také budeme potřebovat deaktivovat lvmetad
, což je subsystém snažící se cachovat LVM metadata a redukovat skenování PV. Nejsnadněji to provedeme příkazem:
# lvmconf --enable-halvm --services --startstopservices
Po každé modifikaci systémové konfiguračního souboru LVM /etc/lvm/lvm.conf, je potřeba rekompilovat initramfs
:
# dracut -f
Samotné přidání LVM resource přidáme příkazem:
[root@f25b ~]# pcs resource create havg1 LVM volgrpname=havg1 exclusive=true --group ha-web Assumed agent name 'ocf:heartbeat:LVM' (deduced from 'LVM') [root@f25b ~]# pcs status Cluster name: cluster1 Stack: corosync Current DC: node1 (version 1.1.16-1.fc25-94ff4df) - partition with quorum Last updated: Fri Aug 25 01:00:23 2017 Last change: Fri Aug 25 01:00:20 2017 by root via cibadmin on node1 2 nodes configured 2 resources configured Online: [ node1 node2 ] Full list of resources: xvmfence (stonith:fence_xvm): Started node1 Resource Group: ha-web havg1 (ocf::heartbeat:LVM): Started node1 Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
Pozorný čtenář si určitě všimnul následujících detailů:
Assumed agent name 'ocf:heartbeat:LVM' (deduced from 'LVM')
: Agent tady znamená resource agent neboli skript, který daný resource obsluhujeexclusive=true
: exkluzivní aktivace, tzn. jen na jednom z nodů v daný moment--group ha-web
: instruuje pacemaker vytvořit RG, resource group, nazvanou ha-web
Informace o jednotlivých resource agentech zjistíte příkazem:
# pcs resource list # pcs resource describe RA [root@f25b ~]# pcs resource describe LVM Assumed agent name 'ocf:heartbeat:LVM' (deduced from 'LVM') ocf:heartbeat:LVM - Controls the availability of an LVM Volume Group Resource script for LVM. It manages an Linux Volume Manager volume (LVM) as an HA resource. Resource options: volgrpname (required): The name of volume group. exclusive: If set, the volume group will be activated exclusively. This option works one of two ways. If the volume group has the cluster attribute set, then the volume group will be activated exclusively using clvmd across the cluster. If the cluster attribute is not set, the volume group will be activated exclusively using a tag and the volume_list filter. When the tag option is in use, the volume_list in lvm.con must be initialized. This can be as simple as setting 'volume_list = []' depending on your setup. tag: If "exclusive" is set on a non clustered volume group, this overrides the tag to be used. partial_activation: If set, the volume group will be activated partially even with some physical volumes missing. It helps to set to true when using mirrored logical volumes. Default operations: start: interval=0s timeout=30 stop: interval=0s timeout=30 monitor: interval=10 timeout=30 [root@f25b ~]#
Pokud se zamýšlíte nad označením ocf:heartbeat:LVM, vězte, že jde o standard:provider:resource agent. Standard je v tomto případě open cluster framework.
Pro přidání FS resource do resource group spusťte:
[root@f25b ~]# pcs resource create webconfigfs Filesystem device=/dev/havg1/configlv directory=/web/config fstype=xfs --group ha-web Assumed agent name 'ocf:heartbeat:Filesystem' (deduced from 'Filesystem') [root@f25b ~]# pcs status Cluster name: cluster1 Stack: corosync Current DC: node1 (version 1.1.16-1.fc25-94ff4df) - partition with quorum Last updated: Fri Aug 25 01:38:18 2017 Last change: Fri Aug 25 01:38:15 2017 by root via cibadmin on node1 2 nodes configured 3 resources configured Online: [ node1 node2 ] Full list of resources: xvmfence (stonith:fence_xvm): Started node1 Resource Group: ha-web havg1 (ocf::heartbeat:LVM): Started node1 webconfigfs (ocf::heartbeat:Filesystem): Started node1 Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled [root@f25b ~]#
Proč jsou parametry device
,directory
afstype
specifikovány? Protožepcs resource describe Filesystem
je označuje za nezbytné, bez nich se resource tohoto typu nevytvoří.--group ha-web
je uveden samozřejmě proto, že chceme, aby tento FS byl součástí resource group ha-web.
Stejně budeme postupovat také při přidávání druhého FS:
[root@f25b ~]# pcs resource create webdatafs Filesystem device=/dev/havg1/datalv directory=/web/data fstype=xfs --group ha-web Assumed agent name 'ocf:heartbeat:Filesystem' (deduced from 'Filesystem') [root@f25b ~]# pcs status Cluster name: cluster1 Stack: corosync Current DC: node1 (version 1.1.16-1.fc25-94ff4df) - partition with quorum Last updated: Fri Aug 25 01:55:39 2017 Last change: Fri Aug 25 01:55:36 2017 by root via cibadmin on node1 2 nodes configured 4 resources configured Online: [ node1 node2 ] Full list of resources: xvmfence (stonith:fence_xvm): Started node1 Resource Group: ha-web havg1 (ocf::heartbeat:LVM): Started node1 webconfigfs (ocf::heartbeat:Filesystem): Started node1 webdatafs (ocf::heartbeat:Filesystem): Started node1 Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
Že LV jsou skutečně aktivované jen na jednom z nodů a FS skutečně namountované jen na nodu, kde jsou aktivované LV, si snadno ověříte příkazylvs
a grep web /proc/mounts
.
Instalace webserveru, nastavení správných práv a vlastníka a SElinux kontextu
Nyní máme nody připravené na LVM pomocí taggingu a v clusteru je definovaná skupina ha-web, obsahující LVM resource (VG) a dva FS, kam uložíme konfiguraci webserveru a jeho data. Zbývá se ještě postarat o správná práva, vlastníka a pokud je SElinux aktivovaný, také správný SElinux kontext na webových adresářích, kam se FS připojí. Nejpre ale nainstalujme webserver apache
. Tím se vytvoří i uživatel a skupina apache
, takže budeme moci změnit vlastníka adresářů. A pokud do instalačního příkazu přidáme i balíky php
a mod_php
, budeme připraveni také PHP aplikaci. Dále se nám bude hodit balík policycoreutils-devel
, obsahující nástroj semanage
, po němž sáhneme pro změnu kontextu.
# dnf install -y httpd php mod_php policycoreutils-devel
Na obou nodech změníme vlastníka adresářů /web/{data,config}
, upravíme práva…
# chmod 755 -R /web/ ; chown apache:apache -R /web/
… zjistíme, jaký SElinux kontext httpd využívá, a nastavíme ho na adresář /web
. Tady je dobré vědět, že httpd standardně ukládá data do/var/www/html
a konfiguraci do /etc/httpd
. Proto i naše nestandardní umístění dat v /web/data
, resp./web/config
by mělo mít odpovídající kontext. Pro data to budehttpd_sys_rw_content_t
a pro data httpd_config_t
# semanage fcontext --list | egrep "/etc/httpd|/var/www/html" /etc/httpd(/.*)? all files system_u:object_r:httpd_config_t:s0 [...] /var/www/html(/.*)?/sites/default/files(/.*)? all files system_u:object_r:httpd_sys_rw_content_t:s0 /var/www/html(/.*)?/sites/default/settings\.php regular file system_u:object_r:httpd_sys_rw_content_t:s0 /var/www/html(/.*)?/uploads(/.*)? all files system_u:object_r:httpd_sys_rw_content_t:s0 /var/www/html(/.*)?/wp-content(/.*)? all files system_u:object_r:httpd_sys_rw_content_t:s0 /var/www/html(/.*)?/wp_backups(/.*)? all files system_u:object_r:httpd_sys_rw_content_t:s0 /var/www/html/[^/]*/cgi-bin(/.*)? all files system_u:object_r:httpd_sys_script_exec_t:s0 [...]
Obdobně jako jsme použilisemanage
ke zjištění vhodného kontextu, použijeme stejný příkaz i pro vytvoření SElinux policy pro adresáře ve /web
. Nově vytvořenou policy aplikujeme příkazem restorecon
. Budete-li někdy v pokušení měnit SElinux kontext pomocí chcon
, mějte na paměti, že taková změna nebude trvalá.
[root@f25a ~]# semanage fcontext -at httpd_sys_rw_content_t '/web/data(/.*)?' [root@f25a ~]# restorecon -Rv /web/data/ restorecon reset /web/data context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_rw_content_t:s0 [root@f25a ~]# ll -dZ /web/data/ drwxr-xr-x. 2 apache apache unconfined_u:object_r:httpd_sys_rw_content_t:s0 6 Aug 24 01:00 /web/data/ [root@f25a ~]# semanage fcontext -at httpd_config_t '/web/config(/.*)?' [root@f25a ~]# restorecon -Rv /web/config/ restorecon reset /web/config context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_config_t:s0 [root@f25a ~]# ll -dZ /web/config/ drwxr-xr-x. 2 apache apache unconfined_u:object_r:httpd_config_t:s0 6 Aug 24 01:00 /web/config/
Konfigurace webserveru, spuštění nanečisto a vytvoření cluster resource service IP a httpd. Povolení firewallu
Teď už nám nic nebrání v konfiguraci webserveru, jehož konfigurační soubory zkopírujeme z /etc/httpd
do /web/config
, změníme některé direktivy a zkusíme ho spustit na popředí. Toto provedeme na nodu, kde jsou FS namountované, neboli tam, kde je spuštěná RG ha-web
[root@f25a ~]# rsync -av /etc/httpd/ /web/config/ sending incremental file list ./ logs -> ../../var/log/httpd modules -> ../../usr/lib64/httpd/modules run -> /run/httpd conf.d/ conf.d/README conf.d/autoindex.conf conf.d/php.conf conf.d/userdir.conf conf.d/welcome.conf conf.modules.d/ conf.modules.d/00-base.conf conf.modules.d/00-dav.conf conf.modules.d/00-lua.conf conf.modules.d/00-mpm.conf conf.modules.d/00-optional.conf conf.modules.d/00-proxy.conf conf.modules.d/00-systemd.conf conf.modules.d/01-cgi.conf conf.modules.d/10-h2.conf conf.modules.d/10-proxy_h2.conf conf.modules.d/15-php.conf conf.modules.d/README conf/ conf/httpd.conf conf/magic sent 40,179 bytes received 409 bytes 81,176.00 bytes/sec total size is 38,812 speedup is 0.96
Pro přehlednost seznam změn v konfiguračním souboru httpd.conf
:
/etc/httpd/conf/httpd.conf: ServerRoot "/etc/httpd" /web/config/conf/httpd.conf: ServerRoot "/web/config" /etc/httpd/conf/httpd.conf: DocumentRoot "/var/www/html" /web/config/conf/httpd.conf: DocumentRoot "/web/data" /etc/httpd/conf/httpd.conf: AllowOverride None # Allow open access: Require all granted /web/config/conf/httpd.conf: AllowOverride None # Allow open access: Require all granted /etc/httpd/conf/httpd.conf: # # Possible values for the Options directive are "None", "All", # or any combination of: # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews # # Note that "MultiViews" must be named *explicitly* --- "Options All" # doesn't give it to you. # # The Options directive is both complicated and important. Please see # http://httpd.apache.org/docs/2.4/mod/core.html#options # for more information. # Options Indexes FollowSymLinks # # AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywords: # Options FileInfo AuthConfig Limit # AllowOverride None # # Controls who can get stuff from this server. # Require all granted /web/config/conf/httpd.conf: Options Indexes FollowSymLinks AllowOverride None Require all granted
Spustíme webserver ručně a se změněným konfiguračním souborem a ověříme, jestli poslouchá na portu 80. Můžeme i otestovat uvítací stránku pomocíelinks
(hláška o chybějícím FQDN není pro náš test podstatná):
[root@f25a ~]# httpd -f /web/config/conf/httpd.conf -kstart AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using f25a.example.com. Set the 'ServerName' directive globally to suppress this message [root@f25a ~]# lsof -nPi | grep *:80 httpd 5095 root 4u IPv6 93699 0t0 TCP *:80 (LISTEN) httpd 5096 apache 4u IPv6 93699 0t0 TCP *:80 (LISTEN) httpd 5097 apache 4u IPv6 93699 0t0 TCP *:80 (LISTEN) httpd 5098 apache 4u IPv6 93699 0t0 TCP *:80 (LISTEN) httpd 5099 apache 4u IPv6 93699 0t0 TCP *:80 (LISTEN) httpd 5100 apache 4u IPv6 93699 0t0 TCP *:80 (LISTEN) [root@f25a ~]# dnf install elinks -y ; elinks http://localhost
V tuto chvíli můžeme na obou nodech povolit firewall pro komunikaci na portu 80 (služba httpd
):
[root@f25a ~]# firewall-cmd --permanent --add-service=http ; firewall-cmd --reload success success [root@f25b ~]# firewall-cmd --permanent --add-service=http ; firewall-cmd --reload success success
… a pokud v prohlížeči zadáme http://f25a/
, měli bychom vidět testovací httpd stránku Fedory. Pokud ano, směle do instalace PHP aplikace! Zkusíme spustit aplikaci postavenou na českém PHP frameworku Nette. Pozor při stahování: verze Nette-2.4–20170714 mi nefungovala a logovala problém týkající se PHP. Verze Nette-2.3–20161221 už funguje správně. Framework zkopírujte na node, kde je zrovna spuštěna skupina ha-web (např. pomocí scp
), rozbalte na nodu archiv a zkopírujte adresářsandbox
do /web/data
. Tento adresář obsahuje kompletní PHP aplikaci.
[root@f25a Nette-2.3-20161221]# rsync -av sandbox /web/data/ sending incremental file list [...]
Aby se naše první aplikace nejmenovala jako pískoviště, přejmenujme ji třeba na luxus-ha-web mv /web/data/sandbox/ /web/data/luxus-ha-web
a změňme práva pro některé adresáře v rámci aplikace, cd /web/data/luxus-ha-web && chmod -R a+rw temp log
. Celý webserver se pokusíme restartovat příkazem httpd -f /web/config/conf/httpd.conf -krestart
.
Pokud vše funguje a na adrese http://f25a/luxus-ha-web/www/ vidíte
modrou uvítací stránku Nette frameworku, máte vyhráno! Teď už stačí jen zastavit webserver killall httpd
nebo httpd -f /web/config/conf/httpd.conf -kstop
a přidat webserver a IP resource do clusteru. Uvidíte, že tohle už bude hračka!
Přidání webserveru s PHP aplikací (Nette) a IP resource do clusteru
Aby byla služba komunikující přes síť dostupná (tedy i webserver), potřebuje IP. A protože je řeč o vysoce dostupném webserveru, budeme chtít, aby také IP, na kterém webserver běží, byla vysoce dostupná (service IP). Proto do clusteru přidáme IP resource. IP resource poběží, pokud není specifikováno jinak (např. parametrem nic při vytváření resource), na síťové kartě vybrané na základě routovací tabulky. Rozhodně by bylo výhodné si síťovky, kde service IP poběží, dát do bondu nebo teamu; cluster v článku tento problém zanedbává, bude používat jen samotatné síťovky a vystavuje tak celý design slabému místu – single point of failure.
Podíváme se, jaké parametry resource agent IPaddr2 nabízí, a zadáme jediný povinný, a to parametr ip:
# pcs resource describe IPaddr2 # pcs resource create webip IPaddr2 ip=192.168.10.33 --group ha-web Assumed agent name 'ocf:heartbeat:IPaddr2' (deduced from 'IPaddr2') # pcs status Cluster name: cluster1 Stack: corosync Current DC: node1 (version 1.1.16-1.fc25-94ff4df) - partition with quorum Last updated: Sat Aug 26 01:03:07 2017 Last change: Sat Aug 26 01:03:04 2017 by root via cibadmin on node1 2 nodes configured 5 resources configured Online: [ node1 node2 ] Full list of resources: xvmfence (stonith:fence_xvm): Started node1 Resource Group: ha-web havg1 (ocf::heartbeat:LVM): Started node1 webconfigfs (ocf::heartbeat:Filesystem): Started node1 webdatafs (ocf::heartbeat:Filesystem): Started node1 webip (ocf::heartbeat:IPaddr2): Started node1 Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
O tom, že IP běží na stejném nodu jako zbytek skupiny ha-web, se přesvědčíme jednoduše (všimněte si samostatné síťové karty, kde IP běží. Toto je slabé místo a rozhodně je vhodné ho ošetřit – to už nechám na vašem uvážení):
# ip -o a | grep 10.33 3: ens3 inet 192.168.10.33/24 brd 192.168.10.255 scope global secondary ens3\ valid_lft forever preferred_lft forever
Teď konečně přichází na řadu resource webserveru, neboli apache. Nezapomeňte specifikovat parametr configfile, protože nevyužíváme standardní umístění:
# pcs resource create webserver apache configfile=/web/config/conf/httpd.conf --group ha-web Assumed agent name 'ocf:heartbeat:apache' (deduced from 'apache') # pcs status Cluster name: cluster1 Stack: corosync Current DC: node1 (version 1.1.16-1.fc25-94ff4df) - partition with quorum Last updated: Sat Aug 26 01:14:50 2017 Last change: Sat Aug 26 01:14:41 2017 by root via cibadmin on node1 2 nodes configured 6 resources configured Online: [ node1 node2 ] Full list of resources: xvmfence (stonith:fence_xvm): Started node1 Resource Group: ha-web havg1 (ocf::heartbeat:LVM): Started node1 webconfigfs (ocf::heartbeat:Filesystem): Started node1 webdatafs (ocf::heartbeat:Filesystem): Started node1 webip (ocf::heartbeat:IPaddr2): Started node1 webserver (ocf::heartbeat:apache): Started node1 Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
Funkčnost samozřejmě zjistíme, otevřeme-li adresu http://192.168.10.33/luxus-ha-web/www/ v prohlížeči:
Důležitá poznámka: teď, když na exportovaných LUNech existuje VG a v nich LV, bude obojí dostupné a viditelné i na iSCSI targetu. Po rebootu iSCSI targetu by se stalo, že oba LV obsažené v nově vytvořené VGhavg1
budou aktivovány. Protože jehavg1
umístěna uvnitř exportovaného LV exportvg/cluster1lun1
, znemožnilo by totarget service
LVexportvg/cluster1lun1
použít pro export. Výsledkem by bylo, že bychom v targetcli
, v sekciluns
námi definovaného exportu, neviděli žádný exportovaný LUN. Tím pádem by ani iSCSI klienti – cluster nody – žádný LUN neměli k dispozici. Tomuto je třeba předejít: v souboru/etc/lvm/lvm.conf
změníme parametrvolume_list
podobně jako dříve na nodech clusteru. Ponecháme systémovou VG fedora a exportní VG exportvg).
/etc/lvm/lvm.conf # Example # volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ] volume_list = [ "fedora", "exportvg" ]
Samozřejmě i tady platí, že je potřeba rekompilovatinitramfs
:
# dracut -f
Rekapitulace
V tomto díle jsme se seznámili s možnostmi využití úložiště exportovaného v díle minulém a využili jednu z nich, LVM pomocí taggingu a exclusive módu. Vznikl tím aktivní-pasivní cluster (failover). Jako službu, kterou nám tento cluster bude poskytovat, jsme zvolili webserver pomocí apache
a přidali jsme do něj funkcionalitu PHP. Jednu PHP aplikaci v podobě frameworku Nette jsme nakopírovali na sdílený FS a otestovali její funkčnost.
Příští díl bude výhradně clusterový; budeme se zabývat constrainty, resource stickiness a resource operacemi.