Cluster in High Availability e Load Balancing – parte 2

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 = ocfs2

node:
ip_port = 7777
ip_address = 10.0.1.203
number = 1
name = relay-02
cluster = ocfs2

cluster:
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)