GlusterFS · 9 min read · Jan 10, 2026

Archiviazione ad alta disponibilità con GlusterFS su Debian 8 - Specchio tra due server di archiviazione

Questo tutorial mostra come impostare un’archiviazione ad alta disponibilità con due server di archiviazione (Debian Jessie) che utilizza GlusterFS. Ogni server di archiviazione sarà uno specchio dell’altro server di archiviazione e i file saranno replicati automaticamente tra i due nodi di archiviazione. Il sistema client (anch’esso Debian 8) sarà in grado di accedere all’archiviazione come se fosse un filesystem locale. GlusterFS è un filesystem cluster in grado di scalare fino a diversi petabyte. Aggrega vari mattoni di archiviazione su Infiniband RDMA o TCP/IP in un unico grande filesystem di rete parallelo. I mattoni di archiviazione possono essere costituiti da qualsiasi hardware commerciale, come server x86_64 con RAID SATA-II e HBA Infiniband.

1 Nota preliminare

In questo tutorial, utilizzerò tre sistemi, due server e un client:

  • server1.example.com: indirizzo IP 192.168.1.100 (server)
  • server2.example.com: indirizzo IP 192.168.1.101 (server)
  • client1.example.com: indirizzo IP 192.168.1.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:

nano /etc/hosts
127.0.0.1 localhost  
192.168.1.100 server1.example.com server1  
192.168.1.101 server2.example.com server2  
192.168.1.102 client1.example.com client1  
  
  
# Le seguenti righe sono desiderabili per host compatibili con IPv6  
::1 localhost ip6-localhost ip6-loopback  
ff02::1 ip6-allnodes  
ff02::2 ip6-allrouters

