Red Hat Cluster Suite

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.

Introduzione

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.
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, ...

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.

Esempi di utilizzo

Per controllare il corretto funzionamento del cluster si utilizza il comando:

# 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         

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.
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.

I comandi seguenti effettuano il fermo del primo servizio, lo switch del secondo e controllano la nuova situazione:

# 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         

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.

Configurazione

La configurazione viene mantenuta sul file in formato XML /etc/cluster/cluster.conf. Ecco un estratto di esempio:

<?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>

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:


ccs_tool update /etc/cluster/cluster.conf
cman_tool version -r version

Interfaccia grafica

RHCS dispone di un'interfaccia grafica sia per la configurazione che per la gestione del cluster. Entrambe le interfacce vengono richiamate dalla console.
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:
NB Immagini di repertorio!

etc

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:

S21cman
S20ccsd
S23fenced
S99rgmanager

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.


Testo: Red Hat Cluster Suite
Data: 31 Settembre 2009
Versione: 1.0.4
Autore: mail@meo.bogliolo.name