HP ServiceGuard

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.

 

Introduzione

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

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.

 

Controllo funzionamento di SG

Per controllare il corretto funzionamento di SG si utilizza il seguente comando:

# 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

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.

 

Esempi di utilizzo

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:

# 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

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.

 

Configurazione

La configurazione di SG e' piuttosto semplice. Basta fare cut&paste con le configurazioni di esempio gia' presenti!
A parte le battute la configurazione e' abbastanza semplice poiche' si tratta di editare alcuni file che hanno la sintassi di shell script.

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

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

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

 

Varie ed eventuali

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.

Configurazione Cluster
# ********* 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

Configurazione Package
# ****** 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

Script gestione Package
# *        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
{
}
Stato di dettaglio del cluster
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


Testo: Amministrazione di HP ServiceGuard su Unix
Data: 6 Novembre 2003
Versione: 1.0.2
Autore: mail@meo.bogliolo.name