Cluster di tre server in HA + LB con drbd
Parte 2
Per poter effettivamente utilizzare i dati sincronizzati da drbd su ambo i relay è necessario creare un mount point, creare il file system per le partizioni e montare le partizioni sui mount point.
Purtroppo (o per fortuna) i normali file system (ext2, ext3, ext4, reiserfs eccetera) operano un tipo di locking dei file che non è adatto alle letture e scritture contemporanee. Fortunatamente ci viene incontro egregiamente ocfs2, un tipo di file system creato da Oracle proprio per questo scopo.
OCFS2 is a general-purpose shared-disk cluster file system for Linux capable of providing both high performance and high availability. As it provides local file system semantics, it can be used with almost all applications. Cluster-aware applications can make use of cache-coherent parallel I/Os from multiple nodes to scale out applications easily. Other applications can make use of the file system facilities to fail-over running application in the event of a node failure.
Non ci resta che installarlo e configurarlo.
relay-01/relay02
apt-get install ocfs2-tools
dpkg-reconfigure ocfs2-tools
Durante la riconfigurazione, assolutamente necessaria, si possono lasciare i valori di default proposti dal sistema, con l’unica accortezza di attivare il sistema al boot (prima domanda: rispondere “yes”) e che i valori inseriti siano identici su ambo i relay.
Ora dobbiamo istruire il cluster ocfs2 e indicargli chi sono i nodi. Per farlo ci basta creare il file /etc/ocfs2/cluster.conf
relay-01/relay02
node:
ip_port = 7777
ip_address = 10.0.1.129
number = 0
name = relay-01
cluster = ocfs2node:
ip_port = 7777
ip_address = 10.0.1.203
number = 1
name = relay-02
cluster = ocfs2cluster:
node_count = 2
name = ocfs2
Istruito il cluster, dobbiamo creare il file system sulle partizioni
relay-01/relay02
mkfs -t ocfs2 -N 2 -L ocfs2_drbd0 /dev/drbd0
mkdir /data
mount -t ocfs2 /dev/drbd0 /data
Se tutto si è svolto senza errori, eseguendo “df -h” dovremmo vedere quanto segue
File system Dim. Usati Disp. Uso% Montato su
/dev/mapper/relay–01-root 1,7G 1,4G 246M 86% /
none 636M 204K 636M 1% /dev
none 641M 0 641M 0% /dev/shm
none 641M 88K 641M 1% /var/run
none 641M 0 641M 0% /var/lock
none 641M 0 641M 0% /lib/init/rw
/dev/sda1 228M 17M 199M 8% /boot
/dev/drbd0 3,8G 266M 3,5G 7% /data
Effettuiamo una serie di verifiche di buon funzionamento su ambo i relay.
service o2cb status
Dovrebbe restituirci un output simile a questo
Driver for “configfs”: Loaded
Filesystem “configfs”: Mounted
Stack glue driver: Loaded
Stack plugin “o2cb”: Loaded
Driver for “ocfs2_dlmfs”: Loaded
Filesystem “ocfs2_dlmfs”: Mounted
Checking O2CB cluster ocfs2: Online
Heartbeat dead threshold = 31
Network idle timeout: 30000
Network keepalive delay: 2000
Network reconnect delay: 2000
Checking O2CB heartbeat: Active
Proviamo a creare una directory (o un file) su uno dei nodi e vediamo cosa succede.
relay-01
ls -l /data
Dovrebbe dare un output di questo tipo
drwxr-xr-x 2 root root 3896 2011-11-03 03:18 lost+found
Ora, sempre sul relay-01, eseguiamo
mkdir /data/test
relay-02
ls -l /data
L’output deve essere di questo tipo
drwxr-xr-x 2 root root 3896 2011-11-03 03:18 lost+found
drwxr-xr-x 2 root root 3896 2011-11-03 03:20 test
Eseguiamo la controprova sul primo relay
ls -l /data
drwxr-xr-x 2 root root 3896 2011-11-03 03:18 lost+found
drwxr-xr-x 2 root root 3896 2011-11-03 03:20 test
Tutto funziona a dovere. Non ci resta quindi che rendere permanente il mount point.
Modifichiamo su entrambi i relay il file /etc/fstab aggiungendo in coda la seguente riga
/dev/drbd0 /data ocfs2 _netdev,datavolume,nointr 0 0
Al prossimo riavvio, /data sarà montato in automatico e potremo quindi lavorare indifferentemente sul relay-01 o sul relay-02.
Il vantaggio di poter lavorare sull’uno o sull’altro in contemporanea è che possiamo per esempio installare apache sui due relay e configurare le homedir dei siti su /data (es /data/www.sito1/ /data/www.sito2/ eccetera) e quindi, grazie al balancer che andremo a configurare tra poco, ambo i server apache utilizzeranno gli stessi dati fornendoci di fatto un cluster in High Availability e un Load Balancer utilizzando solo tre server.
Vediamo cosa è possbile condividere e cosa invece è meglio non condividere
Cluster in High Availability e Load Balancing – parte 3
Introduzione: Cluster in High Availability e Load Balancing (concetti di base)
Parte uno: Cluster in High Availability e Load Balancing – parte 1 (DRBD)
Parte due: Cluster in High Availability e Load Balancing – parte 2 (ocfs2)
Parte tre: Cluster in High Availability e Load Balancing – parte 3 (cosa e come condividere)