REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho...

65
CentOS 6 Cluster HA active/passive REALIZZARE UN SERVER CLUSTER HA FAILOVER CON CENTOS 6,5 1

Transcript of REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho...

Page 1: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

REALIZZARE UN SERVER CLUSTER HA FAILOVER CON CENTOS 6,5

1

Page 2: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

REALIZZARE UN SERVER CLUSTER HA FAILOVER CON CENTOS 6,5

2

Page 3: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

3

Page 4: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

Indice

Prefazione...................................................................................pag. 5Installazione e configurazione di CentOS...................................pag. 6Configurazione del Server........................................................pag. 13Installare il software per il cluster..............................................pag. 19Cos'è Pacemaker......................................................................pag. 19Architettura di Pacemaker.........................................................pag. 20Installazione di Pacemaker e Corosync....................................pag. 23Abbreviare i nomi dei nodi........................................................pag. 25Configurare Corosync...............................................................pag. 26Distribuire la configurazione.....................................................pag. 27Verifica dell'installzione del cluster...........................................pag. 27Verifica della configurazine di Corosync...................................pag. 27Verifica della configurazione di Pacemaker..............................pag. 29Pacemaker tools........................................................................pag. 30Creare un Cluster Active/Passive..............................................pag. 33Esplorare la configurazione esistente.......................................pag. 33Aggiungere una risorsa.............................................................pag. 35Effettuare un failover.................................................................pag. 36Quorum e cluster a due nodi.....................................................pag. 37Evitare che le risorse si muovono dopo il recovery..................pag. 39Apache – aggiungere ulteriori servizi.......................................pag. 40Installazione..............................................................................pag. 40Abilitare lo status URL di Apache..............................................pag. 41Assicurarsi che le risorse funzionino sullo stesso hosts..........pag. 42Specializzare una location predefinita......................................pag. 44Storage replicato con DRBD.....................................................pag. 47Installare DRBD.........................................................................pag. 47Configurare DRBD....................................................................pag. 48Iniziare a caricare BRDB...........................................................pag. 49Popolare DRDB con i dati.........................................................pag. 51Configurare il Cluster per DRBD...............................................pag. 52Testare la migrazione................................................................pag. 55Interfaccia web per gestire il cluster.........................................pag. 56Installare luci e ricci...................................................................pag. 57Come aggiungere un nodo al cluster........................................pag. 60Esempi di configurazione a due tre nodi...................................pag. 63

4

Page 5: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

Prefazione

Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare erealizzare un sistema di cluster HA (hight affidability).Quando si parla di Cluster High Availability, o cluster in alta affidabilità, s’intendeun’infrastruttura hardware composta da un insieme di nodi (i singoli server che formanoil cluster) e configurata in modo tale che ad operare sia solo uno di questi nodi, mentregli altri rimangono pronti ad essere attivati solo in caso di failover del primo.

Per garantire ciò, tutti i nodi del Cluster High Availability sono completamente ridondatie tenuti sempre in contatto tra loro mediante specifici segnali, cosicché appena uno diessi smette di funzionare correttamente viene messo da parte ed istantaneamentesostituito da un secondo.

Il monitoraggio dell’intera struttura e lo spostamento delle applicazioni dalle macchinedanneggiate a quelle attive vengono gestiti da software specifici, studiati per risolverequalsiasi situazione di failover.

Questo fa si che tutte le applicazioni e le macchine virtuali ospitate nel cluster possanocontinuare a funzionare senza interruzioni anche in caso di guasto, manutenzione oaggiornamento del sistema.

In questo modo, un Cluster HA riesce a garantire continuità e trasparenza dei serviziforniti, oltre ad una totale sicurezza dei dati ospitati.

Il cluster che qui tratterò sono formati da solo due nodi uno master e un secondo chefarà la parte di slave. Il sistema usato è un Linux CentOS 6.5 con Architettura a 64 bit ledue macchine devono essere pressoché identiche . Le macchine avranno i seguentinomi e IP , la macchina master la chiameremo node01, con IP 172.16.200.69, laseconda macchina la chiamiamo node02 con IP 172.16.200.71 e l'IP del cluster avrà l'IP172.16.200.70.

Inizieremo prima con l'installazione e la configurazione dei due nodi, per poi proseguirecon l'installazione dei software atti alla realizzazione del cluster, procedendo in seguitoall'installazione dei servizi web e al test di failover. Infine installeremo un interfaccia webper gestire il cluster.

5

Page 6: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

Installazione e configurazione di CentOS 6.5

Iniziamo il nostro lungo lavoro scaricando l'immagine per installare CentOS, per nonaspettare troppo di solito scarico la iso della versione netinstall da quihttp://mi.mirror.garr.it/mirrors/CentOS/6.5/isos/x86_64/, masterizziamo l'immagine su uncd e iniziamo l'installazione seguendo questi passaggi:Prepariamo il nostro server, configurando se lo ritenessimo necessario unaconfigurazione raid 5 o raid 10 dei nostri dischi, in questa guida non starò a spiegarecome mettere in raid i dischi di un server, questo non è lo scopo della guida e poi ognicasa, Dell, IBM, HP ecc.. ha le sue interfacce per eseguire questo. Prendiamo comepreposto che abbiate già configurato il vostro raid, ora non ci resta che impostare il bootdel cd o DVD, come da figura qui sotto,

all'avvio di netinstall, ci troveremo nella schermata di avvio, selezioniamo la primaopzione in alto premiamo invio, come da figura qui sotto,

Avviata l'installazione, l'installatore anaconda ci chiederà se volgiamo controllarel'integrità del nostro cd\DVD oppure se vogliamo saltare questo passaggio, di solito mifido delle mie masterizzazioni fatte con software interamente opensource e procedoselezionando con la tastiera, la voce skip come da figura qui sotto.

Dopo aver premuto il pulsante skip, ci troviamo nella videata come indicata nella figuraqui sotto, dove ci viene richiesto di selezionare la sorgente d'installazione di CentOS,

6

Page 7: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

selezioniamo con la tastiera la voce url.

Se il nostro server possiede più di un interfaccia di rete, anaconda ce lo fa notare e cichiede di selezionare quale interfaccia vogliamo utilizzare per l'installazione del sistema.

Selezionata l'interfaccia dobbiamo configurarla, di solito io lascio gestire tutto dal DHCP,e configuro poi successivamente la scheda, ma se abbiamo già chiaro in mente quale IPdare alla nostra macchina possiamo inserirlo spostando l'opzione da DHCP a manual.Se all'interno della nostra rete non abbiamo ancora adottato e non ne abbiamo intenzioneIPv6, disabilitiamolo, togliendo l'asterisco sull'apposita voce.

Terminata l'ipostazione della scheda, premiamo Ok, nella videata che segue ci vienerichiesto di inserire l'url da dove eseguire il download del sistema, se si tratta di uninsstallazione a 32 bit, inseriamo questa voce:http://mirrors.kernel.org/centos/6.5/os/i386/,se invece tendiamo per un sistema a 64 bit usiamo questa:http://mirrors.kernel.org/centos/6.5/os/x86_64/.

7

Page 8: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

Se il vostro sistema e protetto con un proxy non dimenticate di settarlo dopo aver inseritol'url, premendo Ok ,si avvia il download dei file necessari al sistema per l'installazione.

Una volta terminato il download ecco la schermata che vi da il benvenutonell'installazione di CentOS.

Selezioniamo ora la lingua del sistema.

8

Page 9: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

Selezioniamo il layout della tastiera

andiamo avanti selezionando la time zone

9

Page 10: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

Andando avanti ci verrà richiesto di inserire la password di root del sistema, assicuriamocidi inserire una password forte.

Se la password non dovesse essere forte il sistema ci avvisa.

Una volta inserita la password di root, arriviamo finalmente alla partizione del disco,selezionare il disco da partizionare e eseguite il vostro partizionamento personalizzatooppure, lasciate fare al sistema automaticamente, esso partizionerà il sistema in LVM.

Una volta scelto come partizionare, il sistema vi avviserà prima di procedere, è inutilericordare di stare attenti con questa operazione.

10

Page 11: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

Cliccando su scrivi su disco, inizierà il partizionamento

Non appena il partizionamento terminerà il sistema fare un check di tutte le dipendenzenecessarie ad eseguire l'installazione.

11

Page 12: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

A termine del check si avvierà l'installazione , questa potrebbe durare dai 20 ai 60 minutidipende dalla vostra rete.

Dopo un po' l'installazione termina

siamo quasi giunti alla fine, il sistema ora installerà il bootloader; ed ecco che abbiamofinito l'installazione, qui vediamo la schermata che ci indica di rimuovere il cd/DVD e difare il reboot della macchina.

Ecco il nostro sistema dopo il riavvio.

12

Page 13: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

L'installazione del primo nodo è terminata ora non resta che installare il sistema sullaseconda macchina (nodo), ricordate che l'installazione deve essere identica comepartizionamento.

Una volta che il sistema è installato iniziamo ad eseguire un update del sistema,loghiamoci e digitiamo il comando

# yum update -y

In questo modo inizieremo a scaricare prima di eseguire il lavoro vero e prorpio tutti gliaggiornamenti possibili.

Configurazione del server

Dopo l'installazione e l'aggiornamento finale, iniziamo ha configurare il primo nodo,questa operazione poi andrà eseguita anche sul secondo. Iniziamo con l'installazione diun tools che ci permetterà di disabilitare il firewall del sistema, pertanto scriviamo quantosegue:

# yum install system-config-firewall-tui

Una volta installato eseguiamo il tool con il comando

# system-config-firewall-tui

Ecco cosa vediamo quanto il nostro tool è avviato

13

Page 14: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

togliamo l'asterisco a Enabled e confermiamo, una volta confermato ci apparirà unaseconda conferma, diamo ok anche li

Passiamo ora alla configurazione della scheda di rete del nostro nodo1 se non è statafatta durante l'installazione. L'ip che daremo a questa macchina sarà 172.16.200.70, perchi già usa Linux sa bene che in modalità testuale non esistono tools per la suaconfigurazione, neanche se digitiamo il comando setup non aparirà nulla, questo perchéabbiamo installato una CentOS veramente minimale.Di solito l'editor già presente in Linux è vi, ma non a tutti piace questo editor, iopersonalmente preferisco nano lo trovo più utile e semplice, anche se non supporta lacolorazione dei caratteri, per chi volesse utilizzare questo editor al posto di vi non devefar altro che digitare nella console quanto segue:

#yum install nano

E premere invio, bene ora passiamo alla configurazione della scheda di rete, ammettiamodi voler configurare la scheda eth0, (nessuno vi vieta di configurare la scheda eth1 oeth2), iniziamo con il digitiare:

# nano /etc/sysconfig/network-scripts/ifcfg-eth0

14

Page 15: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

All'interno del file che gestisce la rete dovremo vedere queste voci, sostituite il lorocontenuto con i vostri parametri di rete, attenzione, vi troverete la voceBOOTPROTO=dhcp sostituitelo con il vostro IP:

# nome deviceDEVICE=eth0# determina se l'ip deve essere statico o dinamicoBOOTPROTO=static# indirizzo di broadcastBROADCAST=172.16.200.255# indirizzo ipIPADDR=172.16.200.69# indirizzo netmaskNETMASK=255.255.255.0# indirizzo reteNETWORK=172.16.200.0# determina se il device eth0 deve attivarsi al boot o noONBOOT=yes# tipo di deviceTYPE=Ethernet

Salviamo le impostazione facendo prima un Ctrl O e poi un Ctrl X per uscire da nano,configuriamo ora il gateway, c'è chi preferisce configurarlo all'interno della configurazionedella rete inserendo la voce GATEWAY=IP, io preferisco inserire il gateway all'interno delfile network, in questo modo:

