GNU/Linux >> Linux Esercitazione >  >> Debian

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

Questo tutorial mostra come configurare uno spazio di archiviazione ad alta disponibilità con due server di archiviazione (Debian Jessie) che utilizza GlusterFS. Ciascun server di archiviazione sarà un mirror dell'altro server di archiviazione e i file verranno replicati automaticamente su entrambi i nodi di archiviazione. Il sistema client (anche Debian 8) 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.

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


# The following lines are desirable for IPv6 capable hosts
::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 Configurazione dei server GlusterFS

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

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

Aggiungiamo la chiave pubblica del repository Debian 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 -

Quindi aggiungi il repository GlusterFS (il comando è una 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 aggiorna 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

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

[email protected]:/# 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. <http://www.redhat.com/>
GlusterFS comes with ABSOLUTELY NO WARRANTY.
It is licensed to you under your choice of the GNU Lesser
General Public License, version 3 or any later version (LGPLv3
or later), or the GNU General Public License, version 2 (GPLv2),
in all cases as published by the Free Software Foundation.
[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.

Glusterfs memorizzerà i propri dati nella directory /data sui server. Questa posizione può essere una directory normale se hai un'installazione più piccola o usi una partizione del disco rigido separata e la monti 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 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 viene 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 protected]:/# gluster peer probe server2.example.com
peer probe: success.
[email protected]:/#

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

gluster peer status
[email protected]:/# gluster peer status
Number of Peers: 1
Hostname: server2.example.com
Uuid: 0f7ee46c-6a71-4a31-91d9-6076707eff95
State: Peer in Cluster (Connected)
[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/testvol directory (verrà creata se non esiste):

gluster volume create testvol replica 2 transport tcp server1.example.com:/data/testvol server2.example.com:/data/testvol force
[email protected]:/# 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
[email protected]:/#

Avvia il volume:

gluster volume start testvol
[email protected]:/# gluster volume start testvol
volume start: testvol: success
[email protected]:/#

Il nostro volume di test è stato avviato con successo.

È possibile che il comando precedente ti dica che l'azione non è andata a buon fine:

[email protected]:~# gluster volume start testvol
Starting volume testvol has been unsuccessful
[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 protected]:/# 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
[email protected]:/#

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

[email protected]:~# netstat -tap | grep glusterfsd
[email protected]:~#

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

server2.example.com:

service glusterfs-server restart

Quindi controlla l'output di...

netstat -tap | grep glusterfsd

... di nuovo su quel server - ora dovrebbe apparire così:

[email protected]:/# 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
[email protected]:/#

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
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
[email protected]:/#

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

gluster volume set testvol auth.allow 192.168.1.102
[email protected]:/# gluster volume set testvol auth.allow 192.168.1.102
volume set: success
[email protected]:/#

Tieni presente che è possibile utilizzare caratteri jolly per gli indirizzi IP (come 192.168.*) e che puoi specificare più indirizzi IP separati da virgole (es. 192.168.1.102,192.168.1.103).

Le informazioni sul volume dovrebbero ora mostrare lo stato aggiornato:

gluster volume info

[email protetta]:/# informazioni sul volume gluster

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
[email protected]:/#

3 Configurazione del client GlusterFS

client1.example.com:

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

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

Quindi aggiungi il repository GlusterFS (il comando è una 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 aggiorna l'elenco dei repository.

apt-get update

Ora possiamo installare il client GlusterFS come segue.

apt-get -y 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 protected]:/# 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)
[email protected]:/#

... e...

df -h
[email protected]:/# 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
[email protected]:/#

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

(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 della replica GlusterFS

Ora creiamo alcuni file di prova 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 ogni nodo:

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

ls -l /data/testvol
[email protected]:/# 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 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/testvol su server2.example.com:

server2.example.com:

ls -l /data/testvol
[email protected]:/# 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
[email protected]:/#

Avviamo nuovamente server1.example.com e diamo un'occhiata alla directory /data:

server1.example.com:

ls -l /data/testvol
[email protected]:/# 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
[email protected]:/#

Come vedi, server1.example.com ha sincronizzato automaticamente le modifiche. Nel caso in cui la modifica non sia stata ancora sincronizzata, è facile risolvere il problema, 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 protected]:/# 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
[email protected]:/#

  • GlusterFS:http://www.gluster.org/
  • Documentazione GlusterFS: http://gluster.readthedocs.org/en/latest/
  • Debian:http://www.debian.org/

Debian
  1. Archiviazione distribuita su quattro nodi di archiviazione con GlusterFS 3.2.x su Ubuntu 12.10

  2. Archiviazione replicata distribuita su quattro nodi di archiviazione con GlusterFS 3.2.x su Ubuntu 12.10

  3. Striping su quattro nodi di archiviazione con GlusterFS 3.2.x su Ubuntu 12.10

  4. Replica automatica dei file (mirror) su due server di archiviazione con GlusterFS 3.2.x su Ubuntu 12.10

  5. Archiviazione ad alta disponibilità con GlusterFS su Debian Lenny - Replica automatica dei file su due server di archiviazione

Archiviazione ad alta disponibilità con GlusterFS su CentOS 7 - Mirroring su due server di archiviazione

Archiviazione ad alta disponibilità con GlusterFS 3.2.x su Debian Wheezy - Replica automatica dei file (mirror) su due server di archiviazione

Creazione di un server di archiviazione autonomo simile a NFS con GlusterFS 3.2.x su Debian Wheezy

Archiviazione distribuita su quattro nodi di archiviazione con GlusterFS 3.2.x su CentOS 6.3

Archiviazione replicata distribuita su quattro nodi di archiviazione con GlusterFS 3.2.x su CentOS 6.3

Archiviazione ad alta disponibilità con GlusterFS su Fedora 12 - Replica automatica dei file (mirror) su due server di archiviazione