(È 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 Impostazione dei server GlusterFS

server1.example.com/server2.example.com:

L’ultima versione di GlusterFS è disponibile come pacchetto Debian da gluster.org. Possiamo installarla come segue:

Aggiungiamo la chiave pubblica del repository Debian di gluster.org su entrambi i server.

wget -O - http://download.gluster.org/pub/gluster/glusterfs/3.7/3.7.9/rsa.pub | apt-key add -

Poi aggiungiamo il repository GlusterFS (il comando è una sola riga!)

echo deb http://download.gluster.org/pub/gluster/glusterfs/3.7/3.7.9/Debian/jessie/apt jessie main > /etc/apt/sources.list.d/gluster.list

e aggiorniamo l’elenco dei repository.

apt-get update

Ora possiamo installare il software del server GlusterFS con apt.

apt-get -y install glusterfs-server

Il comando

glusterfsd --version

dovrebbe ora mostrare la versione di GlusterFS che hai appena installato (3.7.9 in questo caso):

root@server1:/# glusterfsd --version  
glusterfs 3.7.9 built on Mar 23 2016 05:24:49  
Repository revision: git://git.gluster.com/glusterfs.git  
Copyright (c) 2006-2013 Red Hat, Inc.   
GlusterFS viene fornito senza ALCUN GARANZIA.  
È concesso in licenza a te sotto la tua scelta della GNU Lesser  
General Public License, versione 3 o qualsiasi versione successiva (LGPLv3  
o successiva), o la GNU General Public License, versione 2 (GPLv2),  
in tutti i casi come pubblicato dalla Free Software Foundation.  
root@server1:/#

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.

Glusterfs memorizzerà i suoi dati nella directory /data sui server. Questa posizione può essere una normale directory se hai un’installazione più piccola o puoi utilizzare una partizione di disco rigido separata e montarla come /data.

Esegui su entrambi i server:

mkdir /data

per creare la directory dei dati.

Successivamente, dobbiamo aggiungere server2.example.com al pool di archiviazione fidato (si prega di notare che sto eseguendo tutti i comandi di configurazione di GlusterFS da server1.example.com, ma puoi anche eseguirli da server2.example.com perché la configurazione è 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
root@server1:/# gluster peer probe server2.example.com  
peer probe: success.  
root@server1:/#

Lo stato del pool di archiviazione fidato dovrebbe ora essere simile a questo:

gluster peer status
root@server1:/# gluster peer status  
Number of Peers: 1
Hostname: server2.example.com  
Uuid: 0f7ee46c-6a71-4a31-91d9-6076707eff95  
State: Peer in Cluster (Connected)  
root@server1:/#

Successivamente creiamo la condivisione chiamata testvol con due repliche (si prega di notare 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 nella directory /data/testvol (questa verrà creata se non esiste):

gluster volume create testvol replica 2 transport tcp server1.example.com:/data/testvol server2.example.com:/data/testvol force
root@server1:/# gluster volume create testvol replica 2 transport tcp server1.example.com:/data/testvol server2.example.com:/data/testvol force  
volume create: testvol: success: please start the volume to access data  
root@server1:/#

Avvia il volume:

gluster volume start testvol
root@server1:/# gluster volume start testvol  
volume start: testvol: success  
root@server1:/#

Il nostro volume di test è stato avviato con successo.

È possibile che il comando sopra ti dica che l’azione non è stata eseguita con successo:

root@server1:~# gluster volume start testvol  
Starting volume testvol has been unsuccessful  
root@server1:~#

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 come questo…

root@server1:/# netstat -tap | grep glusterfsd  
tcp 0 0 *:49152 *:* LISTEN 8007/glusterfsd  
tcp 0 0 server1.example.c:65533 server1.example.c:24007 ESTABLISHED 8007/glusterfsd  
tcp 0 0 server1.example.c:49152 server2.example.c:65531 ESTABLISHED 8007/glusterfsd  
tcp 0 0 server1.example.c:49152 server1.example.c:65532 ESTABLISHED 8007/glusterfsd  
tcp 0 0 server1.example.c:49152 server1.example.c:65531 ESTABLISHED 8007/glusterfsd  
tcp 0 0 server1.example.c:49152 server2.example.c:65526 ESTABLISHED 8007/glusterfsd  
root@server1:/#

… tutto va bene, ma se non ottieni alcun output…

root@server2:~# netstat -tap | grep glusterfsd  
root@server2:~#

… riavvia il demone GlusterFS sul server corrispondente (server1.example.com in questo caso):

server2.example.com:

service glusterfs-server restart

Quindi controlla di nuovo l’output di…

netstat -tap | grep glusterfsd

… su quel server - dovrebbe ora apparire così:

root@server2:/# netstat -tap | grep glusterfsd  
tcp 0 0 *:49152 *:* LISTEN 7852/glusterfsd  
tcp 0 0 server2.example.c:49152 server2.example.c:65532 ESTABLISHED 7852/glusterfsd  
tcp 0 0 server2.example.c:49152 server1.example.c:65526 ESTABLISHED 7852/glusterfsd  
tcp 0 0 server2.example.c:49152 server2.example.c:65525 ESTABLISHED 7852/glusterfsd  
tcp 0 0 server2.example.c:65533 server2.example.c:24007 ESTABLISHED 7852/glusterfsd  
tcp 0 0 server2.example.c:49152 server1.example.c:65524 ESTABLISHED 7852/glusterfsd  
root@server2:/#

Ora torniamo a server1.example.com:

server1.example.com:

Puoi controllare lo stato del volume con il comando

gluster volume info
root@server1:/# gluster volume info
Volume Name: testvol  
Type: Replicate  
Volume ID: 3fc9af57-ca56-4a72-ad54-3d2ea03e5883  
Status: Started  
Number of Bricks: 1 x 2 = 2  
Transport-type: tcp  
Bricks:  
Brick1: server1.example.com:/data/testvol  
Brick2: server2.example.com:/data/testvol  
Options Reconfigured:  
performance.readdir-ahead: on  
root@server1:/#

Per impostazione predefinita, tutti i client possono connettersi al volume. Se desideri concedere accesso solo a client1.example.com (= 192.168.1.102), esegui:

gluster volume set testvol auth.allow 192.168.1.102
root@server1:/# gluster volume set testvol auth.allow 192.168.1.102  
volume set: success  
root@server1:/#

Si prega di notare che è possibile utilizzare caratteri jolly per gli indirizzi IP (come 192.168.*) e che è possibile specificare più indirizzi IP separati da virgola (ad es. 192.168.1.102,192.168.1.103).

Le informazioni sul volume dovrebbero ora mostrare lo stato aggiornato:

gluster volume info

root@server1:/# gluster volume info

Volume Name: testvol  
Type: Replicate  
Volume ID: 3fc9af57-ca56-4a72-ad54-3d2ea03e5883  
Status: Started  
Number of Bricks: 1 x 2 = 2  
Transport-type: tcp  
Bricks:  
Brick1: server1.example.com:/data/testvol  
Brick2: server2.example.com:/data/testvol  
Options Reconfigured:  
auth.allow: 192.168.1.102  
performance.readdir-ahead: on  
root@server1:/#

3 Impostazione del client GlusterFS

client1.example.com:

Sul sistema client, aggiungiamo prima la chiave pubblica del repository Debian di gluster.org.

wget -O - http://download.gluster.org/pub/gluster/glusterfs/3.7/3.7.9/rsa.pub | apt-key add -

Poi aggiungiamo il repository GlusterFS (il comando è una sola riga!)

echo deb http://download.gluster.org/pub/gluster/glusterfs/3.7/3.7.9/Debian/jessie/apt jessie main > /etc/apt/sources.list.d/gluster.list

e aggiorniamo l’elenco dei repository.

apt-get update

Ora possiamo installare il client GlusterFS come segue.

apt-get -y install glusterfs-client

Poi creiamo la seguente directory:

mkdir /mnt/glusterfs

Ecco fatto! 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!)

Dovresti ora vedere la nuova condivisione negli output di…

mount
root@client1:/# mount  
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)  
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)  
udev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=125556,mode=755)  
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)  
tmpfs on /run type tmpfs (rw,nosuid,relatime,size=204220k,mode=755)  
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)  
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)  
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)  
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)  
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)  
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)  
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)  
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)  
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)  
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)  
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)  
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)  
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)  
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)  
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=23,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)  
mqueue on /dev/mqueue type mqueue (rw,relatime)  
debugfs on /sys/kernel/debug type debugfs (rw,relatime)  
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)  
rpc_pipefs on /run/rpc_pipefs type rpc_pipefs (rw,relatime)  
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)  
server1.example.com:/testvol on /mnt/glusterfs type fuse.glusterfs (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=131072)  
root@client1:/#

