Progetto

Generale

Profilo

SetupClusterHA » Cronologia » Versione 28

Amministratore Truelite, 01-07-2006 18:07

1 1 Amministratore Truelite
[[TracNav(TOC)]]
2
= Configurazione di un Cluster HA =
3
4 9 Amministratore Truelite
In questo caso per ''Cluster HA'' si intende un sistema composta da due macchine (dette nodi) in configurazione attivo/passivo, su cui viene gestita automaticamente la sincronizzazione dei dati attraverso DRDB, e lo swith automatico dei servizi in caso di crollo del nodo attivo con l'uso di ''heartbeat''.
5 1 Amministratore Truelite
6 2 Amministratore Truelite
== Predisposizione delle due macchine del Cluster ==
7 1 Amministratore Truelite
8 22 Amministratore Truelite
Per un buon funzionamento del cluster è quantomeno opportuno poter disporre di una interfaccia di rete in più, dedicata alla comunicazione diretta fra i due nodi; questo è importante anche per evitare errori nella rilevazione di un crollo (che normalmente viene fatta tramite una connessione di rete, anche se è possibile usare un collegamento seriale) qualora ad andare giù fosse lo ''switch'' e non un singolo nodo. Disponendo dell'hardware necessario (interruttori controllabili da remoto) si può installare ''stonith'' per assicurarsi dello spegnimento dell'altro nodo in caso di ''switch''.
9 1 Amministratore Truelite
10 22 Amministratore Truelite
Negli esempi seguenti si supporrà allora che ciascuna macchina abbia almeno due interfacce di rete; la prima, {{{eth0}}}, connessa alla rete locale, la seconda, {{{eth1}}}, connessa direttamente all'altra macchina con un cavo incrociato. Sulla prima interfaccia dovremo configurare l'indirizzo pubblico di ciascuna macchina (nel nostro caso {{{10.10.0.98}}} e {{{10.10.0.99}}}) inteso come indirizzo diretto del singolo nodo del cluster, a questo si aggiungerà l'indirizzo del ''cluster'' in quanto tale (tenuto sulla macchina che fa da nodo primario, che migrerà sull'altra in caso si ''switch'') che nel nostro caso sarà {{{10.10.0.2}}}. Sulla seconda interfaccia metteremo degli indirizzi privati (nel caso dell'esmepio {{{198.168.234.1}}} e {{{198.168.234.2}}}) usati per la sincronizzazione di DRBD e per il controllo di ''heartbeat''.
11 5 Amministratore Truelite
12 22 Amministratore Truelite
Per poter utilizzare la sincronizzazione dei dati con DRBD occorre predisporre i dischi delle due macchine riservando lo spazio opportuno. Per questo occorrono due partizioni su ciascuna macchina (in realtà si potrebbe fare tutto con una sola, ma questo comporta che gli ultimi 128Mb della partizione devono essere lasciati liberi ed il filesystem presente su di essa opportunamento ridimensionato). La prima partizione sarà quella su cui si mantengono i dati, la seconda deve essere di almeno 128Mb e serve per i metadati usati da DRBD, la partizione dei dati deve essere approssimativamente della stessa dimensione su entrambe le macchine.
13 1 Amministratore Truelite
14 6 Amministratore Truelite
15 1 Amministratore Truelite
== Configurazione di DRBD ==
16
17 22 Amministratore Truelite
Il primo passo consiste nell'installazione dei pacchetti necessari, questi nel caso di Debian Sarge sono due, i sorgenti del modulo del kernel che gestisce la replicazione dei dati, {{{drbd0.7-module-source}}} e i programmi di gestione dello stesso {{{drbd0.7-utils}}}. Questi possono essere installati a mano, nel qual caso si dovrà anche provvedere a compilare ed installare il modulo {{{drbd}}}, altrimenti si può utilizzare il programma {{{module-assistant}}} che si incaricherà anche di scaricare tutti i pacchetti necessari, compilare il modulo per il kernel corrente ed installarlo. 
18 5 Amministratore Truelite
19 10 Amministratore Truelite
Prima di attivare DRBD occorre configurarlo, il file da modificare è {{{/etc/drbd.conf}}}, dove dovremo indicare per ciascuna macchina quali sono i dispositivi da usare e su quale indirizzo contattare l'altro nodo; i singoli nodi dovranno essere identificati per conto del loro ''hostname'' (viene sempre usato il risultato del comando {{{uname -n}}}), che nel nostro caso saranno {{{servint1}}} e {{{servint2}}}.
20 18 Amministratore Truelite
Il contenuto finale di {{{/etc/drbd.conf}}} dovrebbe essere allora qualcosa del tipo:
21 4 Amministratore Truelite
{{{
22
resource r0 {
23
  protocol C;
24
  incon-degr-cmd "echo '!DRBD! pri on incon-degr' | wall ; sleep 60 ; halt -f";
25
  startup {
26 27 Amministratore Truelite
    degr-wfc-timeout 120;    # 2 minutes.
27 4 Amministratore Truelite
  }
28
  disk {
29
    on-io-error   detach;
30
  }
31
  net {
32
  }
33
  syncer {
34
    rate 10M;
35
    group 1;
36
    al-extents 257;
37
  }
38
  on servint1 {
39
    device     /dev/drbd0;
40
    disk       /dev/md3;
41
    address    192.168.234.1:7788;
42
    meta-disk  /dev/hda7[0];
43
  }
44
  on servint2 {
45
    device    /dev/drbd0;
46
    disk      /dev/hda5;
47 1 Amministratore Truelite
    address   192.168.234.2:7788;
48 4 Amministratore Truelite
    meta-disk /dev/hda7[0];
49
  }
50
}
51
}}}
52 22 Amministratore Truelite
tenendo conto che su {{{servint1}}} i dati vengono mantenuti sul dispositivo RAID {{{/dev/md3}}}, mentre i metadati sulla partizione {{{/dev/hda7}}}, mentre su {{{servint2}}} i dati sono su {{{/dev/hda5}}} ed i metadati su {{{/dev/hda7}}}.
53 3 Amministratore Truelite
54 28 Amministratore Truelite
Qualora si vogliano utilizzare più dispositivi occorrerà utilizzare altrettante voci di {{{resource}}}; per ciascuna di esse andrà indicato un diverso {{{device}}} (ad esempio {{{/dev/drbd1}}}, {{{/dev/drbd2}}}) ed ovviamente i rispettivi dischi, si abbia poi cura di usare un diverso valore di {{{address}}} (ad esempio si potrà cambiare la porta in qualcosa del tipo {{{192.168.234.2:7788}}}). Inoltre se questi nuovi dispositivi fanno riferimento agli stessi dischi fisici (ad esempio a diverse partizioni) si abbia cura di cambiare il valore della direttiva {{{group}}} nella sezione {{{syncer}}}, poiché la sincronizzazione viene serializzata in ordine ascente di questo valore (e se i dipositivi fanno riferimento agli stessi dischi questo è appunto il comportamento voluto). 
55
56 14 Amministratore Truelite
Una volta completata la configurazione di {{{/etc/drbd.conf}}} su uno dei nodi si abbia cura di copiarlo sull'altro perché la configurazione deve essere identica su entrambe le macchine; dopo di che si potrà caricare il modulo {{{drbd}}} ed attivare il servizio con i comandi:
57 2 Amministratore Truelite
{{{
58 13 Amministratore Truelite
modprobe drbd
59
drbdadm up all
60 3 Amministratore Truelite
}}}
61 14 Amministratore Truelite
ripetendo l'operazione su entrambe le macchine; se tutto è a posto (se si è messo un firewall locale sulle macchine si ricordi di dare accesso alla porta 7788 TCP, o quella che si è specificata nel file di configurazione, più semplicemente si consenta l'accesso dall'interfaccia {{{eth1}}}) si potrà verificare lo stato di funzionamento di DRBD con:
62 3 Amministratore Truelite
{{{
63 2 Amministratore Truelite
servint1:~# cat /proc/drbd
64
version: 0.7.10 (api:77/proto:74)
65
SVN Revision: 1743 build by phil@mescal, 2005-01-31 12:22:07
66
 0: cs:Connected st:Secondary/Secondary ld:Inconsistent
67
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0
68 1 Amministratore Truelite
 1: cs:Unconfigured
69 2 Amministratore Truelite
}}}
70 22 Amministratore Truelite
che ci dice che le due macchine si vedono fra loro, anche se lo stato è inconsistente ed i dischi sono entrambi classificati come secondari. A questo punto si potrà definire quale dei due dischi è il primario, e iniziare la sincronizzazione dei dispositivi, con il comando:
71 2 Amministratore Truelite
{{{
72 14 Amministratore Truelite
drbdadm -- --do-what-I-say primary all
73 2 Amministratore Truelite
}}}
74 9 Amministratore Truelite
che va dato sulla macchina (nel nostro caso {{{servint1}}}) che fa da nodo primario, fatto questo avremo:
75 2 Amministratore Truelite
{{{
76
servint1:~# cat /proc/drbd
77
version: 0.7.10 (api:77/proto:74)
78
SVN Revision: 1743 build by phil@mescal, 2005-01-31 12:22:07
79
 0: cs:SyncSource st:Primary/Secondary ld:Consistent
80
    ns:360356 nr:0 dw:0 dr:361240 al:0 bm:21 lo:135 pe:36 ua:221 ap:0
81 1 Amministratore Truelite
        [>...................] sync'ed:  0.6% (69265/69617)M
82 2 Amministratore Truelite
        finish: 1:44:47 speed: 11,252 (10,288) K/sec
83
 1: cs:Unconfigured
84
}}}
85 14 Amministratore Truelite
86 22 Amministratore Truelite
A questo punto si tratterà solo di attendere il tempo necessario perché venga eseguita la sincronizzazione via rete (la prima volta può essere piuttosto lungo), ed una volta che questa sarà completata avremo sul nodo primario qualcosa del tipo:
87 2 Amministratore Truelite
{{{
88
servint1:~# cat /proc/drbd
89 1 Amministratore Truelite
version: 0.7.10 (api:77/proto:74)
90
SVN Revision: 1743 build by phil@mescal, 2005-01-31 12:22:07
91
 0: cs:Connected st:Primary/Secondary ld:Consistent
92
    ns:71288320 nr:0 dw:0 dr:71288320 al:0 bm:4352 lo:0 pe:0 ua:0 ap:0
93
 1: cs:Unconfigured
94
}}}
95 14 Amministratore Truelite
mentre sul nodo secondario avremo qualcosa del tipo:
96
{{{
97
servint2:~# cat /proc/drbd
98
version: 0.7.10 (api:77/proto:74)
99
SVN Revision: 1743 build by phil@mescal, 2005-01-31 12:22:07
100
 0: cs:Connected st:Secondary/Primary ld:Consistent
101
    ns:3028 nr:0 dw:0 dr:3028 al:0 bm:15 lo:0 pe:0 ua:0 ap:0
102
 1: cs:Unconfigured
103
}}}
104
e come si può notare i ruoli dei dispositivi sono invertiti.
105 1 Amministratore Truelite
106 14 Amministratore Truelite
Adesso potremo verificare il funzionamento del sistema montando (sempre sulla macchina che fa da primario) il dispositivo {{{/dev/drbd0}}}, che conterrà quello che era presente sul dispositivo {{{//dev/md3}}}, (nel nostro caso un filesystem ext3) oppure utilizzare direttamente il dispositivo stesso per creare (qualora non fosse stato fatto in precedenza come nel nostro caso) un nuovo filesystem.
107
108
Una volta completata la sincronizzazione iniziale si potrà attivare o disattivare DRBD direttamente con lo script di avvio {{{/etc/init.d/drbd}}}, se per un qualche motivo la sincronizzazione si dovesse perdere, una volta bloccato il servizio si potrà ripetere la procedura precedente per risincronizzare i dispositivi, avendo ovviamente cura di impostare come primario quello che contiene i dati corretti.
109 9 Amministratore Truelite
110 12 Amministratore Truelite
111 1 Amministratore Truelite
== Configurazione di heartbeat ==
112
113 6 Amministratore Truelite
Una volta completata la configurazione di DRBD si può configurare ''heartbeat''. Il pacchetto da intallare è appunto {{{heartbeat}}}, nel caso di Debian occorre poi copiare i due file di configurazione necessari {{{ha.cf}}} e {{{haresources}}} di cui esiste uno scheletro in forma compressa sotto {{{/usr/src/doc/heartbeat}}}, occorreranno cioè i comandi:
114
{{{
115
cd /usr/share/doc/heartbeat
116
zcat ha.cf.gz > /etc/ha.d/ha.cf
117
zcat haresources.gz > /etc/ha.d/haresources
118 8 Amministratore Truelite
}}}
119
120 21 Amministratore Truelite
A questo punto si dovranno eseguire le impostazioni che ci servono, i file precedenti sono ampiamente commentati, per quanto riguarda {{{ha.cf}}} occorre impostare il tempo oltre il quale in assenza di risposta si considera un nodo morto ({{{deadtime}}}), la modalità con cui i nodi si verificano (nel caso via rete sull'interfaccia dedicata {{{eth1}}}) ed i nomi dei due nodi (anche questi devono corrispondere a quanto restituito dal comando {{{uname -n}}}). Il contenuto di questo file (eliminati i commenti) dovrebbe essere qualcosa del tipo:
121 8 Amministratore Truelite
{{{
122
logfacility     local0
123
keepalive 2
124
deadtime 30
125
bcast  eth1
126
auto_failback on
127
node servint1 servint2
128 1 Amministratore Truelite
}}}
129 10 Amministratore Truelite
130
Per quanto riguarda {{{haresources}}} occorre invece indicare quali sono le risorse che dovranno essere gestite da ''haertbeat'' in caso di ''hot swap''; inizieremo soltanto con il volume condiviso, l'IP pubblico del cluster, ed il montaggio del volume, pertanto avremo qualcosa del tipo:
131
{{{
132
servint1 IPaddr::10.10.0.3/16/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/home::ext3
133 8 Amministratore Truelite
}}}
134
135 21 Amministratore Truelite
Infine per autenticare la comunicazione fra i due demoni occorre impostare una chiave, questa deve essere immessa nel file {{{/etc/ha.d/authkeys}}}; al solito esiste uno scheletro in {{{/usr/src/doc/heartbeat}}} che si può copiare con:
136 8 Amministratore Truelite
{{{
137 7 Amministratore Truelite
cp authkeys /etc/ha.d/
138
chmod 600 /etc/ha.d/authkeys
139 6 Amministratore Truelite
}}}
140 11 Amministratore Truelite
e qui andrà specificata la modalità di autenticazione ed inserita la password, con qualcosa del tipo:
141
{{{
142
auth 2
143 1 Amministratore Truelite
#1 crc
144
#2 sha1 HI!
145
#3 md5 Hello!
146
2 sha1 unabellapasswordlungaecomplicata
147
}}}
148 12 Amministratore Truelite
149 20 Amministratore Truelite
A questo punto si potrà avviare ''heartbeat'' direttamente con lo script di avvio lanciando il comando:
150 12 Amministratore Truelite
{{{
151
/etc/init.d/heartbeat start
152 21 Amministratore Truelite
}}}
153 12 Amministratore Truelite
e verificare con {{{df}}} che è stato montato {{{/dev/drbd0}}} (nel nostro caso su {{{/home}}}) e con {{{ifconfig}}} che è stato aggiunto ad {{{eth0}}} l'IP del cluster (nel nostro caso {{{10.10.0.3}}}).
154
155 1 Amministratore Truelite
156 15 Amministratore Truelite
== Configurazione dei servizi ==
157 19 Amministratore Truelite
158 22 Amministratore Truelite
Per la configurazione di un servizio in HA è necessario che questo sia attivato su un solo nodo del cluster; questo significa che gli script di avvio non devono essere chiamati in fase di boot, ma lanciati direttamente da ''heartbeat''. Dato che l'installazione standard dei servizi di debian li attiva su tutti i ''runlevel'' occorrerà allora disattivarli, pertanto utilizzando DHCP, DNS, NFS, CUPS, LDAP e Samba sarà necessario eseguire una serie di comandi di rimozione con {{{update-rc.d}}}, la cosa può essere realizzata in una soluzione unica con qualcosa del tipo:
159 1 Amministratore Truelite
{{{
160 19 Amministratore Truelite
for i in samba slapd nfs-kernel-server nfs-common dhcp3-server cupsys bind9
161
do
162 20 Amministratore Truelite
  update-rc.d -f $i remove
163 19 Amministratore Truelite
done
164
}}}
165
166
Un secondo requisito della gestione dei servizi è che gli eventuali dati che essi salvano (in genere sotto {{{/var/lib}}}) siano sincronizzati con DRBD cosicché essi possano essere disponibili in caso di passaggio ad un nodo secondario.  Nel nostro caso i servizi attivati sono DHCP, DNS, CUPS, LDAP e Samba e occorrerà identificare le directory dei dati usate da questi servizi per ricrearle sul disco replicato da DRBD. Nel nostro caso questo è stato fatto sul nodo principale con i seguenti comandi:
167
{{{
168 17 Amministratore Truelite
mkdir -p /home/var/lib
169 19 Amministratore Truelite
for i in samba ldap nfs dhcp3 cups
170 17 Amministratore Truelite
do
171
  mv /var/lib/$i /home/var/lib
172 1 Amministratore Truelite
  ln -s /home/var/lib/$i /var/lib/$i
173
done
174 17 Amministratore Truelite
}}}
175
ed analogamente per BIND:
176
{{{
177
mkdir -p /home/var/cache
178
mv /var/cache/bind /home/var/cache
179 1 Amministratore Truelite
ln -s /home/var/cache/bind /var/cache/bind
180
}}}
181 22 Amministratore Truelite
mentre sul nodo secondario dovranno semplicemente essere cancellate le stesse directory sotto {{{/var}}} e creati al loro posto i corrispondenti link simbolici, che resteranno ''dangling'' fintanto che non verrà montato il dispositivo di DRBD.
182 1 Amministratore Truelite
183 24 Amministratore Truelite
Si tenga conto poi che essendo i servizi attivi sul cluster, essi verranno acceduti con l'indirizzo generico di quest'ultimo, per cui occorrerà configurarli in maniera identica su entrambi i nodi, e fare in modo che, dove richiesto, per il nome a dominio compaia sempre quello del cluster e non del singolo nodo e lo stesso per l'indirizzo IP.
184 18 Amministratore Truelite
185 20 Amministratore Truelite
Per la configurazione di LDAP si rammenti di usare gli stessi certificati (e CA) su entrambe le macchine, si abbia anche cura di creare i certificati in modo che il nome corrisponda a quello del servizio dato sul cluster, altrimenti non si riuscirà ad accedervi con SSL. sarà comunque utile inserire nei ''subjectAltName'' anche i valori degli indirizzi IP del cluster e dei singoli nodi.
186 18 Amministratore Truelite
187 23 Amministratore Truelite
Per il DHCP si abbia cura di usare lo stesso {{{dhcpd.conf}}} su entrambe le macchine, e si controlli che {{{/etc/default/dhcp3-server}}} sia identico, e che faccia partire il demone specificando l'utilizzo  dell'interfaccia corretta (che nel nostro caso è {{{eth0}}}) con qualcosa del tipo:
188
{{{
189
INTERFACES="eth0"
190
}}}
191
di abbia cura inoltre di verificare l'esistenza di {{{/var/lib/dhcp3/dhcpd.leases}}}.
192
193 26 Amministratore Truelite
Per quanto riguarda Samba si abbia cura di impostare manualmente il nome del server a quello relativo al cluster, infatti il default è quello di usare il nome della macchina, che nel nostro caso è quello del singolo nodo, inoltre si deve indicare a Samba di usare l'indirizzo di rete del cluster; pertanto si aggiunga alla sezione ''global'' di {{{smb.conf}}} le righe:
194 25 Amministratore Truelite
{{{
195 1 Amministratore Truelite
   netbios name = SERVINT
196 26 Amministratore Truelite
   interfaces = 10.10.0.2
197
   bind interfaces only = yes
198 25 Amministratore Truelite
}}} 
199
200 20 Amministratore Truelite
Una volta finite le configurazioni di tutti i servizi occorrerà modificare {{{haresources}}} cosicché essi possano essere gestiti da ''heartbeat'' in caso di ''hot swap''; questo si fa aggiungendo in coda alla riga mostrata in precedenza i nomi degli script di avvio, pertanto avremo qualcosa del tipo:
201 18 Amministratore Truelite
{{{
202
servint1 IPaddr::10.10.0.3/16/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/home::ext3 slapd samba bind9 dhcp3-server cupsys
203
}}}