Red Hat Cluster Suite (RHCS) e' il prodotto di clustering realizzato da Red Hat e distruibuito con l'omonimo sistema operativo basato su Linux.
Un cluster consente di definire come servizi risorse ed applicazioni ospitate su una serie di server. Ciascun server puo' ospitare i servizi del cluster e, automaticamente nel caso vi sia un fault, questi possono migrare su un nuovo server, La configurazione in cluster di applicazioni e risorse consente quindi di garantire un'elevata disponibilita' dei servizi detta anche HA: High Availability.
Quando un servizio applicativo migra da un server ad un altro, anche l'IP address assegnato al servizio viene assegnato al nuovo server ospite. In questo modo tutti gli accessi al servizio possono riprendere in modo "trasparente" quindi senza che sia necessaria alcuna modifica.
Un cluster RHCS e' composto da una serie di sistemi
detti member (fino a 32)
su cui vengono ospitati i servizi applicativi.
Tutti i sistemi sono naturalmente Linux Red Hat.
I sistemi sono comunicano tra loro mediante una rete
dedicata utilizzata dal protocollo di heartbeat.
I servizi prendono il nome di service.
All'avvio dei server i vari member del cluster
si collegano tra loro per raggiungere il quorum.
Quando questo viene raggiunto si forma il cluster e
vengono attivati i servizi.
Per evitare la situazione di split brain (possibile con
la presenza di soli due nodi) vengono tipicamente utilizzati
fence devices.
Il cluster controlla l'effettivo funzionamento
di ogni sistema e di ogni servizio effettuando riavvii
e migrazioni dei servizi quando necessario.
RHCS consente anche di definire un server Linux "virtuale"
e sempre disponibile: VLS (Virtual Linux Server) combinando
le funzioni di cluster active-passive ed il load-balancing.
Tuttavia in questo breve documento non trattiamo tale aspetto.
Per controllare il corretto funzionamento del cluster
si utilizza il comando:
La situazione riportata indica che il cluster
e' attivo, e' costituito da due sistemi,
o member, entrambe attivi (Online).
I member risultano invece Offline quando sono spenti
o non raggiungibili.
Il nodo locale, da cui e' stato lanciato il comando, e'
saturno e su entrambe i server e' attivo l'rgmanager.
I comandi seguenti effettuano il
fermo del primo servizio, lo switch del secondo e controllano
la nuova situazione:
La situazione riportata indica che il servizio deimos non
e' attivo ed i rimanenti servizi sono started su saturno.
A questo punto su marte non vi sono piu' servizi attivi ed e'
possibile, per esempio, effettuare un intervento sistemistico
sul sistema.
Per evitare la disattivazione dei servizi quando si deve chiudere
il cluster
si effettua il lock del cluster con il comando clusvcadm -l.
La configurazione viene mantenuta sul file in formato XML
/etc/cluster/cluster.conf. Ecco un estratto di esempio:
Per variare la configurazione dei servizi del cluster e' sufficiente modificare
il file /etc/cluster/cluster.conf incrementando il numero di versione
(config_version) ed
apportando le modifiche volute. Quindi per aggiornare tutti i nodi i comandi sono:
RHCS dispone di un'interfaccia grafica sia per la configurazione
che per la gestione del cluster.
Entrambe le interfacce vengono richiamate dalla console.
La versione di RHCS e' legata a quella della distribuzione Linux.
Dalla versione 5 l'advance platform RHEL (Red Hat Enterprise Linux)
comprende la RHCS (Red Hat Cluster Suite)
ed il GFS (Global File System). Nelle versioni
precedenti il supporto dei due prodotti doveva essere acquistato
separatamente.
Al boot sono tipicamente attivati (da /etc/rc3.d) i seguenti script:
Per un'introduzione ai cluster consultare
questo documento.
I comandi principali dei piu' diffusi ambienti di
cluster disponibili su Unix sono su
questa tabella.
Un confronto sintetico tra RHCS e VCS, il diffuso cluster distribuito
da Veritas/Symantec, e' riportato su
questa pagina.
Formato il cluster i servizi partono sui
member previsti dalla configurazione.
L'insieme dei member su cui un servizio puo' essere attivato e'
chiamato failover domain.
Ad ogni servizio corrispondono una serie gerarchica
di oggetti che debbono essere attivati seguendo un
preciso ordine definito dalla configurazione.
Gli oggetti possono essere di tipo differente: fs (file system),
ip (ip address), script (shell script), nfsexport, ...
# clustat
Member Status: Quorate
Member Name Status
------ ---- ------
marte Online, rgmanager
saturno Online, Local, rgmanager
Service Name Owner (Last) State
------- ---- ----- ------ -----
deimos marte started
phobos marte started
titano saturno started
Sul cluster sono presenti tre servizi: moon01, moon02, moon03.
I servizi sono attivi (started) su uno dei due sistemi.
I servizi possono anche essere starting, stopping,
stopped, disabled e failed a seconda del loro stato.
# clusvcadm -d deimos
# clusvcadm -d phobos
# clusvcadm -e phobos
# clustat
Member Status: Quorate
Member Name Status
------ ---- ------
marte Online, rgmanager
saturno Online, Local, rgmanager
Service Name Owner (Last) State
------- ---- ----- ------ -----
deimos (marte) stopped
phobos saturno started
titano saturno started
<?xml version="1.0"?>
<cluster alias="prod-mysql" config_version="171" name="planetario">
<fence_daemon post_fail_delay="20" post_join_delay="15"/>
<clusternodes>
<clusternode name="marte" votes="1">
<multicast addr="224.0.0.240" interface="bond0"/>
<fence/>
</clusternode>
<clusternode name="saturno" votes="1">
<multicast addr="224.0.0.240" interface="bond0"/>
<fence/>
</clusternode>
...
</clusternodes>
<cman expected_votes="1" two_node="1">
<multicast addr="224.0.0.240"/>
</cman>
<fencedevices/>
<rm>
<failoverdomains>
<failoverdomain name="mysql1-domain" ordered="0" restricted="1">
<failoverdomainnode name="saturno" priority="1"/>
<failoverdomainnode name="marte" priority="1"/>
</failoverdomain>
<failoverdomain name="mysql2-domain" ordered="0" restricted="1">
<failoverdomainnode name="marte" priority="1"/>
<failoverdomainnode name="saturno" priority="1"/>
</failoverdomain>
...
</failoverdomains>
<resources>
<nfsclient name="nfs_bck" options="no_root_squash,rw,sync" target="nfs_bck"/>
</resources>
<service autostart="0" domain="mysql1-domain" name="titano" recovery="relocate">
<fs device="/dev/vg_mysql1/lv_mydata1" force_fsck="1" force_unmount="1" fsid="62308"
fstype="ext3" mountpoint="/mydata1" name="data1" options="" self_fence="0">
<script file="/etc/init.d/mysql_service1" name="mysql1"/>
<nfsexport name="mydata1_nfs">
<nfsclient ref="nfs_bck"/>
</nfsexport>
</fs>
<ip address="10.0.0.69" monitor_link="1"/>
<fs>
...
</service>
...
</rm>
</cluster>
ccs_tool update /etc/cluster/cluster.conf
cman_tool version -r version
L'interfaccia per la gestione del cluster consente di
controllare l'attivita' dei sistemi e dei servizi e di
effettuare switch, stop e start dei servizi:
L'interfaccia per la configurazione del cluster consente di
modificare le caratteristiche dei servizi.
Le configurazioni cosi' aggiornate vengono riportate sul
file /etc/cluster/cluster.conf ed allineate tra
tutti i membri del cluster:
S21cman
S20ccsd
S23fenced
S99rgmanager
Data: 31 Settembre 2009
Versione: 1.0.4
Autore: mail@meo.bogliolo.name