… e…

df -h
root@client1:/# df -h  
Filesystem Size Used Avail Use% Mounted on  
/dev/sda1 57G 1.1G 53G 2% /  
udev 10M 0 10M 0% /dev  
tmpfs 200M 4.6M 195M 3% /run  
tmpfs 499M 0 499M 0% /dev/shm  
tmpfs 5.0M 0 5.0M 0% /run/lock  
tmpfs 499M 0 499M 0% /sys/fs/cgroup  
server1.example.com:/testvol 57G 21G 34G 39% /mnt/glusterfs  
root@client1:/#

Invece di montare manualmente la condivisione GlusterFS sul client, puoi modificare /etc/fstab in modo che la condivisione venga montata automaticamente all’avvio del client.

Apri /etc/fstab e aggiungi la seguente riga:

nano /etc/fstab
[...]  
server1.example.com:/testvol /mnt/glusterfs glusterfs defaults,_netdev 0 0

(Ancora una volta, invece di server1.example.com puoi anche usare server2.example.com!)

Per testare 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 Testare la replicazione di GlusterFS

Ora creiamo alcuni file di test sulla condivisione GlusterFS:

client1.example.com:

touch /mnt/glusterfs/test1  
touch /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 ciascun nodo:

server1.example.com/server2.example.com:

ls -l /data/testvol
root@server1:/# ls -l /data/testvol/  
total 0  
-rw-r--r-- 2 root root 0 Mar 23 2016 test1  
-rw-r--r-- 2 root root 0 Mar 23 2016 test2

Ora spegniamo 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/testvol su server2.example.com:

server2.example.com:

ls -l /data/testvol
root@server2:/# ls -l /data/testvol  
total 8  
-rw-r--r-- 2 root root 0 Mar 23 08:06 test1  
-rw-r--r-- 2 root root 0 Mar 23 08:09 test3  
-rw-r--r-- 2 root root 0 Mar 23 08:09 test4  
root@server2:/#

Riavviamo server1.example.com e diamo un’occhiata alla directory /data:

server1.example.com:

ls -l /data/testvol
root@server1:/# ls -l /data/testvol  
total 0  
-rw-r--r-- 2 root root 0 Mar 23 08:06 test1  
-rw-r--r-- 2 root root 0 Mar 23 08:09 test3  
-rw-r--r-- 2 root root 0 Mar 23 08:09 test4  
root@server1:/#

Come puoi vedere, server1.example.com ha sincronizzato automaticamente le modifiche. Nel caso in cui la modifica non sia stata ancora sincronizzata, è 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/
root@client1:/# ls -l /mnt/glusterfs/  
total 0  
-rw-r--r-- 1 root root 0 Mar 23 08:06 test1  
-rw-r--r-- 1 root root 0 Mar 23 08:09 test3  
-rw-r--r-- 1 root root 0 Mar 23 08:09 test4  
root@client1:/#

5 Link

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.