Premier Training & Business Partner Red Hat

GlusterFS: Uno Storage Scalabile e Distribuito

Michele Milaneschi
Ti piacerebbe diventare anche tu uno di noi e
pubblicare i tuoi articoli nel blog degli RHCE italiani?

glusterFS

In questo articolo parleremo di GlusterFS: Cos’è GlusterFS???

GlusterFS è un file system open source distribuito e scalabile che permette la memorizzazione di risorse su dispositivi di archiviazione in una rete.

La differenza rispetto ad un file system locale è che invece di avere un dato che risiede in un dispositivo locale abbiamo un meccanismo client-server.

GlusterFS gestisce fino a diversi petabyte di dati, gestisce migliaia di client e li rende accessibili su Infiniband RDMA (remote direct memory access, fibra ottica) o connessioni TCP/IP.

Le risorse che successivamente vengono messe in condivisione possono essere montate dai client attraverso i protocolli CIFS, NFS oppure attraverso il client nativo Gluster.

Inoltre GlusterFS supporta la replica geografica ossia la replica dei dati di un Volume su un Server dislocato in un area geografica diversa da quella dove sono presenti gli altri nodi.

Iniziamo a prendere confidenza con alcune terminologie di GlusterFS:

  • Volume: Identifica la condivisione effettiva che viene messa a disposizione
  • Brick: Identifica il file system locale di un server su cui opera GlusterFS
  • Translator: Identifica delle componenti ( librerie ) che estendono le funzionalità del file system
  • Server: Identifica la macchina o le macchine ( reali o virtuali ) dove risiedono i dati
  • Client: Identifica la macchina che monta il volume

La logica quindi è la seguente:

Installiamo GlusterFS su ogni server che fa parte del pool di storage del cluster, definiamo i blocchi ( bricks ) da esportare ( directory ) andando cosi a creare la condivisione effettiva chiamata Volume.

Successivamente su ogni Client interessato installiamo allo stesso modo GlusterFS, e tramite i protocolli citati prima ( NFS, CIFS, GlusterFS Client ) andiamo a montare il cluster rendendo disponibile la condivisione ( Volume ).

Vediamo adesso le diverse TIPOLOGIE DI VOLUME ossia come i dati possono essere organizzati:

Distributed: Definisce un Volume Distribuito dove i file vengono distribuiti in maniera random tra i vari brick del Volume che compongono il Cluster.

Questo comporta maggior scalabilità ma molta meno ridondanza:

Infatti nel caso in cui ci fosse un Volume cosi configurato, un guasto del Server ( Brick ) comporta la perdita dei dati in esso contenuti.

gluster1

Replicated: Definisce un Volume Replicato dove i file vengono replicati tra i Brick del Volume che compongono il Cluster.

Questo comporta una riduzione dello spazio disponibile per lo Storage ma una maggior ridondanza e tale configurazione è consigliabile per avere un Elevata Affidabilità e un Elevata Disponibilità.

Nel caso in cui ci fosse un Volume cosi configurato, un guasto del Server ( Brick ) NON comporterebbe la perdita dei dati visto che ne abbiamo una replica a disposizione.

Le repliche dei dati è consigliabile averle in brick separati cioè che non si trovino sulla stessa macchina.

gluster2

Striped: Definisce un Volume Striped dove i file vengono memorizzati in blocchi nei brick del Volume che compongono il Cluster.

Questo comporta maggiori prestazioni in lettura e scrittura su file di grandi dimensioni e maggior spazio a disposizione ma una minor ridondanza.
Nel caso in cui ci fosse un Volume cosi configurato, un guasto del Server ( Brick ) comporta la perdita dei dati in esso contenuti

gluster3

Distribuited Striped: Definisce un Volume Distribuito e Striped dove il Volume memorizza i file in blocchi tra 2 o più nodi del Cluster.

Nel caso in cui ci fosse un Volume cosi configurato, un guasto del Server ( Brick ) comporta la perdita dei dati in esso contenuti.

gluster4

Distribuited Replicated: Definisce un Volume Distribuito Replicato dove il Volume distribuisce e replica i file tra i Brick del Cluster.

Questo comporta la combinazione dei pregi delle singole soluzioni distributedd e Replicated.

Nel caso in cui ci fosse un Volume cosi configurato, un guasto del Server ( Brick ) NON comporterebbe la perdita dei dati visto che ne abbiamo una replica a disposizione e il Volume resterebbe sempre accessibile

gluster5

Striped Replicated: Definisce un Volume Striped Replicato dove il Volume fa lo Stripe dei file e li replica tra i Brick del Cluster.

Si combinano i pregi dello Stripe ossia maggiori prestazioni in lettura e scrittura utile per esempio su file di grandi dimensioni con i pregi della Replicazione sui Brick del Cluster per avere cosi prestazioni e ridondanza.

Nel caso in cui ci fosse un Volume cosi configurato, un guasto del Server ( Brick ) NON comporta la perdita dei dati in esso contenuti