# nano /etc/sysconfig/network

All'interno del file vedremo quanto segue.

NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=localhost.localadminGATEWAY=172.16.200.238

Salviamo il tutto, ora non ci resta che configurare i dns per la navigazione, apriamo il fileresolv.conf

# nano /etc/resolv.conf

Impostiamo i server dns per la navigazione

search localadmin nameserver 208.68.222.222 nameserver 208.67.220.220

15

Page 16: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

Bene ora la rete è configurata, non ci resta che riavviarla, per farlo digitiamo quanto segue

# service network restart

Configurata la rete, configuriamo ora il nome host, che chiameremo node01, accediamo al file hosts.

# nano /etc/hosts

Impostiamo la configurazione in questo modo:

# Do not remove the following line, or various programs # that require network functionality will fail.

127.0.0.1 localhost.localdomain localhost 172.16.200.69 node01.mialan.lan node01

::1 localhost6.localdomain6 localhost6

Assicuriamoci che il firewall del sistema sia effettivamente disattivato, digitando ilcomando iptables -L vedremo che l'output è vuoto e senza regole, nel caso in cui questonon lo sia torniamo a digitare il comando visto prima system-config-firewall-tui

# iptables -LChain INPUT (policy ACCEPT)target prot opt source destination

Chain FORWARD (policy ACCEPT)target prot opt source destination

Chain OUTPUT (policy ACCEPT)target prot opt source destination

Una volta che ci siamo accertati che il firewall di Linux è disabilitato, disabilitiamo anchela sicurezza di SeLinux:

# nano /etc/selinux/config

Settiamo SELINUX su disabled come mostrato qui sotto

# This file controls the state of SELinux on the system.# SELINUX= can take one of these three values:# enforcing - SELinux security policy is enforced.# permissive - SELinux prints warnings instead of enforcing.# disabled - No SELinux policy is loaded.

16

Page 17: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

SELINUX=disabled# SELINUXTYPE= can take one of these two values:# targeted - Targeted processes are protected,# mls - Multi Level Security protection.SELINUXTYPE=targeted

Riavviamo ora la macchina con il comando shutdown -r now oppure con reboot, una voltache il sistema à nuovamente on line, dobbiamo abilitare gli update addizionali in modo dapoter scaricare anche del software, per poterlo fare prima abbiamo bisogno di importarela GPG keys.

# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*

Abilitiamo poi i repository EPEL e RPMforge. Questo ci permetterà di scaricare software altrimenti non disponibile solo con il repository ufficiali

# rpm --importhttp://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt

# cd /tmp# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

# rpm -ivh rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

# yum install yum-priorities

# yum update

Installiamo poi tutti i componenti per developer che ci servono, questo ci permetterà di compilare software derivante da sorgenti.

# yum groupinstall 'Development Tools'

Installiamo ora un utility fondamentale che ci permetterà il controllo del server da una postazione remota e in tutta sicurezza, installiamo ssh.

# yum install openssh

Bene abbiamo quasi terminato la configurazione del nodo1, ricordiamo di fare altrettanto

17

Page 18: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

anche sul nodo2. Per terminare la configurazione voglio mostrare come creare un utentesenza privilegi amministrativi con la quale loggarsi questo utente che chiameremo local,ci permetterà di navigare all'interno del sistema senza rischiare danni, ma primadobbiamo fare in modo che i due cluster abbiano la stessa data e ora senza che noi cimettiamo mano, perciò installiamo e sincronizziamo prima il servizio NTP.

Per installare il servizio digitiamo,

# yum install ntp

accediamo ora alla configurazione del demone di ntp

# nano /etc/ntp.conf

Rimuoviamo il simbolo # da queste voci e se non esistono aggiungiamoli noi:

# --- OUR TIMESERVERS -----server 0.pool.ntp.orgserver 1.pool.ntp.orgserver 2.pool.ntp.org

Una volta aggiunti i server non resta che avviare il servizio e configurarlo perché partaad ogni riavvio del sistema.

# service ntpd start# chkconfig ntpd on

Il pacchetto ntp comprende anche alcune utilità per interrogare manualmente i timeserver. Per verificare che tutto funzioni correttamente possiamo usare ntpq così

# ntpq -p

L'output dovrebbe essere qualcosa simile a questo

remote refid st t when poll reach delay offset jitter==============================================================================*ntp1.inrim.it .IEN. 1 u 58 256 377 0.226 0.652 0.032+ntp2.inrim.it .IEN. 1 u 71 256 377 0.217 0.638 0.037

Se e cosi allora il servizio è configurato correttamente.

Vediamo ora come creare l'utente local digitare quanto scritto qui sotto:

# useradd local

18

Page 19: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

Ora non resta che settare una password per il nuovo utente

# passwd local Il sistema vi chiederà di inserire la password per questo utente, e successivamente diripeterla per sicurezza, al termine se riavviate troverete la seguente dicitura a schermo:

node01 login:

Vi basterà inserire il vostro utente local e la password che gli avete attribuito, quandoavete bisogno di passare all'utente amministrativo root, vi basterà digitare la parola su-seguita dalla password.

