Questo tutorial mostra come configurare uno storage ad alta disponibilità con due storage server (Fedora 12) che utilizzano GlusterFS. Ciascun server di archiviazione sarà un mirror dell'altro server di archiviazione e i file verranno replicati automaticamente su entrambi i server di archiviazione. Il sistema client (anche Fedora 12) sarà in grado di accedere allo storage come se fosse un filesystem locale.GlusterFS è un file system cluster in grado di scalare a diversi peta-byte. Aggrega vari blocchi di archiviazione su Infiniband RDMA o interconnessione TCP/IP in un unico file system di rete parallelo di grandi dimensioni. I mattoni di archiviazione possono essere realizzati con qualsiasi hardware di consumo come server x86_64 con RAID SATA-II e HBA Infiniband.
Non garantisco che questo funzionerà per te!
1 Nota preliminare
In questo tutorial utilizzo tre sistemi, due server e un client:
- server1.example.com:indirizzo IP 192.168.0.100 (server)
- server2.example.com:indirizzo IP 192.168.0.101 (server)
- client1.example.com:indirizzo IP 192.168.0.102 (client)
Tutti e tre i sistemi dovrebbero essere in grado di risolvere i nomi host degli altri sistemi. Se ciò non può essere fatto tramite DNS, dovresti modificare il file /etc/hosts in modo che contenga le seguenti righe su tutti e tre i sistemi:
vi /etc/hosts
[...] 192.168.0.100 server1.example.com server1 192.168.0.101 server2.example.com server2 192.168.0.102 client1.example.com client1 [...] |
(È anche possibile utilizzare indirizzi IP invece di nomi host nella configurazione seguente. Se preferisci utilizzare indirizzi IP, non devi preoccuparti se i nomi host possono essere risolti o meno.)
2 Configurazione dei server GlusterFS
server1.example.com/server2.example.com:
Il server GlusterFS è disponibile come pacchetto per Fedora 12, quindi possiamo installarlo come segue:
yum install glusterfs-server
Il comando
glusterfs --version
ora dovrebbe mostrare la versione GlusterFS che hai appena installato (2.0.9 in questo caso):
[[email protected] ~]# glusterfs --versione
glusterfs 2.0.9 integrata il 3 gennaio 2010 00:12:49
Revisione del repository: v2.0.9
Copyright (c) 2006- 2009 Gluster Inc.
GlusterFS viene assolutamente NESSUNA GARANZIA.
Puoi ridistribuire copie di GlusterFS secondo i termini della GNU General Public License.
[[email protetta] ~]#
Quindi creiamo alcune directory:
mkdir /data/
mkdir /data/export
mkdir /data/export-ns
Ora creiamo il file di configurazione del server GlusterFS /etc/glusterfs/glusterfsd.vol (effettuiamo prima un backup del file originale /etc/glusterfs/glusterfsd.vol) che definisce quale directory verrà esportata (/data/export) e quale il client può connettersi (192.168.0.102 =client1.example.com):
cp /etc/glusterfs/glusterfsd.vol /etc/glusterfs/glusterfsd.vol_orig
cat /dev/null> /etc/glusterfs/glusterfsd.vol
vi /etc/glusterfs/glusterfsd.vol
volume posix type storage/posix option directory /data/export end-volume volume locks type features/locks subvolumes posix end-volume volume brick type performance/io-threads option thread-count 8 subvolumes locks end-volume volume server type protocol/server option transport-type tcp option auth.addr.brick.allow 192.168.0.102 subvolumes brick end-volume |
Si noti che è possibile utilizzare caratteri jolly per gli indirizzi IP (come 192.168.*) e che è possibile specificare più indirizzi IP separati da virgola (es. 192.168.0.102,192.168.0.103).
Successivamente creiamo i collegamenti di avvio del sistema per il server GlusterFS e lo avviamo:
chkconfig --levels 35 glusterfsd su
/etc/init.d/glusterfsd start
3 Configurazione del client GlusterFS
client1.example.com:
C'è un pacchetto rpm client GlusterFS per Fedora 12, ma il problema è che otterrai errori come df:`/mnt/glusterfs':Il software ha causato l'interruzione della connessione o df:`/mnt/glusterfs':l'endpoint di trasporto non è connesso quando tenti di accedere alla condivisione GlusterFS. Ecco perché costruiamo il client GlusterFS dai sorgenti per evitare questi problemi.
Prima di creare il client GlusterFS, installiamo i suoi prerequisiti:
yum groupinstall 'Development Tools'
yum groupinstall 'Development Libraries'
yum install libibverbs-devel fuse-devel
Quindi scarichiamo i sorgenti di GlusterFS 2.0.9 (si noti che questa è la stessa versione installata sul server!) e costruiamo GlusterFS come segue:
cd /tmp
wget http://ftp.gluster.com/pub/gluster/glusterfs/2.0/LATEST/glusterfs-2.0.9.tar.gz
tar xvfz glusterfs-2.0.9.tar .gz
cd glusterfs-2.0.9
./configure
Alla fine del comando ./configure, dovresti vedere qualcosa del genere:
[...]
GlusterFS configure sommario
============================
FUSE client :sì
Verbi Infiniband : sì
epoll IO multiplex : sì
Berkeley-DB : sì
libglusterfsclient : sì
argp-standalone : no
[[email protetta] glusterfs-2.0.9]#
make &&make install
ldconfig
Controlla la versione GlusterFS in seguito (dovrebbe essere 2.0.9):
glusterfs --version
[[email protected] glusterfs-2.0.9]# glusterfs --version
glusterfs 2.0.9 costruita il 19 febbraio 2010 19:20:46
Revisione del repository: v2.0.9
Copyright ( c) 2006-2009 Gluster Inc.
GlusterFS viene assolutamente NESSUNA GARANZIA.
È possibile ridistribuire copie di GlusterFS secondo i termini della Licenza GNU General Public .
[[email protected] glusterfs-2.0.9]#
Quindi creiamo le seguenti due directory:
mkdir /mnt/glusterfs
mkdir /etc/glusterfs
Quindi creiamo il file /etc/glusterfs/glusterfs.vol:
vi /etc/glusterfs/glusterfs.vol
volume remote1 type protocol/client option transport-type tcp option remote-host server1.example.com option remote-subvolume brick end-volume volume remote2 type protocol/client option transport-type tcp option remote-host server2.example.com option remote-subvolume brick end-volume volume replicate type cluster/replicate subvolumes remote1 remote2 end-volume volume writebehind type performance/write-behind option window-size 1MB subvolumes replicate end-volume volume cache type performance/io-cache option cache-size 512MB subvolumes writebehind end-volume |
Assicurati di utilizzare i nomi host del server o gli indirizzi IP corretti nelle righe dell'host remoto dell'opzione!
Questo è tutto! Ora possiamo montare il filesystem GlusterFS su /mnt/glusterfs con uno dei seguenti due comandi:
glusterfs -f /etc/glusterfs/glusterfs.vol /mnt/glusterfs
o
mount -t glusterfs /etc/glusterfs/glusterfs.vol /mnt/glusterfs
Ora dovresti vedere la nuova condivisione negli output di...
mount
[[email protected] ~]# mount
/dev/mapper/vg_server3-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts su /dev/pts tipo devpts (rw,gid=5,mode=620)
tmpfs su /dev/shm tipo tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/etc/glusterfs/glusterfs.vol su /mnt/glusterfs digita fuse.glusterfs (rw,allow_other,default_permissions,max_read=131072)
[[email protected] ~]#
... e...
df -h
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_server3-lv_root
29G 2.5G /< 10 tmpfs 248m 0 248m 0%/dev/shm
/dev/sda1 194m 23m 161m 13%/boot
/etc/glusbo glusterfs
[[email protected] ~]#
(server1.example.com e server2.example.com hanno ciascuno 29 GB di spazio per il filesystem GlusterFS, ma poiché i dati sono sottoposti a mirroring, il client non vede 58 GB (2 x 29 GB), ma solo 29 GB.)
Invece di montare manualmente la condivisione GlusterFS sul client, è possibile modificare /etc/fstab in modo che la condivisione venga montata automaticamente all'avvio del client.
Apri /etc/fstab e aggiungi la seguente riga:
vi /etc/fstab
[...] /etc/glusterfs/glusterfs.vol /mnt/glusterfs glusterfs defaults 0 0 |
Per verificare se il tuo /etc/fstab modificato funziona, riavvia il client:
reboot
Dopo il riavvio, dovresti trovare la condivisione negli output di...
df -h
... e...
mount
4 Test
Ora creiamo alcuni file di prova sulla condivisione GlusterFS:
client1.example.com:
tocca /mnt/glusterfs/test1
tocca /mnt/glusterfs/test2
Ora controlliamo la directory /data/export su server1.example.com e server2.example.com. I file test1 e test2 dovrebbero essere presenti su ogni nodo:
server1.example.com/server2.example.com:
ls -l /data/export
[[email protetta] ~]# ls -l /data/export
totale 0
-rw-r--r-- 1 radice radice 0 22-02-2010 16:50 test1
-rw-r--r-- 1 radice radice 0 2010-02-22 16:50 test2
[[email protected] ~]#
Ora chiudiamo server1.example.com e aggiungiamo/eliminiamo alcuni file sulla condivisione GlusterFS su client1.example.com.
server1.example.com:
shutdown -h now
client1.example.com:
touch /mnt/glusterfs/test3
touch /mnt/glusterfs/test4
rm -f /mnt/glusterfs/test2
Le modifiche dovrebbero essere visibili nella directory /data/export su server2.example.com:
server2.example.com:
ls -l /data/export
[[email protetta] ~]# ls -l /data/export
totale 0
-rw-r--r-- 1 radice radice 0 22-02-2010 16:50 test1
-rw-r--r-- 1 radice radice 0 2010-02-22 16:53 test3
-rw-r--r-- 1 radice radice 0 2010-02-22 16:53 test4
[[email protetta] ~]#
Avviamo nuovamente server1.example.com e diamo un'occhiata alla directory /data/export:
server1.example.com:
ls -l /data/export
[[email protetta] ~]# ls -l /data/export
totale 0
-rw-r--r-- 1 radice radice 0 22-02-2010 16:50 test1
-rw-r--r-- 1 radice radice 0 2010-02-22 16:50 test2
[[email protected] ~]#
Come vedi, server1.example.com non ha notato le modifiche avvenute mentre era inattivo. Questo è facile da risolvere, tutto ciò che dobbiamo fare è invocare un comando di lettura sulla condivisione GlusterFS su client1.example.com, ad esempio:
client1.example.com:
ls -l /mnt/glusterfs/
[[email protetta] ~]# ls -l /mnt/glusterfs/
totale 0
-rw-r--r-- 1 radice radice 0 22-02-2010 16:50 test1
-rw-r--r-- 1 radice radice 0 2010-02-22 16:53 test3
-rw-r--r-- 1 radice radice 0 2010-02-22 16:53 test4
[[email protetta] ~]#
Ora dai un'occhiata alla directory /data/export su server1.example.com e dovresti vedere che le modifiche sono state replicate su quel nodo:
server1.example.com:
ls -l /data/export
[[email protetta] ~]# ls -l /data/export
totale 0
-rw-r--r-- 1 radice radice 0 22-02-2010 16:50 test1
-rw-r--r-- 1 radice radice 0 2010-02-22 16:53 test3
-rw-r--r-- 1 radice radice 0 2010-02-22 16:53 test4
[[email protetta] ~]#
5 link
- GlusterFS:http://www.gluster.org/
- Fedora:http://fedoraproject.org/