Questo tutorial mostra come configurare uno storage ad alta disponibilità con due storage server (Debian Wheezy) che usano 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 Debian Wheezy) sarà in grado di accedere allo storage come se fosse un filesystem locale.GlusterFS è un filesystem in 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 appaia come segue su tutti e tre i sistemi:
vi /etc/hosts
127.0.0.1 localhost.localdomain localhost 192.168.0.100 server1.example.com server1 192.168.0.101 server2.example.com server2 192.168.0.102 client1.example.com client1 # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts |
(È 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:
GlusterFS è disponibile come pacchetto per Debian Wheezy, quindi possiamo installarlo come segue:
apt-get install glusterfs-server
Il comando
glusterfsd --version
ora dovrebbe mostrare la versione GlusterFS che hai appena installato (3.2.7 in questo caso):
[email protected]:~# glusterfsd --version
glusterfs 3.2.7 costruito il 12 novembre 2012 19:30:08
Revisione del repository:git://git.gluster.com/glusterfs.git
Copyright (c) 2006-2011 Gluster Inc.
GlusterFS viene fornito con ASSOLUTAMENTE NESSUNA GARANZIA.
È possibile ridistribuire copie di GlusterFS secondo i termini del GNU General Public License.
[email protected]:~#
Se utilizzi un firewall, assicurati che le porte TCP 111, 24007, 24008, 24009-(24009 + numero di mattoni su tutti i volumi) siano aperte su server1.example.com e server2.example.com.
Quindi dobbiamo aggiungere server2.example.com al pool di archiviazione attendibile (si noti che sto eseguendo tutti i comandi di configurazione GlusterFS da server1.example.com, ma puoi anche eseguirli da server2.example.com perché la configurazione è replicato tra i nodi GlusterFS - assicurati solo di utilizzare i nomi host o gli indirizzi IP corretti):
server1.example.com:
Su server1.example.com, esegui
gluster peer probe server2.example.com
[email protetta]:~# gluster peer probe server2.example.com
Esame riuscito
[email protetto]:~#
Lo stato del pool di archiviazione attendibile dovrebbe ora essere simile a questo:
gluster peer status
[email protetta]:~# stato del peer gluster
Numero di peer:1
Nome host:server2.example.com
Uuid:d19cb707-7b23-4d11-8e9c-183cd0a18d96
Stato:peer in cluster (connesso)
[email protected]:~#
Quindi creiamo la condivisione denominata testvol con due repliche (si noti che il numero di repliche è uguale al numero di server in questo caso perché vogliamo impostare il mirroring) su server1.example.com e server2.example.com nel /data directory (verrà creata se non esiste):
gluster volume create testvol replica 2 transport tcp server1.example.com:/data server2.example.com:/data
[email protected]:~# gluster volume create testvol replica 2 transport tcp server1.example.com:/data server2.example.com:/data
La creazione del volume testvol è riuscita. Avvia il volume per accedere ai dati.
[email protected]:~#
Avvia il volume:
gluster volume start testvol
È possibile che il comando precedente ti dica che l'azione non è andata a buon fine:
[email protected]:~# gluster volume start testvol
L'avvio di testvol volume non è riuscito
[email protected]:~#
In questo caso dovresti controllare l'output di...
server1.example.com/server2.example.com:
netstat -tap | grep glusterfsd
su entrambi i server.
Se ottieni un output in questo modo...
[email protetta]:~# netstat -tap | Grep Glusterfsd
TCP 0 0*:24009*:*Ascolta 1548 /Glusterfsd
TCP 0 0 localhost.localdom:1019 localhost.localdo:24007 stabilito 1548 /glusterfsd
[e -mail protetto]:~ #
... va tutto bene, ma se non ottieni alcun output...
[email protetta]:~# netstat -tap | grep glusterfsd
[email protetta]:~#
... riavvia il demone GlusterFS sul server corrispondente (server2.example.com in questo caso):
server2.example.com:
/etc/init.d/glusterfs-server restart
Quindi controlla l'output di...
netstat -tap | grep glusterfsd
... di nuovo su quel server - ora dovrebbe apparire così:
[email protetta]:~# netstat -tap | Grep Glusterfsd
TCP 0 0*:24010*:*Ascolta 1458 /Glusterfsd
TCP 0 0 localhost.localdom:1021 localhost.localdo:24007 stabilito 1458 /glusterfsd
[e -mail protetto]:~ #
Ora torniamo a server1.example.com:
server1.example.com:
Puoi controllare lo stato del volume con il comando
gluster volume info
[email protected]:~# gluster volume info
Nome volume:testvol
Tipo:replica
Stato:avviato
Numero di mattoni:2
Tipo di trasporto:tcp
Mattoni:
Brick1:server1. example.com:/data
Brick2:server2.example.com:/data
[email protetta]:~#
Per impostazione predefinita, tutti i client possono connettersi al volume. Se desideri concedere l'accesso solo a client1.example.com (=192.168.0.102), esegui:
gluster volume set testvol auth.allow 192.168.0.102
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).
Le informazioni sul volume dovrebbero ora mostrare lo stato aggiornato:
gluster volume info
[email protected]:~# gluster volume info
Nome volume:testvol
Tipo:replica
Stato:avviato
Numero di mattoni:2
Tipo di trasporto:tcp
Mattoni:
Brick1:server1. example.com:/data
Brick2:server2.example.com:/data
Opzioni riconfigurate:
auth.allow:192.168.0.102
[email protected]:~#
3 Configurazione del client GlusterFS
client1.example.com:
Sul client, possiamo installare il client GlusterFS come segue:
apt-get install glusterfs-client
Quindi creiamo la seguente directory:
mkdir /mnt/glusterfs
Questo è tutto! Ora possiamo montare il filesystem GlusterFS su /mnt/glusterfs con il seguente comando:
mount.glusterfs server1.example.com:/testvol /mnt/glusterfs
(Invece di server1.example.com puoi anche usare server2.example.com nel comando sopra!)
Ora dovresti vedere la nuova condivisione negli output di...
mount
[email protetta]:~# mount
sysfs su /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev su /dev tipo devtmpfs (rw,relatime,size=10240k,nr_inodes=126813,mode=755)
devpts su /dev/pts tipo devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=102704k,mode=755)
/dev/mapper/server1-root on / digita ext4 (rw,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered)
tmpfs on /run/lock digita tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k )
tmpfs su /run/shm tipo tmpfs (rw,nosuid,nodev,noexec,relatime,size=205400k)
/dev/sda1 su /boot tipo ext2 (rw,relatime,errors=continue)
rpc_pipefs su /var/lib/nfs/rpc_pipefs tipo rpc_pipefs (rw,relatime)
server1.example.com:/testvol su /mnt/glusterfs tipo fuse.glusterfs (rw,relatime,user_id=0 ,group_id=0,default_permissions,allow_other,max_read=131072)
fusectl su /sys/fs/fu se/connections type fusectl (rw,relatime)
[email protected]:~#
... e...
df -h
[Email Protected]:~#df -h
Dimensione del filesystem utilizzato Disponibile Uso%montato su
rootfs 29g 1,2g 26g 5% /
UDEV 10m 0 10m 0% /dev
TMPFS 101M 240K 101M 1%/run
/dev/mapper/server1-root 29g 1,2g 26g 5%/
tmpfs 5,0m 0 5,0m 0%/run/blocco
tmpfs 201m 0 201M 0% /run/shm
/dev/sda1 228M 18M 199M 9% /boot
server1.example.com:/testvol 29G 1.2G 26G 5% /mnt/glusterfs
[email protetto]:~#
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
[...] server1.example.com:/testvol /mnt/glusterfs glusterfs defaults,_netdev 0 0 |
(Di nuovo, invece di server1.example.com puoi anche usare server2.example.com!)
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 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
[email protetta]:~# ls -l /data
totale 0
-rw-r--r-- 1 radice radice 0 30 settembre 17:53 test1
-rw-r- -r-- 1 radice radice 0 30 settembre 17:53 test2
[email protetta]:~#
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 su server2.example.com:
server2.example.com:
ls -l /data
[email protetta]:~# ls -l /data
totale 8
-rw-r--r-- 1 radice radice 0 30 settembre 17:53 test1
-rw-r- -r-- 1 radice radice 0 30 settembre 17:54 test3
-rw-r--r-- 1 radice radice 0 30 settembre 17:54 test4
[email protetta]:~#
Avviamo nuovamente server1.example.com e diamo un'occhiata alla directory /data:
server1.example.com:
ls -l /data
[email protetta]:~# ls -l /data
totale 0
-rw-r--r-- 1 radice radice 0 30 settembre 17:53 test1
-rw-r- -r-- 1 radice radice 0 30 settembre 17:53 test2
[email protetta]:~#
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 8
-rw-r--r-- 1 radice radice 0 30 settembre 17:53 test1
-rw -r--r-- 1 radice radice 0 30 settembre 17:54 test3
-rw-r--r-- 1 radice radice 0 30 settembre 17:54 test4
[email protetta]:~ #
Ora dai un'occhiata alla directory /data su server1.example.com e dovresti vedere che le modifiche sono state replicate su quel nodo:
server1.example.com:
ls -l /data
[email protetta]:~# ls -l /data
totale 0
-rw-r--r-- 1 radice radice 0 30 settembre 17:53 test1
-rw-r- -r-- 1 radice radice 0 30 settembre 17:54 test3
-rw-r--r-- 1 radice radice 0 30 settembre 17:54 test4
[email protetta]:~#
5 link
- GlusterFS:http://www.gluster.org/
- Documentazione di GlusterFS 3.2:http://download.gluster.com/pub/gluster/glusterfs/3.2/Documentation/AG/html/index.html
- Debian:http://www.debian.org/