HP ServiceGuard (SG) e' il prodotto di clustering realizzato da HP.
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, questi possono migrare su un nuovo server,
nel caso vi sia un fault.
La configurazione in cluster di applicazioni e risorse importanti
per un'azienda quindi consente permette di garantire un'elevata disponibilita'
dei servizi.
L'affidabilita' di ServiceGuard e' molto elevata ed e' il SW di
clustering piu' diffuso sui sistemi HP-UX.
Un cluster ServiceGuard e' composto da piu' node che
sono i sistemi su cui girano i
package o servizi.
Il cluster controlla il corretto operare dei nodi e dei package e,
in caso di errore, si occupa dello switch dei servizi su un nodo attivo.
Lo stato di un nodo o di un package puo' essere:
L'attivazione dei package sui nodi viene effettuata mediante semplici
comandi (eg. cmrunpkg, cmhaltpkg, ...)
Nel caso di guasto sulla rete si puo' verificare la situazione di
split brain in cui i nodi del cluster cercano di attivare
gli stessi servizi ritenendo erroneamente che si fosse verificata
la caduta di un server.
Per evitare questo tipo di problema in SG e' possibile definire
un sistema come quorum server. In questo caso il sistema non
puo' ospitare package ma viene utilizzato per il solo controllo delle
attivita' del cluster e dei nodi in esso attivi.
Per controllare il corretto
funzionamento di SG si utilizza il seguente comando:
La situazione riportata indica che il cluster
e' attivo, e' costituito da sue sistemi entrambe attivi
che stanno ospitanto tre servizi anch'essi attivi!
Per disporre di maggiori informazioni e' possibile utilizzare il comando
con l'opzione -v.
I comandi seguenti effettuano il
fermo del primo servizio, lo switch del secondo, l'abilitazione
allo switch dello stesso (l'halt disabilita lo switch) e controllano
la nuova situazione:
La situazione riportata indica che il cluster
e' attivo e che sul nodo saturno sono correttamente in
funzione due servizi.
Ulteriori comandi sono:
cmhaltnode
cmrunnode
cmhaltcl
cmruncl
cmmodpkg
...
L'attivazione di SG avviene generalmente al boot del sistema.
La configurazione di SG e' piuttosto semplice.
Basta fare cut&paste con le configurazioni di esempio gia' presenti!
Il file di configurazione del cluster e' generalmente
/etc/cmcluster/cluster.ascii e viene applicato sui nodi del cluster
con il comando cmapplyconf.
Con cmgetconf invece si raccoglie la configurazione presente
in binario sul cluster ottenendo un file ascii.
Per ogni servizio si crea una directory
/etc/cmcluster/PKGNAME che conterra' i relativi file di
configurazione.
Sempre con i comandi cmgetconf cmapplyconf viene
variata la configurazione dei parametri relativi al
servizio.
Il file di configurazione del package e' generalmente:
/etc/cmcluster/PKGNAME/pkgname.ascii.
Lo script di gestione del package che
contiene i comandi unix per l'attivazione dei servizi e'
invece
/etc/cmcluster/PKGNAME/control.sh.
E' possibile utilizzare la ServiceGuard OPS Edition.
Con tale versione viene utilizzato il concetto di group
cui i nodi appartengono.
Dalla versione A.11.12 sono supportati i System Multinode Packages.
E nel seguito... esempi dettagliati di file di configurazione.
La configurazione del cluster si effettua scrivendo opportuni
shell script che contengono la definizione del cluster
e di tutti i relativi servizi.
In realta' gli script sono gia' presenti e vanno semplicemente
modificati per raccogliere tutte le definizioni di servizi che
si vogliono ospitare.
# cmviewcl
CLUSTER STATUS
solar up
NODE STATUS STATE
giove up running
PACKAGE STATUS STATE AUTO_RUN NODE
moon01 up running enabled giove
moon02 up running enabled giove
NODE STATUS STATE
saturno up running
PACKAGE STATUS STATE AUTO_RUN NODE
moon03 up running enabled saturno
# cmhaltpkg moon01
# cmhaltpkg moon02
# cmrunpkg -n saturno moon02
# cmmodpkg -e moon02
# cmviewcl
CLUSTER STATUS
solar up
NODE STATUS STATE
giove up running
PACKAGE STATUS STATE AUTO_RUN NODE
moon01 down down enabled giove
NODE STATUS STATE
saturno up running
PACKAGE STATUS STATE AUTO_RUN NODE
moon03 up running enabled saturno
moon02 up running enabled saturno
A parte le battute la configurazione e' abbastanza semplice
poiche' si tratta di editare alcuni
file che hanno la sintassi di shell script.
Un esempio...
Un esempio...
Un esempio...
# ********* HIGH AVAILABILITY CLUSTER CONFIGURATION FILE ***************
CLUSTER_NAME solar
# Cluster Lock Parameters
# Lock Disk Parameters.
# Quorum Server Parameters.
FIRST_CLUSTER_LOCK_VG /dev/vgedp
# Definition of nodes in the cluster.
NODE_NAME giove
NETWORK_INTERFACE lan0
HEARTBEAT_IP 10.1.1.18
NETWORK_INTERFACE lan1
HEARTBEAT_IP 10.2.232.18
NETWORK_INTERFACE lan5
NETWORK_INTERFACE lan2
STATIONARY_IP 192.168.174.113
FIRST_CLUSTER_LOCK_PV /dev/dsk/c3t1d7
# List of serial device file names
NODE_NAME saturno
NETWORK_INTERFACE lan0
HEARTBEAT_IP 10.1.1.19
NETWORK_INTERFACE lan1
HEARTBEAT_IP 10.2.232.19
NETWORK_INTERFACE lan3
NETWORK_INTERFACE lan2
STATIONARY_IP 192.168.174.114
FIRST_CLUSTER_LOCK_PV /dev/dsk/c5t1d7
# List of serial device file names
# Cluster Timing Parameters (microseconds).
HEARTBEAT_INTERVAL 1000000
NODE_TIMEOUT 5000000
# Configuration/Reconfiguration Timing Parameters (microseconds).
AUTO_START_TIMEOUT 600000000
NETWORK_POLLING_INTERVAL 2000000
# Package Configuration Parameters.
MAX_CONFIGURED_PACKAGES 5
# List of cluster aware LVM Volume Groups.
VOLUME_GROUP /dev/vgedp
VOLUME_GROUP /dev/vgnfs
VOLUME_GROUP /dev/vgpite
# ****** HIGH AVAILABILITY PACKAGE CONFIGURATION FILE *******
PACKAGE_NAME pkgpite
NODE_NAME giove
NODE_NAME saturno
RUN_SCRIPT /etc/cmcluster/PKGPITE/control.sh
RUN_SCRIPT_TIMEOUT NO_TIMEOUT
HALT_SCRIPT /etc/cmcluster/PKGPITE/control.sh
HALT_SCRIPT_TIMEOUT NO_TIMEOUT
# SERVICE_NAME
# SERVICE_FAIL_FAST_ENABLED NO
# SERVICE_HALT_TIMEOUT 300
SUBNET 10.2.232.0
#RESOURCE_NAME
PKG_SWITCHING_ENABLED YES
NET_SWITCHING_ENABLED YES
NODE_FAIL_FAST_ENABLED NO
# * HIGH AVAILABILITY PACKAGE CONTROL SCRIPT *
# Custom VARIABLES (PATH, Oracle, ...)
ORACLE_HOME=...
PATH=/sbin:/usr/bin:/usr/sbin:/etc:/bin:/etc/cmcluster:$ORACLE_HOME/bin
export ORACLE_HOME ORACLE_SID
# VOLUME GROUP ACTIVATION:
VGCHANGE="vgchange -a e -q n" # Default
# VOLUME GROUPS
VG[0]=vgpite
# FILESYSTEMS
LV[0]="/dev/vgpite/lvol1"; FS[0]="/u01/app/oracle"
LV[1]="/dev/vgpite/lvol2"; FS[1]="/u01/oradata/PITE2000"
LV[2]="/dev/vgpite/lvol3"; FS[2]="/FREE_PITE"
# IP ADDRESSES
IP[0]=10.2.232.22
SUBNET[0]=10.2.232.0
# SERVICE NAMES AND COMMANDS.
# DTC manager information for each DTC.
# START OF CUSTOMER DEFINED FUNCTIONS
function customer_defined_run_cmds
{
/opt/adm/soe/bin/startpite.sh
test_return 51
}
function customer_defined_halt_cmds
{
/opt/adm/soe/bin/stoppite.sh
test_return 52
}
# END OF CUSTOMER DEFINED FUNCTIONS
# START OF RUN FUNTIONS
function activate_volume_group
{
}
function check_and_mount
{
function add_ip_address
{
}
function start_services
{
}
function halt_services
{
}
giove:/# cmviewcl -v
CLUSTER STATUS
solar up
NODE STATUS STATE
giove up running
Network_Parameters:
INTERFACE STATUS PATH NAME
PRIMARY up 2/0/0/1/0 lan0
PRIMARY up 2/0/3/0/0/4/ lan1
PRIMARY up 2/0/3/0/0/5/ lan2
STANDBY up 2/0/8/0/0/4/ lan5
PACKAGE STATUS STATE AUTO_RUN NODE
pkgedp up running enabled giove
Policy_Parameters:
POLICY_NAME CONFIGURED_VALUE
Failover configured_node
Failback manual
Script_Parameters:
ITEM STATUS MAX_RESTARTS RESTARTS NAME
Subnet up 10.2.232.0
Node_Switching_Parameters:
NODE_TYPE STATUS SWITCHING NAME
Primary up enabled giove (current)
Alternate up enabled saturno
PACKAGE STATUS STATE AUTO_RUN NODE
pkgnfs up running enabled giove
Policy_Parameters:
POLICY_NAME CONFIGURED_VALUE
Failover configured_node
Failback manual
Script_Parameters:
ITEM STATUS MAX_RESTARTS RESTARTS NAME
Service up 0 0 nfs.monitor
Subnet up 10.2.232.0
Node_Switching_Parameters:
NODE_TYPE STATUS SWITCHING NAME
Primary up enabled giove (current)
Alternate up enabled saturno
PACKAGE STATUS STATE AUTO_RUN NODE
pkgpite up running enabled giove
Policy_Parameters:
POLICY_NAME CONFIGURED_VALUE
Failover configured_node
Failback manual
Script_Parameters:
ITEM STATUS MAX_RESTARTS RESTARTS NAME
Subnet up 10.2.232.0
Node_Switching_Parameters:
NODE_TYPE STATUS SWITCHING NAME
Primary up enabled giove (current)
Alternate up enabled saturno
NODE STATUS STATE
saturno up running
Network_Parameters:
INTERFACE STATUS PATH NAME
PRIMARY up 3/0/0/1/0 lan0
PRIMARY up 3/0/12/0/0/6 lan1
STANDBY up 3/0/14/0/0/6 lan3
PRIMARY up 3/0/12/0/0/7 lan2
Data: 6 Novembre 2003
Versione: 1.0.2
Autore: mail@meo.bogliolo.name