Questo tutorial mostra come combinare quattro server di archiviazione singoli (con Ubuntu 12.10) in uno storage replicato distribuito con GlusterFS. I nodi 1 e 2 (replica1) e 3 e 4 (replica2) si rispecchieranno a vicenda e la replica1 e la replica2 verranno combinate in un server di archiviazione più grande (distribuzione). Fondamentalmente, questo è RAID10 su rete. Se si perde un server dalla replica1 e uno dalla replica2, il volume distribuito continua a funzionare. Il sistema client (anche Ubuntu 12.10) sarà in grado di accedere allo storage come se fosse un filesystem locale.GlusterFS è un file system 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 cinque sistemi, quattro server e un client:
- server1.example.com:indirizzo IP 192.168.0.100 (server)
- server2.example.com:indirizzo IP 192.168.0.101 (server)
- server3.example.com:indirizzo IP 192.168.0.102 (server)
- server4.example.com:indirizzo IP 192.168.0.103 (server)
- client1.example.com:indirizzo IP 192.168.0.104 (client)
Poiché eseguiremo tutti i passaggi di questo tutorial con i privilegi di root, possiamo anteporre tutti i comandi in questo tutorial con la stringa sudo, oppure diventare root in questo momento digitando
sudo su
Tutti e cinque 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 cinque 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 server3.example.com server3 192.168.0.103 server4.example.com server4 192.168.0.104 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/server3.example.com/server4.example.com:
GlusterFS è disponibile come pacchetto per Ubuntu 12.10, 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.5 in questo caso):
[email protected]:~# glusterfsd --version
glusterfs 3.2.5 costruito il 31 gennaio 2012 07:39:58
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, server2.example.com, server3.example.com e server4.example.com.
Successivamente dobbiamo aggiungere server2.example.com, server3.example.com e server4.example.com al pool di archiviazione attendibile (si noti che sto eseguendo tutti i comandi di configurazione GlusterFS da server1.example.com, ma è possibile come eseguili bene da server2.example.com o server3.example.com o server4.example.com perché la configurazione viene replicata 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
gluster peer probe server3.example.com
gluster peer probe server4.example.com
L'output dovrebbe essere il seguente:
[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 peer gluster
Numero di peer:3
Nome host:server2.example.com
Uuid:600ff607-f7fd-43f6-af8d-419df703376d
Stato:peer in cluster (connesso)
Nome host:server3.example.com
Uuid:1d6a5f3f-c2dd-4727-a050-0431772cc381
Stato:peer in cluster (connesso)
Nome host:server4.example.com
Uuid:0bd9d445-0b5b-4a91-be6f-02b13c41d5d6
Stato:peer in cluster (connesso)
[email protected]:~#
Quindi creiamo la condivisione replicata distribuita denominata testvol con due repliche (si noti che il numero di repliche è la metà del numero di server in questo caso perché vogliamo impostare la replica distribuita) su server1.example.com, server2.example.com , server3.example.com e server4.example.com nella directory /data (questa verrà creata se non esiste):
gluster volume create testvol replica 2 transport tcp server1.example.com:/data server2.example.com:/data server3.example.com:/data server4.example.com:/data
[email protetto]:~# volume gluster create testvol replica 2 transport tcp server1.example.com:/data server2.example.com:/data server3.example.com:/data server4.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/server3.example.com/server4.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 1110 /Glusterfsd
TCP 0 0 localhost.localdom:1019 localhost.localdo:24007 stabilito 1110 /glusterfsd
[e -mail protetto]:~ #
... va tutto bene, ma se non ottieni alcun output...
[email protetta]:~# netstat -tap | grep glusterfsd
[email protetta]:~#
[email protetta]:~# netstat -tap | grep glusterfsd
[email protetta]:~#
[email protetta]:~# netstat -tap | grep glusterfsd
[email protetta]:~#
... riavvia il demone GlusterFS sul server corrispondente (server2.example.com, server3.example.com e server4.example.com in questo caso):
server2.example.com/server3.example.com/server4.example.com:
/etc/init.d/glusterfs-server restart
Quindi controlla l'output di...
netstat -tap | grep glusterfsd
... ancora su questi server - ora dovrebbe apparire così:
[email protetta]:~# netstat -tap | Grep Glusterfsd
TCP 0 0*:24009*:*Ascolta 1152 /Glusterfsd
TCP 0 0 LocalHost.Localdom:1018 LocalHost.Localdo:24007 stabilito 1152 /Glusterfsd
[e -mail protetto]:~ #
[email protetta]:~# netstat -tap | Grep Glusterfsd
TCP 0 0*:24009*:*Ascolta 1311 /Glusterfsd
TCP 0 0 localhost.localdom:1018 localhost.localdo:24007 stabilito 1311 /glusterfsd
[e -mail protetto]:~ #
[email protetta]:~# netstat -tap | Grep Glusterfsd
TCP 0 0*:24009*:*Ascolta 1297 /Glusterfsd
TCP 0 0 LocalHost.Localdom:1019 LocalHost.Localdo:24007 IMBORTANDO 1297 /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:replicato distribuito
Stato:avviato
Numero di mattoni:2 x 2 =4
Tipo di trasporto:tcp
Mattoni:
Brick1:server1.example.com:/data
Brick2:server2.example.com:/data
Brick3:server3.example.com:/data
Brick4:server4.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.104), esegui:
gluster volume set testvol auth.allow 192.168.0.104
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.104,192.168.0.105).
Le informazioni sul volume dovrebbero ora mostrare lo stato aggiornato:
gluster volume info
[email protected]:~# gluster volume info
Nome volume:testvol
Tipo:replicato distribuito
Stato:avviato
Numero di mattoni:2 x 2 =4
Tipo di trasporto:tcp
Mattoni:
Brick1:server1.example.com:/data
Brick2:server2.example.com:/data
Brick3:server3.example.com:/data
Brick4:server4.example. com:/data
Opzioni riconfigurate:
auth.allow:192.168.0.104
[email protetta]:~#
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 utilizzare server2.example.com o server3.example.com o server4.example.com nel comando precedente!)
Ora dovresti vedere la nuova condivisione negli output di...
mount
[email protetta]:~# mount
/dev/mapper/server5-root on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid, nodev)
sysfs su /sys tipo sysfs (rw,noexec,nosuid,nodev)
fusectl su /sys/fs/fuse/connections tipo fusectl (rw)
none su /sys/kernel /debug tipo debugfs (rw)
none su /sys/kernel/security tipo securityfs (rw)
udev su /dev tipo devtmpfs (rw,mode=0755)
devpts su /dev/ pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
/dev/sda1 on /boot type ext2 (rw)
server1.example.com:/testvol on /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/server5-root
29G 1.1G 27G 4% /
ude 238M 4.0K 238m 1%/dev
TMPFS 99M 212K 99m 1%/RUN
Nessuno 5,0m 0 5,0m 0%/Run/Lock
Nessuno 247m 0 247m 0%/RUN/SHM
/dev/sda1 228M 24M 193M 11% /boot
server1.example.com:/testvol
58G 2.1G 53G 4% /mnt/glusterfs:
][email:
] ~#
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 o server3.example.com o server4.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:
touch /mnt/glusterfs/test1
touch /mnt/glusterfs/test2
touch /mnt/glusterfs/test3
touch /mnt/glusterfs/test4
touch /mnt/glusterfs/ test5
tocca /mnt/glusterfs/test6
Ora controlliamo la directory /data su server1.example.com, server2.example.com, server3.example.com e server4.example.com. Noterai che replica1 e replica2 contengono solo una parte dei file/directory che compongono la condivisione GlusterFS sul client, ma i nodi che compongono replica1 (server1 e server2) o replica2 (server3 e server4) contengono lo stesso file (mirroring):
server1.example.com:
ls -l /data
[email protetta]:~# ls -l /data
totale 0
-rw-r--r-- 1 radice radice 0 17-12-2012 15:49 test1
-rw -r--r-- 1 radice radice 0 17-12-2012 15:49 test2
-rw-r--r-- 1 radice radice 0 17-12-2012 15:49 test4
-rw-r--r-- 1 radice radice 0 17-12-2012 15:49 test5
[email protetta]:~#
server2.example.com:
ls -l /data
[email protetta]:~# ls -l /data
totale 0
-rw-r--r-- 1 radice radice 0 17-12-2012 15:49 test1
-rw -r--r-- 1 radice radice 0 17-12-2012 15:49 test2
-rw-r--r-- 1 radice radice 0 17-12-2012 15:49 test4
-rw-r--r-- 1 radice radice 0 17-12-2012 15:49 test5
[email protetta]:~#
server3.example.com:
ls -l /data
[email protetta]:~# ls -l /data
totale 0
-rw-r--r-- 1 radice radice 0 17-12-2012 15:49 test3
-rw -r--r-- 1 radice radice 0 17-12-2012 15:49 test6
[email protetta]:~#
server4.example.com:
ls -l /data
[email protetta]:~# ls -l /data
totale 0
-rw-r--r-- 1 radice radice 0 17-12-2012 15:49 test3
-rw -r--r-- 1 radice radice 0 17-12-2012 15:49 test6
[email protetta]:~#
Ora chiudiamo server1.example.com e server4.example.com e aggiungiamo/eliminiamo alcuni file nella condivisione GlusterFS su client1.example.com.
server1.example.com/server4.example.com:
shutdown -h now
client1.example.com:
rm -f /mnt/glusterfs/test5
rm -f /mnt/glusterfs/test6
Le modifiche dovrebbero essere visibili nella directory /data su server2.example.com e server3.example.com:
server2.example.com:
ls -l /data
[email protetta]:~# ls -l /data
totale 0
-rw-r--r-- 1 radice radice 0 17-12-2012 15:49 test1
-rw -r--r-- 1 radice radice 0 17-12-2012 15:49 test2
-rw-r--r-- 1 radice radice 0 17-12-2012 15:49 test4
[email protetta]:~#
server3.example.com:
ls -l /data
[email protetta]:~# ls -l /data
totale 0
-rw-r--r-- 1 radice radice 0 17-12-2012 15:49 test3
[email protetto]:~#
Avviamo nuovamente server1.example.com e server4.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 17-12-2012 15:49 test1
-rw -r--r-- 1 radice radice 0 17-12-2012 15:49 test2
-rw-r--r-- 1 radice radice 0 17-12-2012 15:49 test4
-rw-r--r-- 1 radice radice 0 17-12-2012 15:49 test5
[email protetta]:~#
server4.example.com:
ls -l /data
[email protetta]:~# ls -l /data
totale 0
-rw-r--r-- 1 radice radice 0 17-12-2012 15:49 test3
-rw -r--r-- 1 radice radice 0 17-12-2012 15:49 test6
[email protetta]:~#
Come puoi vedere, server1.example.com e server4.example.com non hanno notato i cambiamenti avvenuti mentre erano inattivi. 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 17-12-2012 15:49 test1
-rw-r--r-- 1 radice radice 0 17-12-2012 15:49 test2
-rw-r--r-- 1 radice radice 0 17-12-2012 15:49 test3
-rw-r--r-- 1 radice radice 0 17-12-2012 15:49 test4
[email protetta]:~#
Ora dai un'occhiata alla directory /data su server1.example.com e server4.example.com di nuovo e dovresti vedere che le modifiche sono state replicate su questi nodi:
server1.example.com:
ls -l /data
[email protetta]:~# ls -l /data
totale 0
-rw-r--r-- 1 radice radice 0 17-12-2012 15:49 test1
-rw -r--r-- 1 radice radice 0 17-12-2012 15:49 test2
-rw-r--r-- 1 radice radice 0 17-12-2012 15:49 test4
[email protetta]:~#
server4.example.com:
ls -l /data
[email protetta]:~# ls -l /data
totale 0
-rw-r--r-- 1 radice radice 0 17-12-2012 15:49 test3
[email protetto]:~#
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
- Ubuntu:http://www.ubuntu.com/