gluster6

Fatta questa introduzione andiamo a mettere mano a quanto abbiamo detto.

Iniziamo con l’installazione di GlusterFS sui nodi del pool di storage che in questo caso sono 2:

192.168.0.34 pc1.talla.it
192.168.0.100 pc2.talla.it

Prepariamo l’installazione sui 2 host tramite EPEL dove abbiamo la distribuzione CentOS:

cd /etc/yum.repos.d 
wget http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-epel.repo

gluster

Procediamo alla sua installazione tramite yum:

yum install glusterfs-server

gluster7Avviamo il servizio su entrambi gli host:

service glusterfs start

Aggiungiamo 192.168.0.100 al pool dei server per la consivisione ( l’host da dove lanciamo i comandi non ha bisogno di essere aggiunto ):

gluster peer probe 192.168.0.100

gluster8

Come vediamo dai Log l’aggiunta dell’host ha avuto successo:

gluster9Lo possiamo verificare anche tramite il seguente comando dandolo su entrambi gli host:

gluster peer status

gluster10Fatto ciò vediamo come procedere alla creazione di un Volume secondo le diverse tipologie che abbiamo descritto sopra ( distributedd, Replicated,… ).

  • Creeremo sul nodo 192.168.0.34 la directory /dati1
  • Creeremo sul nodo 192.168.0.100 la directory /dati2
  • Entrambi saranno i nostri Brick che renderemo disponibili.

gluster11

CREAZIONE VOLUME DISTRIBUTED

La creazione di un Volume distributed viene fatta tramite il seguente comando:

gluster volume create NEW-VOLNAME [transport [tcp | rdma | tcp,rdma]] NEW-BRICK…

Nel nostro caso sarà:

gluster volume create volume-dati transport tcp 192.168.0.34:/dati1 192.168.0.100:/dati2

gluster12

Facciamo avviare il Volume:

gluster volume start volume-dati

gluster13

Andiamo a vedere lo stato del Volume:

gluster volume info volume-dati

gluster14

A questo punto la risorsa è pronta per essere montata e resa condivisa.

  • Monteremo la risorsa nella directory /volume-condiviso
  • Abbiamo deciso di utilizzare il client gluster nativo:
cd
mkdir volume-condiviso
mount.glusterfs 192.168.0.100:/volume-dati volume-condiviso

gluster15

Abbiamo creato dei file nella cartella /tmp:

filegluster

Adesso proviamo a copiarli nel Volume di GlusterFS in /root/volume-condiviso tramite il seguente comando:

cd /tmp
cp -Rf * /root/volume-condiviso

filegluster2E come vediamo i file sono andati in maniera random ( seguendo un certo algoritmo ) nei Brick /dati1 e /dati2 degli host 192.168.0.34 e 192.168.0.100

filegluster3Nel momento in cui uno dei 2 Brick si guasta ( abbiamo spento uno dei 2 host ) avremo una perdita dei dati del Brick in questione visto che non c’è nessun tipo di ridondanza.

CREAZIONE VOLUME REPLICATED

La creazione di un Volume Replicated viene fatta tramite il seguente comando:

gluster volume create NEW-VOLNAME [replica count] [transport [tcp| rdma | tcp,rdma ]] NEW-BRICK

Nel nostro caso sarà:

gluster volume create volume-dati replica 2 transport tcp 192.168.0.34:/dati1 192.168.0.100:/dati2

Avviamo il Volume:

gluster volume start volume-dati

gluster16

Verifichiamo il Volume:

gluster volume info volume-dati

gluster17

Montiamo la risorsa in /root/volume-condiviso:

cd
mount.glusterfs 192.168.0.100:/volume-dati volume-condiviso

E come abbiamo fatto prima copiamo i file creati nella directory /tmp in /root/volume-condiviso:

cd /tmp
cp -Rf * /root/volume-condiviso

E come vediamo sui 2 Brick i file vengono replicati.

gluster18

Nel momento in cui uno dei 2 Brick si guasta ( abbiamo spento uno dei 2 host ) non avremo più accesso al Volume ma sul Brick dell’host rimasto up avremo la ridondanza dei dati.

gluster19

CREAZIONE VOLUME STRIPED

La creazione di un Volume Striped viene fatta tramite il seguente comando:

gluster volume create NEW-VOLNAME [stripe count] [transport [tcp | rdma | tcp,rdma]] NEW-BRICK

Nel nostro caso sarà:

gluster volume create volume-dati stripe 2 transport tcp 192.168.0.34:/dati1 192.168.0.100:/dati2

Avviamo il Volume:

gluster volume start volume-dati

gluster20

Verifichiamo il Volume:

gluster volume info volume-dati

gluster21Senza stare a riproporlo si fa il procedimento di prima della copia dei file in /tmp su /root/volume-condiviso.
Vedrò apparentemente i miei file come se fosse un Volume Replicato ma all’interno dei Brick i file sono memorizzati in blocchi ossia in tanti pezzi.