Ora possiamo abbandonare il nostro server fisicamente e lavorare comodamente dallanostra scrivania utilizzando ssh, la console remota criptata, per accedervi dovreteutilizzare un client ssh, se usate un sistema Windows allora dovrete scaricare putty daquesto indirizzo (http://www.putty.org), se invece usate una linux allora vi basta usare ilterminale.

Per collegarsi con putty verso il node01 vi basterà eseguirlo e alla finestra che vi si apresotto la casellina Host Name (or IP address) inserite l'IP o il nome del nodo alla qualevolete collegarvi e poi premete open

si aprirà cosi una finestra come questa qui sotto, logatevi usando o le credenziali di localoppure quelle di root.

Per chi invece usa Linux penso che non ci sia bisogno neanche di dirlo, ma visto chequesto manuale è per tutti ecco che lo inserisco, se volete loggarvi come local metteteprima l'utente local, altrimenti l'utente root

$ local@node01

Se avete inserito i vostri nodi all'interno del vostro DNS locale utilizzate il nome altrimenti dopo la @ usate l'IP.

Installare il software per il cluster

Come software di clustering, utilizzeremo Pacemaker e Cronosync, prima di iniziarel'installazione, vediamo in breve cosa sono e a cosa servono queste due utility.

Che cos'è Pacemaker

Pacemaker è un gestore di risorse cluster. Raggiunge la massima disponibilità per iservizi del cluster di rilevamento e recupero da errori dei nodi a livello di risorse facendouso di funzionalità di messaggistica e di adesione forniti dal l'infrastruttura del clusterpreferita (sia Corosync o Heartbeat).

Le caratteristiche principali di Pacemaker sono:

19

Page 20: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

• Rilevazione e ripristino di malfunzionamenti di nodi e di servizi• Storage agnostico, non richiede uno storage condiviso• Resurce agnostico, tutto quello che può essere scriptato, può essere clasterizzato• Supporta STONITH per garantire l'integrità dei dati• Supporto di cluster grandi e piccoli• Supporta sia aggregati di quorate e di risorse• Supporta praticamente qualsiasi configurazione di ridondanza• Configurazione replicata automaticamente che può essere aggiornata da qualsiasi

nodo• Capacità di specificare ordine, collocazione e anti-collocazione per i servizi lato

cluster• Supporto per i tipi di servizi avanzati• Cloni: per servizi che necessitano di essere attivi su nodi multipli• Muliti-state: per servizi con modi multipli (ad esempio master/slave,

primary/secondary/• cluster shell unificata e scriptabile

Architettura di Pacemaker

A livello più elevato il cluster è composto da tre componenti

• Componenti aware non cluster (illustrati in verde). Questi pezzi sono le risorse stesse, script da avviare, arrestare e monitorare, anche un demone locale chemaschera le differenze tra i diversi standard che questi script implementano.

• La gestione delle risorse pacemaker fornisce un cervello (illustrato in blu) cheelabora e reagisce sugli eventi riguardanti il cluster. Questi eventi includono nodiche entrano o escono dal gruppo; risorse, eventi causati da guasti, manutenzione,le attività programmate ed altre azioni amministrative. Pacemaker calcola lo statoideale del cluster e traccia un percorso per raggiungerlo dopo uno di questi eventi.Questo può includere lo spostamento di risorse, fermando nodi e costringendoli inlinea con interruttori di potenza remoti.

• Infrastrutture a basso livello, Corosync fornisce una messaggistica affidabile,l'adesione e le informazioni di quorum sul cluster (illustrata in rosso).

Figura 1 concetto dello stack

20

Page 21: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

Quando combinato con Corosync, Pacemaker supporta anche popolari filesystem clusteropen source.

Grazie alla recente standarizzazione del filesystem dei cluster all'interno della comunità,fanno uso di un comune gestore distribuito che fa uso di Corosync per le sue capacità dimessaggistica e Pacemaker per la sua capacità di adesione (che i nodi sono su / giù) suiservizi.

Figura 2 lo stack Pacemaker

Componenti interni

Pacemaker stesso è composto da quattro componenti chiave (illustrati sotto nello stessoschema di colori del diagramma precedente)

• CIB (acronimo di Cluster Information Base)• CRMd (acronimo di Cluster Resource Management daemon)• Pengine (acronimo di Policy Engine)• STONITHd

Figura 3 Componenti interni

21

Page 22: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

Il CIB utilizza XML per rappresentare sia la configurazione del cluster che lo stato attualedi tutte le risorse del cluster. Il contenuto del CIB sono conservati automaticamente esincronizzati su tutto il cluster e sono utilizzati dal PEngine per calcolare lo stato idealedel cluster e come dovrebbe essere raggiunto.

Questo elenco di istruzioni viene poi alimentato da DC (Designated Co-ordinator).Pacemaker centralizza tutto il grappolo del processo decisionale eleggendo una delleistanze CRMD ad agire come master. Qualora gli eletti del processo CRMD, o il nodo siasu, ma non funzionante.

La DC esegue le istruzioni del PEngine nell'ordine richiesto passandoli sia alla LRMd (Local daemon Resource Management) o CRMD coetanei su altri nodi attraversol'infrastruttura messaggistica del cluster (che a sua volta li trasmette al loro processoLRMd).

Gli altri nodi riferiscono i risultati delle loro operazioni al DC. Attraverso l'analisi deirisultati aspettati e di quelli attuali, i nodi eseguiranno qualsiasi azione necessaria perattendere il completamento della precedente oppure interromperanno il processo,richiedendo al PEngine di calcolare nuovamente lo stato ideale del cluster basandosi suirisultati inaspettati.

In alcuni casi, potrebbe essere necessario spegnere i nodi per preservare dati condivisi ocompletare il ripristino di una risorsa. Per questo in Pacemaker esiste STONITH.STONITH è un acronimo per Shoot-The-Other-Node-In-The-Head e viene implementatotipicamente con un switch di potenza remoto. In Pacemaker i dispositivi STONITH sonomodellati come risorse (e configurati all'interno del CIB) per facilitare il monitoraggio delleanomalie. STONITHd si prende cura di capire la topologia STONITH così che i suoi clientdebbano unicamente richiedere unicamente la morte di un nodo ed esso si preoccupi delresto.

Tipologia dei cluster pacemaker

Pacemaker non fa alcuna ipotesi in merito all'ambiente operativo, questo consente disupportare praticamente qualsiasi configurazione ridondata come Active/Active,Active/Passive, N+1, N+M, Nto-1 e N-to-N.

In questo libro ci concentreremo sulla configurazione di un server web Apache altamentedisponibile con un Active / Cluster passivo utilizzando DRBD e Ext4 per memorizzare idati.

22

Page 23: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

Figura 4 Ridondanza Active/Passive

Figura 5 Ridondanza N a N

Dopo un po di teoria sul cluster che andremo a realizzare, finalmente siamo giunti almomento dell'installazione del software, ma permettetemi ancora una premessa prima diiniziare.

Alcune considerazioni sulla sicurezza

Per semplificare questa guida e focalizzare gli aspetti direttamente correlati al clustering,precedentemente vi ho fatto disabilitare il firewall della macchina e SELinux. Entrambequeste azioni creano limiti nella sicurezza e non dovrebbero essere applicate a macchineesposte al mondo.

Installazione di Pacemaker e Corosync

Bene cominciamo il nostro lavoro d'installazione, al terminale saliamo come utenteamministrativo diventando root, questo perché tutto il nostro lavoro verrà effettuato con imassimi privilegi, una volta che abbiamo l'accesso amministrativo digitiamo quantosegue:

# yum install -y pacemaker corosync

23

Page 24: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

Ripetiamo l'installazione anche sul secondo nodo, al termine, verifichiamo lacomunicazione tra i due nodi:

# ping -c 3 172.16.200.71PING 172.16.200.71 (172.16.200.71) 56(84) bytes of data.64 bytes from 172.16.200.71: icmp_seq=1 ttl=64 time=0.343 ms64 bytes from 172.16.200.71: icmp_seq=2 ttl=64 time=0.402 ms64 bytes from 172.16.200.71: icmp_seq=3 ttl=64 time=0.558 ms

--- 172.16.200.71 ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 0.343/0.434/0.558/0.092 ms

Ora dobbiamo fare in modo che possiamo comunicare con le macchine con il loro nome.Se si dispone di un DNS server, aggiungere come proposto prima le voci per le duemacchine. In caso contrario, sarà necessario aggiungere le macchine a /etc/hosts. Qui diseguito le voci per i miei nodi cluster:

# grep pcmk /etc/hosts172.16.200.69 node01.adam.lan node01172.16.200.71 node02.adam.lan node02

Abbiamo visto precedentemente come personalizzare i nomi di ogni nodo, andando amodificare il file hosts, ora vediamo come fare per simulare un server dns in modo che idue nodi si contattino utilizzando solo il nome (questo ricordo che va utilizzato solo senon disponete di un servizio DNS, ma ne dubito).Accediamo al nostro file hosts:

# nano /etc/hosts

Questo è il nostro file hosts

# Do not remove the following line, or various programs # that require network functionality will fail.

127.0.0.1 localhost.localdomain localhost 172.16.200.69 node01.mialan.lan node01

::1 localhost6.localdomain6 localhost6

Modifichiamolo cosi:

# Do not remove the following line, or various programs # that require network functionality will fail.

127.0.0.1 localhost.localdomain localhost 172.16.200.69 node01.mialan.lan node01

24

Page 25: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

::1 localhost6.localdomain6 localhost6

172.16.200.71 node02.adam.lan node02

Salviamo, usciamo e facciamo la stessa cosa sul nodo 2, infatti sul file hosts del nodo 1 cideve essere l'IP e il nome abbreviato del nodo 2 e viceversa per il nodo 2, vediamo ora setutto funziona rieseguendo il ping ma utilizzando il nome del nodo questa volta:

# ping -c 3 node02PING node02.adam.lan (172.16.200.71) 56(84) bytes of data.64 bytes from node02.adam.lan (172.16.200.71): icmp_seq=1 ttl=64 time=0.164 ms64 bytes from node02.adam.lan (172.16.200.71): icmp_seq=2 ttl=64 time=0.475 ms64 bytes from node02.adam.lan (172.16.200.71): icmp_seq=3 ttl=64 time=0.186 ms--- node02.adam.lan ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 2001ms rtt min/avg/max/mdev = 0.164/0.275/0.475/0.141 ms

Facciamolo anche dal nodo 2 verso il nodo 1, se tutto è ok allora possiamo andare avanti.

Abbreviamo il nome dei nodi

Durante l'installazione, abbiamo impostato nel nome della macchina un qualificatorecompleto di dominio (FQDN) che può essere piuttosto lungo quando appare nei registridel cluster , vediamo come il cluster individua se stesso:

# uname -nnode01.adam.lan

L'output del comando è corretto, ma non è necessario che il dominio venga incluso neidettagli essenziali dell'host. Per risolvere la situazione è necessario modificare il file/etc/sysconfig/network. Ecco come dovrà apparire.

# nano /etc/sysconfig/network

NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=node01.adam.lanGATEWAY=172.16.200.238

L'unica cosa da fare sarà di rimuovere la parte relativa al dominio, che rimarrà comunqueregistrata altrove. Per verificare l'efficacia dei cambiamenti apportati il contenuto del filedovrà essere simile a quanto riportato.

25

Page 26: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

cat /etc/sysconfig/network

NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=node01GATEWAY=172.16.200.238

Ma non è ancora finita. La macchina non sarà allineata con i nomi abbreviati finché nonverrà riavviata, ma è possibile forzare l'aggiornamento:

# source /etc/sysconfig/network# hostname $HOSTNAME

E' possibile quindi verificare che la macchina utilizzi il nome corretto:

# uname node01# node01

Le stesse operazioni andranno ripetute su node02

Configurare Corosync

Scegliere un numero di porta e un indirizzo multi-cast. Assicurarsi che i valori scelti noncontrastino con qualsiasi cluster esistente. Per consigli sulla scelta di un indirizzomulti-cast, vedere http://www.29west.com/docs/THPM/multicast-address-assignment.html.Per questo documento, ho scelto la porta 4000 e ho utilizzato 226.94.1.1 come indirizzomulti-cast

Le istruzioni che seguono si applicano solo per una macchina con una sola scheda di rete. Se si dispone di più schede, è necessario modificare la configurazione manualmente.

# export ais_port=4000# export ais_mcast=226.94.1.1

A questo punto è possibile determinare automaticamente l'indirizzo degli host. Nonutilizzando l'indirizzo completo la configurazione è copiabile sugli altri nodi.

# export ais_addr=`ip addr | grep "inet " | tail -n 1 | awk '{print $4}' | seds/255/0/`

Visualizzazione e verifica delle opzioni di configurazione

# env | grep ais

ais_port=4000ais_addr=172.16.200.0

26

Page 27: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

Una volta soddisfatti dei valori scelti si potrà aggiornare la configurazione di Corosync.

# cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf# sed -i.bak "s/.*mcastaddr:.*/mcastaddr:\ $ais_mcast/g" /etc/corosync/corosync.conf# sed -i.bak "s/.*mcastport:.*/mcastport:\ $ais_port/g" /etc/corosync/corosync.conf# sed -i.bak "s/.*bindnetaddr:.*/bindnetaddr:\ $ais_addr/g" /etc/corosync/corosync.conf

Infine dobbiamo dire a Corosync di caricare il plugin di Pacemaker

# cat <<-END >>/etc/corosync/service.d/node

service {# Load the Pacemaker Cluster Resource Managername: pacemakerver: 1}

END

Distribuire la configurazione

Ora è necessario copiare le modifiche effettuate sinora all'altro nodo:

# for f in /etc/corosync/corosync.conf /etc/corosync/service.d/node /etc/hosts;do scp $fnode02:$f ; done

corosync.conf 100% 1528 1.5KB/s 00:00hosts 100% 281 0.3KB/s 00:00

Verifica dell'installazione del cluster

Verifica dell'installazione di CorosyncAvvio di Corosync sul primo nodo

# /etc/init.d/corosync startStarting Corosync Cluster Engine (corosync): [ OK ]

Controllo del corretto avvio del cluster e che è stata formata la membership iniziale

27

Page 28: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

# grep -e "corosync.*network interface" -e "Corosync Cluster Engine" -e"Successfully read main configuration file" /var/log/messages

Aug 27 09:05:34 node01 corosync[1540]: [MAIN ] Corosync Cluster Engine ('1.1.0'): started and ready to provide service.

Aug 27 09:05:34 node01 corosync[1540]: [MAIN ] Successfully read main configuration file '/etc/corosync/corosync.conf'.

# grep TOTEM /var/log/messages Aug 27 09:05:34 node01 corosync[1540]: [TOTEM ] Initializing transport (UDP/IP).

Aug 27 09:05:34 node01 corosync[1540]: [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).

Aug 27 09:05:35 node01 corosync[1540]: [TOTEM ] The network interface [172.16.200.69] is now up.

Aug 27 09:05:35 node01 corosync[1540]: [TOTEM ] A processor joined or left the membership and a new membership was formed.

Con un nodo funzionante ora possiamo inizializzare Corosync sul secondo nodo

# ssh node02 -- /etc/init.d/corosync startStarting Corosync Cluster Engine (corosync): [ OK ]

Controllo della corretta formazione del cluster

# grep TOTEM /var/log/messages

Aug 27 09:05:34 node01 corosync[1540]: [TOTEM ] Initializing transport (UDP/IP).

Aug 27 09:05:34 node01 corosync[1540]: [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).

Aug 27 09:05:35 node01 corosync[1540]: [TOTEM ] The network interface [172.16.200.69] is now up.

Aug 27 09:05:35 node01 corosync[1540]: [TOTEM ] A processor joined or left the membership and a new membership was formed.

Aug 27 09:12:11 node01 corosync[1540]: [TOTEM ] A processor joined orleft the membership and a new membership was formed.

28

Page 29: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

Verifica dell'installazione di Pacemaker

Ora che è stato verificato come Corosync sia funzionante è quindi possibile controllare ilresto dello stack.

# grep pcmk_startup /var/log/messages

Aug 27 09:05:35 node01 corosync[1540]: [pcmk ] info: pcmk_startup: CRM: Initialized Aug 27 09:05:35 node01 corosync[1540]: [pcmk ] Logging: Initialized pcmk_startup

Aug 27 09:05:35 node01 corosync[1540]: [pcmk ] info: pcmk_startup: Maximum core file size is: 18446744073709551615

Aug 27 09:05:35 node01 corosync[1540]: [pcmk ] info: pcmk_startup: Service: 9Aug 27 09:05:35 node01 corosync[1540]: [pcmk ] info: pcmk_startup: Local hostname: node01

Avviando ora Pacemaker dovremmo notare se tutti i processi necessari si avviino

# /etc/init.d/pacemaker startStarting Pacemaker Cluster Manager: [ OK ]

E poi # grep -e pacemakerd.*get_config_opt -e pacemakerd.*start_child -e"Starting Pacemaker" /var/log/messages

Dovremmo visualizzare in output con i servizi attivi di Pacemaker, digitiamo ora anche ilseguente comando:

# ps axf

In questo modo visualizzeremo i servizi attivi sulla nostra macchina, nel caso venganovisualizzati errori, diamo questo comando per vedere sistemare gli errori eventuali.

# grep ERROR: /var/log/messages | grep -v unpack_resources

Ripetere il tutto sull'altro nodo e visualizzare lo stato del cluster

# ssh node02 -- /etc/init.d/pacemaker startStarting Pacemaker Cluster Manager: [ OK ]

# crm_mon============Last updated: Thu Aug 27 16:54:55 2009Stack: openaisCurrent DC: node01 - partition with quorumVersion: 1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f

29

Page 30: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

2 Nodes configured, 2 expected votes0 Resources configured.============Online: [ node01 node02 ]

Pacemaker Tools

Utilizzare i tool di Pacemaker

Nell'oscuro passato configurare Pacemaker richiedeva all'amministratore di leggere escrivere XML.In vero stile UNIX c'erano inoltre parecchi comandi differendi, specializzati in aspettidifferenti di interrogazione ed aggiornamento del cluster.Con Pacemaker 1.0 tutto questo è cambiato ed ora esiste una cluster shell integrata escriptabile che nasconde tutta la confusionaria impalcatura XML. Essa permette diaccodare i diversi cambiamente in una sola volta ed applicarli automaticamente.

Va dedicato del tempo a familiarizzare con le peculiarità della shell.

# crm –help

usage:crm [-D display_type]crm [-D display_type] argscrm [-D display_type] [-f file]Use crm without arguments for an interactive session.Supply one or more arguments for a "single-shot" use.Specify with -f a file which contains a script. Use '-' forstandard input or use pipe/redirection.crm displays cli format configurations using a color schemeand/or in uppercase. Pick one of "color" or "uppercase", oruse "-D color,uppercase" if you want colorful uppercase.Get plain output by "-D plain". The default may be set inuser preferences (options).

Examples:# crm -f stopapp2.cli# crm < stopapp2.cli# crm resource stop global_www# crm status

Lo strumento principale per il monitoraggio dello stato del cluster è crm_mon (disponibileanche come stato di crm). Può essere eseguito in una varietà di modalità e ha una seriedi opzioni di output. Per scoprire il set di strumenti di pacemaker, vengono invocati conl'opzione - help oppure consultare la documentazione con man. Entrambi i gruppi diuscita sono creati dallo strumento, e così sarà sempre in sincronia con l'altro e lo

30

Page 31: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

strumento stesso.

Inoltre, la versione di Pacemaker e lo stack di cluster supportati sono a disposizione come

features e opzioni di pacemaker.

# pacemakerd –features

Pacemaker 1.1.9-3.fc20.2 (Build: 781a388)Supporting v3.0.7: generated-manpages agent-manpages ncurseslibqb-logging libqb-ipc upstart systemd nagios corosync-native

# pacemakerd --help

pacemakerd - Start/Stop PacemakerUsage: pacemakerd mode [options]

Options:-?, --help This text-$, --version Version information-V, --verbose Increase debug output-S, --shutdown Instruct Pacemaker to shutdown on this machine-F, --features Display the full version and list of features Pacemaker was built withAdditional Options:-f, --foreground (Ignored) Pacemaker always runs in the foreground-p, --pid-file=value (Ignored) Daemon pid file locationReport bugs to [email protected]

# crm_mon --help

crm_mon - Provides a summary of cluster's current state.Outputs varying levels of detail in a number of different formats.Usage: crm_mon mode [options]

Options:-?, --help This text-$, --version Version information-V, --verbose Increase debug output-Q, --quiet Display only essential output

Modes:-h, --as-html=value Write cluster status to the named html file-X, --as-xml Write cluster status as xml to stdout. This will enable one-shot mode.

31

Page 32: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

-w, --web-cgi Web mode with output suitable for cgi-s, --simple-status Display the cluster status once as a simple one line output (suitable for nagios)

Display Options:-n, --group-by-node Group resources by node-r, --inactive Display inactive resources-f, --failcounts Display resource fail counts-o, --operations Display resource operation history-t, --timing-details Display resource operation history with timing details-c, --tickets Display cluster tickets-W, --watch-fencing Listen for fencing events. For use with --external-agent, --mail-toand/or --snmp-traps where supported-A, --show-node-attributes Display node attributes

Additional Options:-i, --interval=value Update frequency in seconds-1, --one-shot Display the cluster status once on the console and exit-N, --disable-ncurses Disable the use of ncurses-d, --daemonize Run in the background as a daemon-p, --pid-file=value (Advanced) Daemon pid file location-E, --external-agent=value A program to run when resource operations take place.-e, --external-recipient=value A recipient for your program (assuming you want the programto send something to someone).

Examples:Display the cluster status on the console with updates as they occur:# crm_monDisplay the cluster status on the console just once then exit:# crm_mon -1Display your cluster status, group resources by node, and include inactive resources in the list:# crm_mon --group-by-node --inactiveStart crm_mon as a background daemon and have it write the cluster status to an HTML file:# crm_mon --daemonize --as-html /path/to/docroot/filename.htmlStart crm_mon and export the current cluster status as xml to stdout, then exit.:# crm_mon --as-xmlReport bugs to [email protected]

SNMP e/o le opzioni mail non sono listate allora Pacemaker non è stato compilato persupportare queste funzionalità. Potrebbe essere dovuto ad una scelta della distribuzioneche si sta utilizzando oppure al fatto che le librerie necessarie non sono disponibili. Inquesto caso è bene contattare il fornitore dei pacchetti per avere maggiori dettagli.

32

Page 33: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

Bene ora che abbiamo installato i componenti del cluster, vediamo come creare un clusterActive/Passive.

Creare un cluster Active/Passive

Esplorare la configurazione esistente

Quando Pacemaker viene avviato automatica registra il numero ed i dettagli dei nodi nelcluster, così come lo stack è utilizzato e la versione di Pacemaker utilizzata.

Ecco come dovrebbe apparire la configurazione base.

# crm configure show

node node01node node02property $id="cib-bootstrap-options" \dc-version="1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f" \cluster-infrastructure="openais" \expected-quorum-votes="2"

Per coloro che non si fanno itimorire da XML, è possibile vedere la configurazione rawaggiungendo "xml" al comando precedente.

# crm configure show xml

<?xml version="1.0" ?><cib admin_epoch="0" crm_feature_set="3.0.1" dc-uuid="pcmk-1" epoch="13" havequorum="1" num_updates="7" validate-with="pacemaker-1.0"><configuration><crm_config><cluster_property_set id="cib-bootstrap-options"><nvpair id="cib-bootstrap-options-dc-version" name="dc-version" value="1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f"/><nvpair id="cib-bootstrap-options-cluster-infrastructure" name="clusterinfrastructure"value="openais"/><nvpair id="cib-bootstrap-options-expected-quorum-votes" name="expected-quorumvotes"value="2"/></cluster_property_set></crm_config><rsc_defaults/><op_defaults/><nodes>

33

Page 34: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

<node id="node01" type="normal" uname="node01"/><node id="node02" type="normal" uname="node02"/></nodes><resources/><constraints/></configuration></cib>

Prima di effettuare qualsiasi cambiamento è buona norma controllare la validità dellaconfigurazione.

# crm_verify -L

crm_verify[2195]: 2009/08/27_16:57:12 ERROR: unpack_resources: Resource start-up disabledsince no STONITH resources have been definedcrm_verify[2195]: 2009/08/27_16:57:12 ERROR: unpack_resources: Either configure some ordisable STONITH with the stonith-enabled optioncrm_verify[2195]: 2009/08/27_16:57:12 ERROR: unpack_resources: NOTE: Clusters with shareddata need STONITH to ensure data integrityErrors found during check: config not valid -V may provide more details

Come si può notare il tool ha trovato qualche errore.

Al fine di garantire la sicurezza dei vostri dati, Pacemaker abilita Stonith. Ma se non èstata eseguita alcuna configurazione valida per Stonith, questo può causare delleproblematiche e il cluster non può essere configurato se il problema non viene risolto. Per ovviare al problema, momentaneamente la funzionalità verrà disabilitata e configuratain seguito nella sezione Configurare Stonith. E' importante notare che l'uso di Stonith èaltamente consigliato, disabilitarlo indica al cluster di dare per scontato che i nodi fallitivengano spenti. Alcuni rivenditori potrebbero rifiutarsi di supportare cluster che hannoStonith disabilitato.

Per disabilitare Stonith è necessario impostare l'opzione stonith-enabled a false.

# crm configure property stonith-enabled=false# crm_verify -L

Ora con la nuova opzione impostata, la configurazione del cluster risulta valida e per tanto possiamo continuare la nostra configurazione.

ATTENZIONE, disabilitare Stonith è completamente inappropriato per un cluster di

34

Page 35: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

produzione. Viene usato qui per procedere senza problemi alla configurazione del cluster,di seguito nella sezione che cosa è Stonith darò più informazioni e dettagli su comeconfigurarlo, perché Stonith è importante per un cluster di produzione.

Aggiungere una risorsa

La prima cosa da fare è configurare un indirizzo IP. Indipendentemente da dove i servizicluster stanno funzionando è necessario un indirizzo per raggiungerli. Verrà scelto edaggiunto 172.16.200.70 come indirizzo virtuale, con il nome di ClusterIP e verrà indicatoal cluster di controllarlo ogni 20 secondi. L'indirizzo scelto non dovrà essere associato adun nodo fisico.

# crm configure primitive ClusterIP ocf:heartbeat:IPaddr2 paramsip=172.16.200.70 cidr_netmask=24 op monitor interval=20s

OCF:Heartbeat è un pezzo importante di Pacemaker.

Una piccola spiegazione sulla risorsa aggiunta, la voce primitive indica il nome daattribuire al cluster, il campo OCF è lo script di risorsa che è conforme allo standard, doveindica l'IP da attribuire a hearbeat, la maschera di appartenenza e l'intervallo di tempo dicontrollo verso i due nodi.

Per ottenere una lista delle classi di risorse disponibili lanciare

# crm ra classesheartbeatlsb ocf / heartbeat pacemakerstonith

Per trovare tutti i resource agent OCF disponibili con Pacemaker ed Heartbeat, lanciare questi comandi.

# crm ra list ocf pacemaker

ClusterMon Dummy Stateful SysInfo SystemHealth controldping pingd

# crm ra list ocf heartbeat

AoEtarget AudibleAlarm ClusterMon DelayDummy EvmsSCC Evmsd FilesystemICP IPaddr IPaddr2 IPsrcaddrLVM LinuxSCSI MailTo ManageRAIDManageVE Pure-FTPd Raid1 RouteSAPDatabase SAPInstance SendArp ServeRAIDSphinxSearchDaemon Squid Stateful SysInfoVIPArip VirtualDomain WAS WAS6WinPopup Xen Xinetd anything

35

Page 36: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

apache db2 drbd eDir88iSCSILogicalUnit iSCSITarget ids iscsildirectord mysql mysql-proxy nfsserveroracle oralsnr pgsql pingdportblock rsyncd scsi2reservation sfextomcat vmware

A questo punto va verificato come la risorsa IP sia stata aggiunta e visualizzato lo statodel cluster per vedere che ora è attiva.

# crm configure shownode node01

node node02primitive ClusterIP ocf:heartbeat:IPaddr2 \params ip="172.16.200.70" cidr_netmask="24" \op monitor interval="20s"property $id="cib-bootstrap-options" \dc-version="1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f" \cluster-infrastructure="openais" \expected-quorum-votes="2" \stonith-enabled="false" \

# crm_mon============Last updated: Fri Aug 28 15:23:48 2009Stack: openaisCurrent DC: node01 - partition with quorumVersion: 1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f2 Nodes configured, 2 expected votes1 Resources configured.============Online: [ node01 node02 ]ClusterIP (ocf::heartbeat:IPaddr): Started node01

Effettuare un Failover

Trattandosi di un cluster ad alta-affidabilità, è necessario testare il failover della nostra risorsa prima di proseguire.

Per prima cosa va identificato da quale nodo l'indirizzo IP è erogato

# crm resource status ClusterIPresource ClusterIP is running on: node01

Fermiamo ora Pacemaker e Corosync su questa macchina.

# ssh node01 -- /etc/init.d/pacemaker stop

36

Page 37: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

Signaling Pacemaker Cluster Manager to terminate: [ OK ]Waiting for cluster services to unload:. [ OK ]

# ssh node01 -- /etc/init.d/corosync stop

Stopping Corosync Cluster Engine (corosync): [ OK ]Waiting for services to unload: [ OK ]

ATTENZIONE, notate la procedura di spegnimento dei software che gestiscono il clusternel nodo01, prima è stato fermato Pacemaker e poi Corosync, la procedura per il riavviodovrà essere l'opposto, ovvero prima si avvia Corosync e successivamente Pacemaker.

Una volta che Corosync non sta più funzionando, è possibile verificare sull'altro nodo lostato del cluster attraverso crm_mon.

# crm_mon============Last updated: Fri Aug 28 15:27:35 2009Stack: openaisCurrent DC: node02 - partition WITHOUT quorumVersion: 1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f2 Nodes configured, 2 expected votes1 Resources configured.============

Online: [ node02 ]OFFLINE: [ node01 ]

Ci sono tre cose da evidenziare in merito all'attuale stato del cluster. La prima è che,come aspettato, node01 è ora offline. Ad ogni modo è possibile anche notare comeClusterIP non sta funzionando da nessuna parte!

Quorum e Cluster a due nodi

Il quorum, ha lo scopo all'interno del cluster di ridurre la possibilità di danneggiamento deidati, il comportamento predefinito di Pacemaker è quello di fermare tutte le risorse se ilcluster non ha quorum.

Un cluster viene definito con quorum quando più della metà dei nodi conosciuti o aspettatisono online o, attraverso la matematica, quando la seguente equazione è vera:

total_nodes < 2 * active_nodes

Quindi un cluster a due nodi ha quorum solo quando entrambi i nodi sono in esecuzione,che non è il caso per il nostro cluster. Questo normalmente dovrebbe rendere lacreazione di un cluster a due nodi inutile, tuttavia è possibile controllare come Pacemakersi comporta quando il quorum è perduto. In particolare, possiamo dire al cluster diignorare semplicemente del tutto il quorum.

37

Page 38: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

# crm configure property no-quorum-policy=ignore# crm configure show

node node01node node02primitive ClusterIP ocf:heartbeat:IPaddr2 \params ip="172.16.200.70" cidr_netmask="24" \op monitor interval="20s"property $id="cib-bootstrap-options" \dc-version="1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f" \cluster-infrastructure="openais" \expected-quorum-votes="2" \stonith-enabled="false" \no-quorum-policy="ignore"

Dopo alcuni istanti il cluster avvierà l'indirizzo IP sui nodi rimanenti. E' da notare che ilcluster non ha comunque il quorum.

# crm_mon============Last updated: Fri Aug 28 15:30:18 2009Stack: openaisCurrent DC: node02 - partition WITHOUT quorumVersion: 1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f2 Nodes configured, 2 expected votes1 Resources configured.============Online: [ node02 ]OFFLINE: [ node01 ]ClusterIP (ocf::heartbeat:IPaddr): Started node02

Viene quindi simulato il recovery del nodo attraverso il riavvio dello stack cluster sunode01 ed il controllo dello stato del cluster.

# /etc/init.d/corosync start

Starting Corosync Cluster Engine (corosync): [ OK ]

# /etc/init.d/pacemaker startStarting Pacemaker Cluster Manager: [ OK ]

# crm_mon============Last updated: Fri Aug 28 15:32:13 2009Stack: openaisCurrent DC: node02 - partition with quorumVersion: 1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f2 Nodes configured, 2 expected votes

38

Page 39: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

1 Resources configured.============Online: [ node01 node02 ]ClusterIP (ocf::heartbeat:IPaddr): Started node01

Qui appare qualcosa che potrebbe sembrare sorprendente: l'IP è tornato attivo sul nodo originale!

Evitare che le risorse si muovano dopo il recovery

In alcune circostanze è altamente consigliabile fare in modo che il cluster non muova lerisorse quando un nodo risale, questo per impedire danni alle risorse sensibili, qualidatabase complessi, che richiedono tempi piuttosto lunghi di spostamento costringendo alunghi periodi di inattività.

Per risolvere questo problema, Pacemaker utilizza il concetto di risorsa vischiosità checontrolla quanto un servizio preferisce rimanere in esecuzione dove si trova. Pensare adesempio al costo di eventuali tempi di inattività. Pacemaker predefinisce che il costo daassociare alle risolrse in movimento sia uguale a zero, questo gli farà raggiungere unplacement "ottimale" della risorsa. Possiamo specificare una viscosità diversa per ognirisorsa, ma è spesso sufficiente modificare il valore predefinito.

# crm configure rsc_defaults resource-stickiness=100# crm configure show

node node01node node02primitive ClusterIP ocf:heartbeat:IPaddr2 \params ip="172.16.200.70" cidr_netmask="24" \op monitor interval="20s"property $id="cib-bootstrap-options" \dc-version="1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f" \cluster-infrastructure="openais" \expected-quorum-votes="2" \stonith-enabled="false" \no-quorum-policy="ignore"rsc_defaults $id="rsc-options" \resource-stickiness="100"

Se ora si effettua nuovamente il test di failover si osserverà che come da pronostico ClusterIP verrà spostata su node02 quando node01 viene messo offline.

# ssh node01 -- /etc/init.d/pacemaker stopSignaling Pacemaker Cluster Manager to terminate: [ OK ]Waiting for cluster services to unload:. [ OK ]

# ssh node01 -- /etc/init.d/corosync stopStopping Corosync Cluster Engine (corosync): [ OK ]Waiting for services to unload: [ OK ]

39

Page 40: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

# ssh node02 -- crm_mon -1============Last updated: Fri Aug 28 15:39:38 2009Stack: openaisCurrent DC: node02 - partition WITHOUT quorumVersion: 1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f2 Nodes configured, 2 expected votes1 Resources configured.============Online: [ node02 ]OFFLINE: [ node01 ]ClusterIP (ocf::heartbeat:IPaddr): Started node02

Quando però node01 torna online il ClusterIP rimane su node02.

# /etc/init.d/corosync startStarting Corosync Cluster Engine (corosync): [ OK ]

# /etc/init.d/pacemaker startStarting Pacemaker Cluster Manager: [ OK ]

# crm_mon============Last updated: Fri Aug 28 15:41:23 2009Stack: openaisCurrent DC: node02 - partition with quorumVersion: 1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f2 Nodes configured, 2 expected votes1 Resources configured.============Online: [ node01 node02 ]ClusterIP (ocf::heartbeat:IPaddr): Started node02

Apache - Aggiungere ulteriori servizi

Forward

Ora che è stato realizzato un semplice, ma funzionale cluster a due nodi active/passive, ètempo di aggiungere servizi reali. Si partirà con Apache poiché molti cluster lo includonoed è relativamente semplice da configurare.

Installazione

Prima di continuare, dobbiamo fare in modo Apache è installato su entrambi gli host.

# yum install -y httpd

40

Page 41: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

Inoltre il cluster necessita del tool wget per assicurarsi la capacità di controllare lo statodel server Apache.

# yum install -y wget

Preparazione

Prima di tutto è necessario creare la pagina che Apache servirà. Su CentOS la docroot didefault di Apache è /var/www/html, qui verrà creato il file index.

# cat <<-END >/var/www/html/index.html <html><body>Test sito - node01</body></html>END

Per il momento l'architettura verrà semplificata in modo da servire unicamente un sitostatico e sincronizzare manualmente i dati tra i due nodi. Quindi lo stesso comando andràlanciato su node02.

# cat <<-END >/var/www/html/index.html <html><body>Test sito - node02</body></html>END

Abilitare lo status URL di Apache

Al fine di monitorare lo stato di salute del vostro Apache d'esempio, ed eseguirne ilrecupero se fallisce, la risorsa utilizzata dall'agente di Pacemaker assume l'URL delserver-status disponibile. Accedere tramite l'editor nano al file di configurazione/etc/hhtpd/conf/httpd.conf e assicuriamoci che esso non sia disattivato o commentato.

<Location /server-status>SetHandler server-statusOrder deny,allowDeny from allAllow from 127.0.0.1</Location>

Aggiornare la configurazione

A questo punto, Apache è pronto, quello che ora deve essere fatto è di aggiungerlo alcluster. Per consentire alla risorsa di richiamare il sito web, abbiamo bisogno di utilizzareuno script OCF chiamato apache nei nomi di Heartbeat (lo abbiamo visto sopra), il soloparametro richiesto è il percorso del file di configurazione principale di Apache, questodirà al cluster di controllare una volta ogni minuto che Apache sia ancora in esecuzione.

41

Page 42: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

# crm configure primitive WebSite ocf:heartbeat:apache paramsconfigfile=/etc/httpd/conf/httpd.conf op monitor interval=1min

# crm configure show

node node01node node02primitive WebSite ocf:heartbeat:apache \ params configfile="/etc/httpd/conf/httpd.conf" op monitorinterval="1min"primitive ClusterIP ocf:heartbeat:IPaddr2 params ip="172.16.200.70" cidr_netmask="24" \op monitor interval="20s"property $id="cib-bootstrap-options" \dc-version="1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f" \cluster-infrastructure="openais" \expected-quorum-votes="2" \stonith-enabled="false" \no-quorum-policy="ignore"rsc_defaults $id="rsc-options" \resource-stickiness="100"

Dopo una breve attesa il cluster dovrebbe avviare apache

# crm_mon============Last updated: Fri Aug 28 16:12:49 2009Stack: openaisCurrent DC: node02 - partition with quorumVersion: 1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f2 Nodes configured, 2 expected votes2 Resources configured.============Online: [ node01 node02 ]ClusterIP (ocf::heartbeat:IPaddr): Started node02WebSite (ocf::heartbeat:apache): Started node01

Attenzione però, la risorsa WebSite non sta girando sullo stesso host dell'indirizzo IP!

Assicurarsi che le risorse funzionino sullo stesso Host

Per ridurre il carico su qualsiasi nodo, pacemaker generalmente cerca di diffondere lerisorse configurate attraverso i nodi del cluster. Tuttavia possiamo dire al cluster che ledue risorse sono legati e devono essere eseguite sullo stesso host (oppure no). Quiistruiremo il cluster ad eseguire il sito web solo sull'host che ha il ClusterIP attivo.

Prima di tutto dobbiamo dare un nome descrittivo (scegliere qualcosa comewebsite-with-ip) indica la sua obbligatorietà (in modo che se il ClusterIP non è attivo il sitoweb non è autorizzato ad avviarsi) specificando una sorta di punteggio che serve adavviare le risorse tramite livelli.

42

Page 43: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

I vincoli di collocazione sono direzionali, nel senso che implicano l'ordine in cui le duerisorse avranno luogo scelto. In questo caso stiamo dicendo che WebSite deve essereposto sulla stessa macchina ove è attico il ClusterIP, questo implica che dobbiamoconoscere la posizione del ClusterIP prima di scegliere una posizione per il WebSite. Seil ClusterIP non è attivo da nessuna parte, al WebSite non sarà permesso di spostarsi sualtri nodi.

# crm configure colocation website-with-ip INFINITY: WebSite ClusterIP# crm configure show

node node01node node02primitive WebSite ocf:heartbeat:apache \params configfile="/etc/httpd/conf/httpd.conf" \op monitor interval="1min"primitive ClusterIP ocf:heartbeat:IPaddr2 \params ip="172.16.200.70" cidr_netmask="24" \op monitor interval="20s"colocation website-with-ip inf: WebSiteClusterIPproperty $id="cib-bootstrap-options" \dc-version="1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f" \cluster-infrastructure="openais" \expected-quorum-votes="2" \stonith-enabled="false" \no-quorum-policy="ignore"rsc_defaults $id="rsc-options" \resource-stickiness="100"

# crm_mon============Last updated: Fri Aug 28 16:14:34 2009Stack: openaisCurrent DC: node02 - partition with quorumVersion: 1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f2 Nodes configured, 2 expected votes2 Resources configured.============Online: [ node01 node02 ]ClusterIP (ocf::heartbeat:IPaddr): Started node02WebSite (ocf::heartbeat:apache): Started node02

Controllare l'ordinamento di start e stop di una risorsa

Quando si avvia Apache, si lega agli indirizzi IP disponibili. Esso non conosce tutti gliindirizzi che vengono aggiunti in seguito, quindi non solo hanno bisogno di muoversi sullostesso nodo, ma dobbiamo fare in modo che il ClusterIP sia già attivo prima di iniziareWebSite. Per fare questo dobbiamo aggiungere un vincolo di ordinazione. Abbiamobisogno anche qui di dagli un nome (scegliere qualcosa di descrittivo comeapache-after-ip), indicano la sua obbligatoria (in modo che l'eventuale recupero delClusterIP si avvierà anche il recupero di WebSite) per elencare le due risorse corretto

43

Page 44: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

ordine dobbiamo inizializzarle .

# crm configure order apache-dopo-ip mandatory: ClusterIP WebSite# crm configure show

node node01node node02primitive WebSite ocf:heartbeat:apache \params configfile="/etc/httpd/conf/httpd.conf" \op monitor interval="1min"primitive ClusterIP ocf:heartbeat:IPaddr2 \params ip="172.16.200.70" cidr_netmask="24" \op monitor interval="20s"colocation website-with-ip inf: WebSite ClusterIPorder apache-after-ip inf: ClusterIPWebSiteproperty $id="cib-bootstrap-options" \dc-version="1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f" \cluster-infrastructure="openais" \expected-quorum-votes="2" \stonith-enabled="false" \no-quorum-policy="ignore"rsc_defaults $id="rsc-options" \resource-stickiness="100"

Specificare una location preferita

Pacemaker non si basa su una sorta di simmetria tra i nodi hardware, quindi si potrebbeprevedere di avere anche una macchina più potente di un'altra. In questi casi ha sensoerogare le risorse su questa macchina, se è disponibile. Per fare ciò viene creata unalocation constraint. Anche in questo caso viene assegnato un nome descrittivo(prefer-node01), specificata la risorsa che girerà qui (WebSite), quanto peso avrà pergirare qui (verrà utilizzato 50, ma in una situazione a due nodi ogni valore superiore allo 0andrà bene) ed il nome dell'host.

# crm configure location prefer-node01 WebSite 50: node01# crm configure show

node node01node node02primitive WebSite ocf:heartbeat:apache \params configfile="/etc/httpd/conf/httpd.conf" \op monitor interval="1min"primitive ClusterIP ocf:heartbeat:IPaddr2 \params ip="172.16.200.70" cidr_netmask="24" \op monitor interval="20s"location prefer-node01 WebSite 50: node01colocation websitewith-ip inf: WebSite ClusterIPproperty $id="cib-bootstrap-options" \

44

Page 45: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

dc-version="1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f" \cluster-infrastructure="openais" \expected-quorum-votes="2" \stonith-enabled="false" \no-quorum-policy="ignore"rsc_defaults $id="rsc-options" \resource-stickiness="100"

# crm_mon============Last updated: Fri Aug 28 16:17:35 2009Stack: openaisCurrent DC: node02 - partition with quorumVersion: 1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f2 Nodes configured, 2 expected votes2 Resources configured.============Online: [ node01 node02 ]ClusterIP (ocf::heartbeat:IPaddr): Started node02WebSite (ocf::heartbeat:apache): Started node02

Attenzione però, le risorse sono comunque su node02!

Anche se al momento viene preferito node01 a node02, questa preferenza è(intenzionalmente) minore dello stickiness della risorsa (quanto è stato preferito per nonavere un downtime superfluo).

Spostamento manuale delle risorse all'interno del cluster

C'è sempre la necessità da parte di un amministratore di soprassedere il cluster e forzare le risorse a spostarsi in una posizione specifica. E' possibile ignorare felicemente le location constraint create sopra, fornendo il nome della risorsa che si vuole spostare e la destinazione della stessa, il comando farà il resto.

# crm resource move WebSite node01# crm_mon============Last updated: Fri Aug 28 16:19:24 2009Stack: openaisCurrent DC: node02 - partition with quorumVersion: 1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f2 Nodes configured, 2 expected votes2 Resources configured.============Online: [ node01 node02 ]ClusterIP (ocf::heartbeat:IPaddr): Started node01WebSite (ocf::heartbeat:apache): Started node01

Si noti come la regola di colocation che abbiamo creato ha assicurato che il ClusterIP è

45

Page 46: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

stato trasferito a node01. Per i curiosi, possiamo vedere l'effetto di questo comando esaminando la configurazione:

# crm configure show

node node01node node02primitive WebSite ocf:heartbeat:apache \params configfile="/etc/httpd/conf/httpd.conf" \op monitor interval="1min"primitive ClusterIP ocf:heartbeat:IPaddr2 \params ip="172.16.200.70" cidr_netmask="24" \op monitor interval="20s"location cli-prefer-WebSite WebSite \rule $id="cli-prefer-rule-WebSite" inf: #uname eq node01location prefer-pcmk-1 WebSite 50: node01colocation website-with-ip inf: WebSite ClusterIPproperty $id="cib-bootstrap-options" \dc-version="1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f" \cluster-infrastructure="openais" \expected-quorum-votes="2" \stonith-enabled="false" \no-quorum-policy="ignore"rsc_defaults $id="rsc-options" \resource-stickiness="100"

Viene evidenziata la constraint automatizzata utilizzata per spostare la risorsa in node01

Restituire il controllo nuovamente al cluster

Una volta terminata una qualsiasi attività che richiede lo spostamento della risorsa innode01, in questo caso nessuna, è possibile consentire al cluster di riprendere le normalioperazioni con il comando unmove. Dal momento che in precedenza è stata configuratauna default stickiness, la risorsa rimarrà in node01.

# crm resource unmove WebSite# crm configure show

node node01node node02primitive WebSite ocf:heartbeat:apache \params configfile="/etc/httpd/conf/httpd.conf" \op monitor interval="1min"primitive ClusterIP ocf:heartbeat:IPaddr2 \params ip="172.16.200.70" cidr_netmask="24" \op monitor interval="20s"location prefer-node01 WebSite 50: node01colocation website-with-ip inf: WebSite ClusterIP

46

Page 47: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

property $id="cib-bootstrap-options" \dc-version="1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f" \cluster-infrastructure="openais" \expected-quorum-votes="2" \stonith-enabled="false" \no-quorum-policy="ignore"rsc_defaults $id="rsc-options" \resource-stickiness="100"

E' da notare come la constraint automatizzata non esiste più. Se viene controllato lo statodel cluster è possibile osservare che, così come aspettato, le risorse sono ancora attivasu node01.

# crm_mon============Last updated: Fri Aug 28 16:20:53 2009Stack: openaisCurrent DC: node02 - partition with quorumVersion: 1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f2 Nodes configured, 2 expected votes2 Resources configured.============Online: [ node01 node02 ]ClusterIP (ocf::heartbeat:IPaddr): Started node01WebSite (ocf::heartbeat:apache): Started node01

Storage replicato con DRBD

Background

Anche se si sta utilizzando siti web statici, il dover sincronizzare manualmente i contenutidi quel sito su tutte le macchine del cluster non è l'ideale. Per i siti web dinamici, come unwiki, non è nemmeno da considerarsi un'opzione. In qualche modo i dati devono esseremantenuti in sincronia. DRBD può essere pensato come un disco di rete basato suRAID-1. Per maggiori informazioni vedere i dettagli in http://www.drbd.org/.

Installare i pacchetti DRBD

Dal uscita del kernel 2.6.33, esso contiene tutto il necessario per utilizzare DRBD, tuttoquello che si deve fare è installarlo.

# yum install -y drbd-pacemaker drbd-udev

47

Page 48: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

Configurare DRBD

Prima di configurare DRBD è necessario definire a parte lo spazio che questo dovràutilizzare.

Creare una partizione per DRBD

Se si dispone di più di 1Gb liberi è bene servirsene. Negli scopi di questa guida 1Gb è fintroppo spazio per un file html e sufficiente per ospitare più avanti i metadata di GFS2.

# lvcreate -n drbd-demo -L 1G VolGroupLogical volume "drbd-demo" created

# lvsLV VG Attr LSize Origin Snap% Move Log Copy% Convertdrbd-demo VolGroup -wi-a- 1.00Glv_root VolGroup -wi-ao 7.30Glv_swap VolGroup -wi-ao 500.00M

La medesima operazione va ripetuta sul secondo nodo, avendo cura di utilizzare la stessa grandezza per la partizione.

# ssh node02 -- lvsLV VG Attr LSize Origin Snap% Move Log Copy% Convertlv_root VolGroup -wi-ao 7.30Glv_swap VolGroup -wi-ao 500.00M

# ssh node02 -- lvcreate -n drbd-demo -L 1G VolGroupLogical volume "drbd-demo" created

# ssh node02 -- lvsLV VG Attr LSize Origin Snap% Move Log Copy% Convertdrbd-demo VolGroup -wi-a- 1.00Glv_root VolGroup -wi-ao 7.30Glv_swap VolGroup -wi-ao 500.00M

Scrivere la configurazione DRBD

Non c'è una serie di comandi per realizzare una configurazione di DRBD, così vi basticopiare semplicemente la configurazione sotto /etc/drbd.conf.Informazioni dettagliate sulle direttive utilizzate in questa configurazione (e le alternativedisponibili) è disponibile presso http://www.drbd.org/users-guide/ch-configure.html

# nano /etc/drbd.conf

48

Page 49: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

global {usage-count yes;}common {protocol C;}resource wwwdata {meta-disk internal;device /dev/drbd1;syncer {verify-alg sha1;}net {allow-two-primaries;}on node01 {disk /dev/mapper/VolGroup-drbd--demo;address 172.16.200.69:7789;}on node02 {disk /dev/mapper/VolGroup-drbd--demo;address 172.16.200.71:7789; }}

Iniziare a caricare DRBD

Sistemata la configurazione, è possibile inizializzare DRBD

# drbdadm create-md wwwdatamd_offset 12578816al_offset 12546048bm_offset 12541952Found some data

==> This might destroy existing data! <==Do you want to proceed?[need to type 'yes' to confirm] yesWriting meta data...initializing activity logNOT initialized bitmapNew drbd meta data block successfully created.success

Caricate il modulo DRBD del kernel e verificando che tutto sia a posto

49

Page 50: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

# modprobe drbd# drbdadm up wwwdata# cat /proc/drbdversion: 8.3.6(api:88/proto:86-90)GIT-hash: f3606c47cc6fcf6b3f086e425cb34af8b7a81bbf build by root@node01, 2009-12-08 11:22:571: cs:WFConnection ro:Secondary/Unknown ds:Inconsistent/DUnknown C r----ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:12248

Ripetere tutto sul secondo nodo

# ssh node02 -- drbdadm --force create-md wwwdataWriting meta data...initializing activity logNOT initialized bitmapNew drbd meta data block successfully created. success

# ssh node02 -- modprobe drbdWARNING: Deprecated config file /etc/modprobe.conf, all config files belong into /etc/modprobe.d/.# ssh node02 -- drbdadm up wwwdata# ssh node02 -- cat /proc/drbdversion: 8.3.6 (api:88/proto:86-90)GIT-hash: f3606c47cc6fcf6b3f086e425cb34af8b7a81bbf build by root@node01, 2009-12-08 11:22:571: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r----ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:12248

Ora va indicato a DRBD quale set di dati utilizzare. Dal momento che entrambe le particontengono dati non necessari è possibile lanciare il seguente comando su node01:

# drbdadm -- --overwrite-data-of-peer primary wwwdata# cat /proc/drbd

version: 8.3.6 (api:88/proto:86-90)GIT-hash: f3606c47cc6fcf6b3f086e425cb34af8b7a81bbf build by root@pcmk-1, 2009-12-08 11:22:571: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----ns:2184 nr:0 dw:0 dr:2472 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b

50

Page 51: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

oos:10064

[=====>..............] sync'ed: 33.4% (10064/12248)Kfinish: 0:00:37 speed: 240 (240) K/sec

# cat /proc/drbdversion: 8.3.6 (api:88/proto:86-90)GIT-hash: f3606c47cc6fcf6b3f086e425cb34af8b7a81bbf build by root@node01, 2009-12-08 11:22:571: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----ns:12248 nr:0 dw:0 dr:12536 al:0 bm:1 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

node01 è ora nello stato primario che le permette di essere scritto. Il che significa che èun buon punto in cui creare un filesystem e compilarlo con alcuni dati tramite la nostrarisorsa WebSite.

Popolare DRBD con i dati

# mkfs.ext4 /dev/drbd1

mke2fs 1.41.4 (27-Jan-2009)Filesystem label=OS type: LinuxBlock size=1024 (log=0)Fragment size=1024 (log=0)3072 inodes, 12248 blocks612 blocks (5.00%) reserved for the super userFirst data block=1Maximum filesystem blocks=125829122 block groups8192 blocks per group, 8192 fragments per group1536 inodes per groupSuperblock backups stored on blocks:8193Writing inode tables: doneCreating journal (1024 blocks): doneWriting superblocks and filesystem accounting information: doneThis filesystem will be automatically checked every 26 mounts or180 days, whichever comes first. Use tune2fs -c or -i to override

Ora non resta che montare il filesystem appena creato in modo da poter creare il nostrofile index.

# mount /dev/drbd1 /mnt/# cat <<-END >/mnt/index.html

51

Page 52: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

<html><body>My Test Site - drbd</body></html>END

Per smontare il file system si usa# umount /dev/drbd1

Configurare il cluster per DRBD

Un comoda funzione della shell crm è quella di rendere interattivi comandi per effettuarediversi cambiamenti automatici.Inizialmente va lanciata la shell. Il prompt cambierà, indicando l'accesso alla modalitàinterattiva.

# crm cibcrm(live) #

Prima di andare avanti, dobbiamo creare una copia della configurazione corrente, quiverranno posti tutti i cambiamenti.

Il cluster non vedrà alcun file fino a che non si decida di farlo. Si noti ancora una voltacome il prompt cambi, questa volta per indicare che stiamo osservando il cluster inmodalità live.

cib crm(live) # cib new drbdINFO: drbd shadow CIB created

crm(drbd) #

Ora è possibile creare il clone DRBD e visualizzare la configurazione revisionata.

crm(drbd) # configure primitive WebData ocf:linbit:drbd paramsdrbd_resource=wwwdata op monitor interval=60s

crm(drbd) # configure ms WebDataClone WebData meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=truecrm(drbd) # configure shownode node01

node node02primitive WebData ocf:linbit:drbd \params drbd_resource="wwwdata" \op monitor interval="60s"primitive WebSite ocf:heartbeat:apache \params configfile="/etc/httpd/conf/httpd.conf" \op monitor interval="1min"primitive ClusterIP ocf:heartbeat:IPaddr2 \params ip="172.16.200.70" cidr_netmask="24" \op monitor interval="20s"ms WebDataClone WebData \

52

Page 53: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"location prefer-node01 WebSite 50: node01colocation website-with-ip inf: WebSite ClusterIPorder apache-after-ip inf: ClusterIP WebSiteproperty $id="cib-bootstrap-options" \dc-version="1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f" \cluster-infrastructure="openais" \expected-quorum-votes="2" \stonith-enabled="false" \no-quorum-policy="ignore"rsc_defaults $id="rsc-options" \resource-stickiness="100"

Quando i cambiamenti saranno giudicati sufficienti sarà possibile indicare al cluster diiniziare ad usarli, ed utilizzare crm_mon per verificare che tutto stia funzionando.

crm(drbd) # cib commit drbdINFO: commited 'drbd' shadow CIB to theclustercrm(drbd) # quitbye

# crm_mon============Last updated: Tue Sep 1 09:37:13 2009Stack: openaisCurrent DC: node01 - partition with quorumVersion: 1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f2 Nodes configured, 2 expected votes3 Resources configured.============Online: [ node01 node02 ]ClusterIP (ocf::heartbeat:IPaddr): Started node01WebSite (ocf::heartbeat:apache): Started node01Master/Slave Set: WebDataClone Masters: [node02 ] Slaves: [ node01 ]

Ora che DRBD sta funzionando è possibile configurare una risorsa filesystem perutilizzarlo. In aggiunta alla definizione del filesystem si necessita inoltre di indicare alcluster dove questa sia localizzata (cioè solo sul nodo Primary di DRBD) e quando adessa è consentito avviarsi (solo dopo che il nodo Primary è stato attivato).Ancora una volta verrà utilizzata la shell in modalità interattiva.

# crm

crm(live) # cib new fsINFO: fs shadow CIB created

53

Page 54: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

crm(fs) # configure primitive WebFS ocf:heartbeat:Filesystem \params device="/dev/drbd/by-res/wwwdata" directory="/var/www/html" fstype="ext4"crm(fs) # configure colocation fs_on_drbd inf: WebFS WebDataClone:Mastercrm(fs) # configure order WebFS-after-WebData inf: WebDataClone:promote WebFS:start

Abbiamo anche bisogno di dire al cluster che Apache deve essere eseguito sullo stesso macchina come file system e che essa deve essere attivo prima di Apache può cominciare.

crm(fs) # configure colocation WebSite-with-WebFS inf: WebSite WebFScrm(fs) # configure order WebSite-after-WebFS inf: WebFS WebSite

Revisioniamo ora la configurazione aggiornata.

crm(fs) # crm configure show

node node01node node02primitive WebData ocf:linbit:drbd \params drbd_resource="wwwdata" \op monitor interval="60s"primitive WebFS ocf:heartbeat:Filesystem \params device="/dev/drbd/by-res/wwwdata" directory="/var/www/html" fstype="ext4"primitive WebSite ocf:heartbeat:apache \params configfile="/etc/httpd/conf/httpd.conf" \op monitor interval="1min"primitive ClusterIP ocf:heartbeat:IPaddr2 \params ip="172.16.200.70" cidr_netmask="24" \op monitor interval="20s"ms WebDataClone WebData \meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"location prefer-node01 WebSite 50: node01colocation WebSite-with-WebFS inf: WebSite WebFScolocation fs_on_drbd inf: WebFS WebDataClone:Mastercolocation website-with-ip inf: WebSite ClusterIPorder WebFS-after-WebData inf: WebDataClone:promote WebFS:startorder WebSite-after-WebFS inf: WebFS WebSiteorder apache-after-ip inf: ClusterIP WebSiteproperty $id="cib-bootstrap-options" \dc-version="1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f" \

54

Page 55: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

cluster-infrastructure="openais" \expected-quorum-votes="2" \stonith-enabled="false" \no-quorum-policy="ignore"rsc_defaults $id="rsc-options" \resource-stickiness="100"

Dopo la revisione della nuova configurazione questa va caricata e si potrà osservarla inazione all'interno del cluster.

crm(fs) # cib commit fsINFO: commited 'fs' shadow CIB to the cluster

crm(fs) # quitbye

# crm_mon============Last updated: Tue Sep 1 10:08:44 2009Stack: openaisCurrent DC: node01 - partition with quorumVersion: 1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f2 Nodes configured, 2 expected votes4 Resources configured.============Online: [ node01 node02 ]ClusterIP (ocf::heartbeat:IPaddr): Started node01WebSite (ocf::heartbeat:apache): Started node01Master/Slave Set: WebDataCloneMasters: [ node01 ]Slaves: [ node02 ]WebFS (ocf::heartbeat:Filesystem): Started node01

Testare la migrazione

Precedentemente per eseguire il nostro test abbiamo visto come arrestare il nodo attivo.Un altro modo di simulare in modo sicuro il recupero è di mettere il nodo in quella cheviene chiamata "modalità standby". I nodi messi in questo stato dicono al cluster che essinon sono autorizzati a eseguire le risorse. Tutte le risorse trovate attive si sarannospostati altrove. Questa funzione può essere particolarmente utile durantel'aggiornamento dei pacchetti delle risorse.

Mettendo il nodo locale in standby consentirà di osservare il cluster spostare tutte lerisorse sull'altro nodo. Da notare inoltre come lo stato del nodo cambierà, indicando chenon può più ospitare risorse

# crm node standby

55

Page 56: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

# crm_mon

============Last updated: Tue Sep 1 10:09:57 2009Stack: openaisCurrent DC: node01 - partition with quorumVersion: 1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f2 Nodes configured, 2 expected votes4 Resources configured.============Node node01: standbyOnline: [ node02 ]ClusterIP (ocf::heartbeat:IPaddr): Started node02WebSite (ocf::heartbeat:apache): Started node02Master/Slave Set: WebDataCloneMasters: [ node02 ] Stopped: [ WebData:1 ]WebFS (ocf::heartbeat:Filesystem): Started node02

Fatto quanto necessario su node01 (in questo caso nulla, si è solo osservato le risorsespostarsi), è possibile consentire il nodo ad essere nuovamente parte integrante delcluster.

# crm node online# crm_mon

============Last updated: Tue Sep 1 10:13:25 2009Stack: openaisCurrent DC: node01 - partition with quorumVersion: 1.1.5-bdd89e69ba545404d02445be1f3d72e6a203ba2f2 Nodes configured, 2 expected votes4 Resources configured.============Online: [ node01 node02 ]ClusterIP (ocf::heartbeat:IPaddr): Started node02WebSite (ocf::heartbeat:apache): Started node02Master/Slave Set: WebDataCloneMasters: [ node02 ]Slaves: [ node01 ]WebFS (ocf::heartbeat:Filesystem): Started node02

Notare come ora l'impostazione di stickiness delle risorse prevenga la migrazione deiservizi nuovamente verso node01.

Ora il nostro cluster HA failover e pronto, per poter gestire il cluster ci avvarremo dellapossibilità di utilizzare un interfaccia grafica tramite web, ecco cosa installeremo.

56

Page 57: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

Interfaccia Web per gestire il Cluster

I software per la gestione grafica del cluster si chiamano Luci e e ricci, per prima cosascaricheremo il repository corretto disabilitando temporaneamente epel, questo perchè isorgenti presenti su il repository epel non ci permettono di scaricare l'interfaccia correttae portando ad un conflitto.

Installare i repository necessari

Dalla shell, creiamo il nostro repository,

# nano /etc/yum.repos.d/ha-clustering.repo

Al suo interno inseriamo quanto segue

[network_ha-clustering_Stable]name=Stable High Availability/Clustering packages (CentOS_CentOS-6)type=rpm-mdbaseurl=http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/gpgcheck=1gpgkey=http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/repodata/repomd.xml.keyenabled=1

Oppure accediamo qui e facciamo un copie e incolla: http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/network:ha-clustering:Stable.repo

se fino ad ora non siete riusciti ad usare il tool crm provate ad installarlo adesso con il comando

# yum install crmsh

Installiamo ora luci e ricci, disabilitando temporaneamente i repo epel

Installare luci e ricci

# yum install luci --disablerepo=epel

Luci verrà scaricato ed installato, durante la fase d'installazione il software creaautomaticamente un certificato SSL per la connessione criptata, l'indirizzo che verràvisualizzato a video dovrebbe essere simlie a questo: https://172.16.200.69:8084

# yum install ricci --disablerepo=epel

57

Page 58: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

Dopo aver installato ricci, dobbiamo fornire a quest'ultimo un utente ed una password,questo servira a darci accesso a luci, io per facilitare la cosa ho impostato la stessapassword di root, quindi sul sistema sciriviamo:

# passwd ricci E alla richiesta inserire la password e poi riconfermarla.

Ancora un passo prima di accedere a luci, assicuriamoci che cman sia avviato altrimentinon riusciremo a configurare il cluster da interfaccia web

# chkconfig cman on# service cman start

Ripetiamo la stessa cosa sul nodo 2, una volta terminato avviamo luci

# service luci start

Ora possiamo accedere all'interfaccia di luci, utilizzando l'IP del nodo 1 oppure quello delnodo 2 o ancora l'IP del cluster, dovremo vedere questo sul nostro browser, (in questoviene preferito Firefox), questo è quando dovremmo vedere:

prima di tutto l'accettazione del certificato SSL

poi la schermata di Login, utilizzando come user name ricci e password quella impostata

58

Page 59: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

precedentemente

ed infine l'interfaccia web

ora non vi resta che unire i due nodi in un cluster usando l'interfaccia, è vero che il clusterè gia esistente ma l'interfaccia non è in grado di gestirli e pertanto vanno creati.

59

Page 60: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

Come aggiungere un nodo al cluster

Per aggiungere un nodo al cluster aggiornare la configurazione del cluster, diffondere laconfigurazione aggiornata al nodo da aggiungere ed avviare il software sul nodo. A talescopo eseguire le fasi di seguito riportate:

1. Su qualsiasi nodo nel cluster modificare /etc/cluster/cluster.conf in modo daaggiungere una sezione clusternode per il nodo che deve essere aggiunto. Peresempio, se node-03.example.com deve essere aggiunto, allora aggiungere lasezione clusternode per quel nodo. Se con l'aggiunta di un nodo (o nodi) il clusterpasserà da due a tre o più nodi, rimuovere i seguenti attributi cman da/etc/cluster/cluster.conf:

# nano /etc/cluster/cluster.conf

cman two_node="1"

expected_votes="1"

2) Aggiornare l'attributo config_version aumentando il proprio valore (per esempio,modificandolo da config_version="2" a config_version="3">).

3) Salvare /etc/cluster/cluster.conf. 4) (Opzionale) Convalidare il file aggiornato con lo schema del cluster (cluster.rng)

eseguendo il comando ccs_config_validate. Per esempio:

# ccs_config_validateConfiguration validates

5. Eseguire il comando cman_tool version -r per diffondere la configurazione al restodei nodi del cluster.

6. Verificare che il file di configurazione aggiornato è stato diffuso. 7. Diffondere il file di configurazione aggiornato su /etc/cluster/ in ogni nodo da

aggiungere al cluster. Per esempio usare il comando scp per inviare il file diconfigurazione aggiornato ad ogni nodo da aggiungere al cluster.

8. Se contando i nodi il cluster è passato da due ad un numero di nodi maggioreallora sarà necessario riavviare il software del cluster nel modo seguente:

1. Su ogni nodo arrestate il software del cluster consultando. Per esempio:

# service rgmanager stopStopping Cluster Service Manager: [ OK ]

# service gfs2 stopUnmounting GFS2 filesystem (/mnt/gfsA): [ OK ]Unmounting GFS2 filesystem (/mnt/gfsB): [ OK ]

# service clvmd stopSignaling clvmd to exit [ OK ]

60

Page 61: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

clvmd terminated [ OK ]

# service cman stopStopping cluster: Leaving fence domain... [ OK ] Stopping gfs_controld... [ OK ] Stopping dlm_controld... [ OK ] Stopping fenced... [ OK ] Stopping cman... [ OK ] Waiting for corosync to shutdown: [ OK ] Unloading kernel modules... [ OK ] Unmounting configfs... [ OK ]

2. Su ogni nodo avviate il software del cluster consultando Per esempio:

# service cman startStarting cluster: Checking Network Manager... [ OK ] Global setup... [ OK ] Loading kernel modules... [ OK ] Mounting configfs... [ OK ] Starting cman... [ OK ] Waiting for quorum... [ OK ] Starting fenced... [ OK ] Starting dlm_controld... [ OK ] Starting gfs_controld... [ OK ] Unfencing self... [ OK ] Joining fence domain... [ OK ]

# service clvmd startStarting clvmd: [ OK ]Activating VG(s): 2 logical volume(s) in volume group "vg_example" now active [ OK ]

# service gfs2 startMounting GFS2 filesystem (/mnt/gfsA): [ OK ]Mounting GFS2 filesystem (/mnt/gfsB): [ OK ]

# service rgmanager startStarting Cluster Service Manager: [ OK ]

9. Ad ogni nodo da aggiungere al cluster avviare il software del cluster Per esempio:

# service cman startStarting cluster: Checking Network Manager... [ OK ] Global setup... [ OK ]

61

Page 62: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

Loading kernel modules... [ OK ] Mounting configfs... [ OK ] Starting cman... [ OK ] Waiting for quorum... [ OK ] Starting fenced... [ OK ] Starting dlm_controld... [ OK ] Starting gfs_controld... [ OK ] Unfencing self... [ OK ] Joining fence domain... [ OK ]

# service clvmd startStarting clvmd: [ OK ]Activating VG(s): 2 logical volume(s) in volume group "vg_example" now active [ OK ]# service gfs2 startMounting GFS2 filesystem (/mnt/gfsA): [ OK ]Mounting GFS2 filesystem (/mnt/gfsB): [ OK ]

# service rgmanager startStarting Cluster Service Manager: [ OK ]

10. Usando l'utilità clustat, verificare che ogni nodo aggiunto sia parte del cluster ed inesecuzione: Per esempio:

# clustatCluster Status for mycluster @ Wed Nov 17 05:40:00 2010Member Status: Quorate

Member Name ID Status ------ ---- ---- ------ node-03.example.com 3 Online, rgmanager node-02.example.com 2 Online, rgmanager node-01.example.com 1 Online, Local, rgmanager

Service Name Owner (Last) State ------- ---- ----- ------ ----- service:example_apache node-01.example.com started service:example_apache2 (none) disabled

Usare altresì cman_tool status per verificare il conteggio del quorum ed i voti ed il conteggio dei nodi. Per esempio:

# cman_tool statusVersion: 6.2.0Config Version: 19Cluster Name: mycluster

62

Page 63: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

Cluster Id: 3794Cluster Member: YesCluster Generation: 548Membership state: Cluster-MemberNodes: 3Expected votes: 3Total votes: 3Node votes: 1Quorum: 2 Active subsystems: 9Flags: Ports Bound: 0 11 177 Node name: node01.adam.lanNode ID: 3Multicast addresses: 226.94.1.1 Node addresses: 172.16.200.69

Esempi di configurazione a due e tre nodi

Consultare gli esempi seguenti per un confronto tra configurazioni a due e tre nodi.

Esempio Configurazione cluster a tre nodi

<cluster name="mycluster" config_version="3"> <cman/> <clusternodes> <clusternode name="node-01.example.com" nodeid="1"> <fence> <method name="APC"> <device name="apc" port="1"/> </method> </fence> </clusternode> <clusternode name="node-02.example.com" nodeid="2"> <fence> <method name="APC"> <device name="apc" port="2"/> </method> </fence> </clusternode> <clusternode name="node-03.example.com" nodeid="3"> <fence> <method name="APC"> <device name="apc" port="3"/> </method> </fence> </clusternode> </clusternodes>

63

Page 64: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

<fencedevices> <fencedevice agent="fence_apc" ipaddr="apc_ip_example" login="login_example" name="apc" passwd="password_example"/> </fencedevices> <rm> <failoverdomains> <failoverdomain name="example_pri" nofailback="0" ordered="1" restricted="0"> <failoverdomainnode name="node-01.example.com" priority="1"/> <failoverdomainnode name="node-02.example.com" priority="2"/> <failoverdomainnode name="node-03.example.com" priority="3"/> </failoverdomain> </failoverdomains> <resources> <fs name="web_fs" device="/dev/sdd2" mountpoint="/var/www" fstype="ext3"/> <ip address="127.143.131.100" monitor_link="yes" sleeptime="10"/> <apache config_file="conf/httpd.conf" name="example_server" server_root="/etc/httpd" shutdown_wait="0"/> </resources> <service autostart="0" domain="example_pri" exclusive="0" name="example_apache"recovery="relocate"> <fs ref="web_fs"/> <ip ref="127.143.131.100"/> <apache ref="example_server"/> </service> <service autostart="0" domain="example_pri" exclusive="0" name="example_apache2" recovery="relocate"> <fs name="web_fs2" device="/dev/sdd3" mountpoint="/var/www" fstype="ext3"/> <ip address="127.143.131.101" monitor_link="yes" sleeptime="10"/> <apache config_file="conf/httpd.conf" name="example_server2" server_root="/etc/httpd" shutdown_wait="0"/> </service> </rm></cluster>

Esempio Configurazione cluster a due nodi

<cluster name="mycluster" config_version="3"> <cman two_node="1" expected_votes="1"/> <clusternodes> <clusternode name="node-01.example.com" nodeid="1"> <fence> <method name="APC"> <device name="apc" port="1"/> </method> </fence> </clusternode> <clusternode name="node-02.example.com" nodeid="2"> <fence> <method name="APC">

64

Page 65: REALIZZARE UN SERVER CLUSTER HA FAILOVER CON ......CentOS 6 Cluster HA active/passive Prefazione Ho voluto scrivere questa guida in quanto recentemente mi è stato richiesto di testare

CentOS 6 Cluster HA active/passive

<device name="apc" port="2"/> </method> </fence> </clusternodes> <fencedevices> <fencedevice agent="fence_apc" ipaddr="apc_ip_example" login="login_example" name="apc" passwd="password_example"/> </fencedevices> <rm> <failoverdomains> <failoverdomain name="example_pri" nofailback="0" ordered="1" restricted="0"> <failoverdomainnode name="node-01.example.com" priority="1"/> <failoverdomainnode name="node-02.example.com" priority="2"/> </failoverdomain> </failoverdomains> <resources> <fs name="web_fs" device="/dev/sdd2" mountpoint="/var/www" fstype="ext3"/> <ip address="127.143.131.100" monitor_link="yes" sleeptime="10"/> <apache config_file="conf/httpd.conf" name="example_server" server_root="/etc/httpd" shutdown_wait="0"/> </resources> <service autostart="0" domain="example_pri" exclusive="0" name="example_apache"recovery="relocate"> <fs ref="web_fs"/> <ip ref="127.143.131.100"/> <apache ref="example_server"/> </service> <service autostart="0" domain="example_pri" exclusive="0" name="example_apache2" recovery="relocate"> <fs name="web_fs2" device="/dev/sdd3" mountpoint="/var/www" fstype="ext3"/> <ip address="127.143.131.101" monitor_link="yes" sleeptime="10"/> <apache config_file="conf/httpd.conf" name="example_server2" server_root="/etc/httpd" shutdown_wait="0"/> </service> </rm></cluster>

65