SetupClusterHA » Cronologia » Versione 9
Amministratore Truelite, 22-06-2006 19:12
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 | 9 | 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 dello stesso; questo è importante anche per evitare errori nella rilevazione di un crollo (che viene fatta tramite una connessione di rete) qualora ad andare giù fosse lo switch e non un singolo nodo. |
9 | 1 | Amministratore Truelite | |
10 | 6 | 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 dalla macchina che fa da nodo primario) 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 | 6 | Amministratore Truelite | Per poter utilizzare la sincornizzazione con DRDB occorre predisporre i dischi delle due macchine riservando lo spazio opportuno. Per questo occorre definire almeno due partizioni (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 andrebbe ridimensionato) su ciascuna macchina. La prima partizione sarà quella grande su cui si mtengono 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 | 5 | Amministratore Truelite | Il primo passo consiste nell'installazione dei pacchetti necessari, questi nel caso di Debian Sarge sono due, il 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 corrrente e installarlo. |
18 | |||
19 | 9 | 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}}}),c he nel nostro caso saranno {{{servint1}}} e {{{servint2}}}. |
20 | Il suo 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 | disk { |
||
28 | on-io-error detach; |
||
29 | } |
||
30 | net { |
||
31 | } |
||
32 | syncer { |
||
33 | rate 10M; |
||
34 | group 1; |
||
35 | al-extents 257; |
||
36 | } |
||
37 | on servint1 { |
||
38 | device /dev/drbd0; |
||
39 | disk /dev/md3; |
||
40 | address 192.168.234.1:7788; |
||
41 | meta-disk /dev/hda7[0]; |
||
42 | } |
||
43 | on servint2 { |
||
44 | device /dev/drbd0; |
||
45 | disk /dev/hda5; |
||
46 | 1 | Amministratore Truelite | address 192.168.234.2:7788; |
47 | 4 | Amministratore Truelite | meta-disk /dev/hda7[0]; |
48 | } |
||
49 | } |
||
50 | }}} |
||
51 | 9 | Amministratore Truelite | posto che su {{{servint1}}} i dati vengano mantenuti sul dispositivo RAID {{{/dev/md3}}}, mentre i metadati sono sulla partizione {{{/dev/hda7}}}, su {{{servint2}}} invece i dati sono su {{{/dev/hda5}}} ed i metadati su {{{/dev/hda7}}}. |
52 | 3 | Amministratore Truelite | |
53 | 9 | 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 il comando: |
54 | 2 | Amministratore Truelite | {{{ |
55 | 3 | Amministratore Truelite | drdbadm up all |
56 | }}} |
||
57 | 9 | Amministratore Truelite | ripetendo l'operazione su entrambe le macchine; se tutto è a posto si avrà come contenuto dell'interfaccia di controllo di DRBD qualcosa del tipo: |
58 | 3 | Amministratore Truelite | {{{ |
59 | 2 | Amministratore Truelite | servint1:~# cat /proc/drbd |
60 | version: 0.7.10 (api:77/proto:74) |
||
61 | SVN Revision: 1743 build by phil@mescal, 2005-01-31 12:22:07 |
||
62 | 0: cs:Connected st:Secondary/Secondary ld:Inconsistent |
||
63 | ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 |
||
64 | 1 | Amministratore Truelite | 1: cs:Unconfigured |
65 | 2 | Amministratore Truelite | }}} |
66 | 9 | 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 è il primario, e iniziare la sincronizzazione con il comando: |
67 | 2 | Amministratore Truelite | {{{ |
68 | drbdadm -- --do-what-I-say primary all |
||
69 | }}} |
||
70 | 9 | Amministratore Truelite | che va dato sulla macchina (nel nostro caso {{{servint1}}}) che fa da nodo primario, fatto questo avremo: |
71 | 2 | Amministratore Truelite | {{{ |
72 | servint1:~# cat /proc/drbd |
||
73 | version: 0.7.10 (api:77/proto:74) |
||
74 | SVN Revision: 1743 build by phil@mescal, 2005-01-31 12:22:07 |
||
75 | 0: cs:SyncSource st:Primary/Secondary ld:Consistent |
||
76 | ns:360356 nr:0 dw:0 dr:361240 al:0 bm:21 lo:135 pe:36 ua:221 ap:0 |
||
77 | [>...................] sync'ed: 0.6% (69265/69617)M |
||
78 | finish: 1:44:47 speed: 11,252 (10,288) K/sec |
||
79 | 1: cs:Unconfigured |
||
80 | 1 | Amministratore Truelite | }}} |
81 | 9 | Amministratore Truelite | a questo punto si tratterà solo di attendere il tempo necessario perché venga eseguita la sincornizzazione via rete, ed una volta che questa sarà completata avremo: |
82 | 2 | Amministratore Truelite | {{{ |
83 | servint1:~# cat /proc/drbd |
||
84 | version: 0.7.10 (api:77/proto:74) |
||
85 | SVN Revision: 1743 build by phil@mescal, 2005-01-31 12:22:07 |
||
86 | 0: cs:Connected st:Primary/Secondary ld:Consistent |
||
87 | 1 | Amministratore Truelite | ns:71288320 nr:0 dw:0 dr:71288320 al:0 bm:4352 lo:0 pe:0 ua:0 ap:0 |
88 | 1: cs:Unconfigured |
||
89 | }}} |
||
90 | 9 | Amministratore Truelite | e potremo verificare il funzionamento del sistema montando (sempre sulla macchina che fa da primario) il dispositivo {{{/dev/drdb0}}} (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. |
91 | |||
92 | 1 | Amministratore Truelite | |
93 | == Configurazione di heartbeat == |
||
94 | |||
95 | 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: |
96 | {{{ |
||
97 | cd /usr/share/doc/heartbeat |
||
98 | zcat ha.cf.gz > /etc/ha.d/ha.cf |
||
99 | zcat haresources.gz > /etc/ha.d/haresources |
||
100 | 8 | Amministratore Truelite | }}} |
101 | |||
102 | 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}}}) e i nomi dei due nodi (anche questi devono corrispondere a quanto restituito dal comando {{{uname -n}}}). |
||
103 | {{{ |
||
104 | logfacility local0 |
||
105 | keepalive 2 |
||
106 | deadtime 30 |
||
107 | bcast eth1 |
||
108 | auto_failback on |
||
109 | node servint1 servint2 |
||
110 | }}} |
||
111 | |||
112 | |||
113 | 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 che si può copiare con: |
||
114 | {{{ |
||
115 | 7 | Amministratore Truelite | cp authkeys /etc/ha.d/ |
116 | chmod 600 /etc/ha.d/authkeys |
||
117 | 6 | Amministratore Truelite | }}} |