In questo screenshot dove abbiamo fatto una copia di file con grandezza diversa possiamo vedere come gli stessi file sono distribuiti sui 2 Brick ma con delle differenze per quanto riguarda la dimensione ( smb.conf, file2, file1, file3 ), si parlava appunto di blocchi di file.
Ovviamente nel momento in cui un Brick si guasta non avremo più accesso al Volume e il recupero dei file nel Brick dell’Host UP può risultare incompleto.

gluster22

CREAZIONE VOLUME DISTRIBUTED REPLICATED

La creazione di un Volume distributed Replicated viene fatta tramite il seguente comando:

gluster volume create NEW-VOLNAME [replica count] [transport [tcp | rdma | tcp,rdma]] NEW-BRICK

Un esempio potrebbe essere il seguente:

gluster volume create volume-dato replica 2 transport tcp 192.168.0.34:/dati/dati70 192.168.0.100:/dati/dati20 192.168.0.34:/dati/dati80 192.168.0.100:/dati/dati40

gluster28

Si ricorda che il numero di Brick deve essere multiplo del numero di repliche.

CREAZIONE VOLUME DISTRIBUTED STRIPED

La creazione di un Volume distributed Striped viene fatta tramite il seguente comando:

gluster volume create NEW-VOLNAME [stripe count] [transport [tcp | rdma| tcp,rdma]] NEW-BRICK

Un esempio potrebbe essere il seguente:

gluster volume create volume-dati stripe 3 transport tcp 192.168.0.34:/dati/dati1 192.168.0.34:/dati/dati2 192.168.0.34:/dati/dati3

gluster29

Si ricorda che il numero di Brick deve essere multiplo del numero di stripe.

CREAZIONE VOLUME STRIPED REPLICATED

La creazione di un Volume Striped Replicate viene fatta tramite il seguente comando:

gluster volume create NEW-VOLNAME [stripe count] [replica count] [transport [tcp | rdma | tcp,rdma]] NEW-BRICK

Un esempio potrebbe essere il seguente:

gluster volume create dati-gruppo stripe 2 replica 2 transport tcp 192.168.0.34:/dati/dati-gruppo1 192.168.0.100:/dati/dati-gruppo3 192.168.0.34:/dati/dati-gruppo2 192.168.0.100:/dati/dati-gruppo4

gluster30

Si ricorda che il numero di Brick deve essere multiplo del numero di repliche e del numero di stripe.

Detto questo andiamo a vedere la GESTIONE DEI VOLUMI:

Espandere un volume ( Ossia Aggiungere uno o piu Brick al Volume che abbiamo in condivisione ):

gluster volume add-brick NOMEVOLUME NEW-BRICK

Vogliamo Aggiungere il Brick /dati4 del Server 192.168.0.101 al Volume chiamato volume-dati:

gluster volume add-brick volume-dati 192.168.0.101:/dati4

Vogliamo Ridurre un volume ( Ossia Rimuovere uno o piu Brick al Volume che abbiamo in condivisione ):

gluster volume remove-brick NOMEVOLUME BRICK

Vogliamo Rimuovere i Brick /dati6 e /dati7 dei Server 192.168.0.34 e 192.168.0.100 sul Volume chiamato volume-prova

gluster volume remove-brick volume-prova 192.168.0.34:/dati6 192.168.0.100:/dati7

gluster25gluster26

Vogliamo Riequilibrare i dati tra i Server su uno dei nodi in questione.

Il comando da dare è il seguente:

gluster volume rebalance NOMEVOLUME start

gluster27

Per vedere il suo stato utilizziamo l’opzione status

gluster volume rebalance NOMEVOLUME status

Vogliamo effettuare l’operazione di Migrazione dati da un Brick ad un altro la facciamo tramite il seguente comando:

gluster volume replace-brick NOMEVOLUME NEW-BRICK start

Abbiamo la seguente configurazione:

gluster31

Se volessimo migrare i dati dal brick 192.168.0.100:/dati/dati-gruppo3 a 192.168.0.34:/dati/dati100 del volume dati-gruppo daremo il seguente comando:

gluster volume replace-brick dati-gruppo 192.168.0.100:/dati/dati-gruppo3 192.168.0.34:/dati/dati100 start

Si completa l’operazione di migrazione tramite il seguente comando:

gluster volume replace-brick dati-gruppo 192.168.0.100:/dati/dati-gruppo3 192.168.0.34:/dati/dati100 commit

E come vediamo la migrazione va a buon fine:

gluster32Infine per Cancellare un Volume eseguiamo prima la rimozione dei Brick ( tranne uno ), successivamente stoppiamo il volume per procedere cosi con l’operazione di eliminazione.

…..
gluster volume stop NOME-VOLUME
gluster volume delete NOME-VOLUME
Info about author

Michele Milaneschi

RHCE Consultant