Nel mondo della tecnologia, è sempre fondamentale mantenere i dati altamente disponibili per garantire che siano accessibili all'applicazione/utente. L'elevata disponibilità si ottiene qui distribuendo i dati su più volumi/nodi.
Le macchine client/gli utenti possono accedere allo spazio di archiviazione come se fosse un archivio locale. Ogni volta che l'utente crea dati sullo storage Gluster, i dati verranno duplicati/distribuiti ad altri nodi di storage.
Cos'è GlusterFS?
GlusterFS è un filesystem di rete scalabile e open source adatto per carichi di lavoro ad alta intensità di dati come streaming multimediale, archiviazione cloud e CDN (Content Delivery Network). GlusterFS è stato sviluppato inizialmente da Gluster Inc e poi da Redhat, a seguito dell'acquisizione.
Terminologie:
Di seguito sono riportate le terminologie importanti che utilizziamo in questo articolo.
Mattone – è l'archiviazione di base (directory) su un server nel pool di archiviazione attendibile.
Volume – è una logica collezione di mattoni.
Gruppo – è un gruppo di computer collegati, che lavorano insieme come un unico computer.
File system distribuito – Un file system in cui i dati sono distribuiti su più nodi di archiviazione e consente ai client di accedervi tramite una rete.
Cliente – è una macchina che monta il volume.
Server – è una macchina in cui è ospitato il file system effettivo in cui verranno archiviati i dati.
Replica – Esecuzione di più copie di dati per ottenere un'elevata ridondanza.
Fusibile – è un modulo del kernel caricabile che consente agli utenti non privilegiati di creare i propri file system senza modificare il codice del kernel.
gluster – è un demone che viene eseguito su tutti i server nel pool di archiviazione attendibile.
RAID – L'array ridondante di dischi economici (RAID) è una tecnologia che fornisce una maggiore affidabilità di archiviazione attraverso la ridondanza.
Volumi:
Come detto in precedenza, il volume è la raccolta di mattoni e la maggior parte delle operazioni di gluster come la lettura e la scrittura avvengono sul volume. GlusterFS supporta diversi tipi di volumi in base ai requisiti; adatto per ridimensionare le dimensioni dello spazio di archiviazione o migliorare le prestazioni o per entrambi.
In questo articolo, configureremo il volume GlusterFS replicato su Ubuntu 16.04 / Debian 8. Questa guida dovrebbe funzionare anche su versioni precedenti di Ubuntu come Ubuntu 14.04 / Ubuntu 12.04.
Volume Glusterfs replicato è come un RAID 1 e il volume conserva le copie esatte dei dati su tutti i mattoni. Puoi decidere il numero di repliche durante la creazione del volume, quindi avresti bisogno di almeno due mattoni per creare un volume con due repliche o tre mattoni per creare un volume di 3 repliche.
Questo volume offre una migliore affidabilità e ridondanza dei dati.Perché non leggere i restanti tipi di volumi GlusterFS.
Requisiti:
Qui configureremo il volume GlusterFS con due repliche. Assicurati di avere due sistemi a 64 bit (virtuali o fisici) con 1 GB di memoria e un disco rigido di riserva su ciascun sistema.
Nome host | Indirizzo IP | OS | Memoria | Disco | Scopo |
---|---|---|---|---|---|
gluster1.itzgeek.local | 192.168.12.16 | Ubuntu 16.04 LTS | 1 GB | /dev/sdb (5 GB) | Nodo di archiviazione 1 |
gluster2.itzgeek.local | 192.168.12.17 | Debian 8 | 1 GB | /dev/sdb (5 GB) | Nodo di archiviazione 2 |
client.itzgeek.local | 192.168.12.8 | CentOS 7/Debian | NA | NA | Macchina cliente |
Configura DNS:
I componenti GlusterFS utilizzano il DNS per la risoluzione dei nomi, quindi configura il DNS o imposta una voce host. Se non hai un DNS nel tuo ambiente, modifica il file /etc/hosts e aggiornalo di conseguenza.
sudo vi /etc/hosts 192.168.12.16 gluster1.itzgeek.local gluster1 192.168.12.17 gluster2.itzgeek.local gluster2 192.168.12.20 client.itzgeek.local client
Aggiungi repository GlusterFS:
Prima di procedere all'installazione, è necessario configurare il repository GlusterFS su entrambi i nodi di archiviazione. Segui le istruzioni per aggiungere il repository al tuo sistema.
Debian:
Installa il pacchetto di supporto per le transazioni https.
sudo apt-get install -y lsb-release sudo apt-get install -y apt-transport-https
Aggiungi la chiave pubblica per il repository GlusterFS.
wget -O - http://download.gluster.org/pub/gluster/glusterfs/LATEST/rsa.pub | sudo apt-key add - echo deb https://download.gluster.org/pub/gluster/glusterfs/LATEST/Debian/$(lsb_release -sc)/apt $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/gluster.list
Ubuntu 16.04 / 14.04:
sudo apt-get install -y software-properties-common sudo add-apt-repository ppa:gluster/glusterfs-3.8
Installa GlusterFS:
Dopo aver aggiunto il repository sui tuoi sistemi, siamo a posto per l'installazione di GlusterFS.
Aggiorna la cache del repository.
sudo apt-get update
Installa il pacchetto GlusterFS usando il comando seguente.
sudo apt-get install -y glusterfs-server
Avvia il servizio glusterfs-server su tutti i nodi gluster.
sudo service glusterfs-server start
Verifica che il servizio glusterfs funzioni correttamente.
raj@gluster1:~$ sudo service glusterfs-server status ● glusterfs-server.service - LSB: GlusterFS server Loaded: loaded (/etc/init.d/glusterfs-server; bad; vendor preset: enabled) Active: active (running) since Sat 2016-09-24 21:47:20 IST; 1min 6s ago Docs: man:systemd-sysv-generator(8) Process: 1570 ExecStop=/etc/init.d/glusterfs-server stop (code=exited, status=0/SUCCESS) Process: 1664 ExecStart=/etc/init.d/glusterfs-server start (code=exited, status=0/SUCCESS) Tasks: 7 (limit: 512) Memory: 25.5M CPU: 3.552s CGroup: /system.slice/glusterfs-server.service └─1673 /usr/sbin/glusterd -p /var/run/glusterd.pid Sep 24 21:47:16 gluster1.itzgeek.local systemd[1]: Starting LSB: GlusterFS server... Sep 24 21:47:16 gluster1.itzgeek.local glusterfs-server[1664]: * Starting glusterd service glusterd Sep 24 21:47:20 gluster1.itzgeek.local glusterfs-server[1664]: ...done. Sep 24 21:47:20 gluster1.itzgeek.local systemd[1]: Started LSB: GlusterFS server.
Configura Firewall:
Dovresti disabilitare il firewall o configurare il firewall per consentire tutte le connessioni all'interno di un cluster.
sudo iptables -I INPUT -p all -s <ip-address> -j ACCEPT
Aggiungi spazio di archiviazione:
Supponendo che tu abbia un disco rigido di riserva sulla tua macchina, /dev/sdb è quello che userò qui per un mattone. Crea una singola partizione sul disco rigido di riserva come mostrato di seguito.
Dovresti eseguire i passaggi seguenti su entrambi i nodi.
sudo fdisk /dev/sdb
Formatta la partizione creata con il filesystem di tua scelta.
sudo mkfs.ext4 /dev/sdb1
Monta il disco su una directory chiamata /data/gluster .
sudo mkdir -p /data/gluster sudo mount /dev/sdb1 /data/gluster
Aggiungi una voce a /etc/fstab per mantenere il montaggio persistente durante il riavvio.
echo "/dev/sdb1 /data/gluster ext4 defaults 0 0" | sudo tee --append /etc/fstab
Configura GlusterFS su Ubuntu 16.04:
Prima di creare un volume, è necessario creare un pool di archiviazione attendibile aggiungendo gluster2.itzgeek.local . Puoi eseguire i comandi di configurazione GlusterFS su qualsiasi server nel cluster eseguirà lo stesso comando su tutti gli altri server.
Qui eseguirò tutti i comandi GlusterFS in gluster1.itzgeek.local nodo.
raj@gluster1:~$ sudo gluster peer probe gluster2.itzgeek.local peer probe: success.
Verifica lo stato del pool di archiviazione attendibile.
raj@gluster1:~$ sudo gluster peer status Number of Peers: 1 Hostname: gluster2.itzgeek.local Uuid: 51470928-dfa8-42e1-a221-d7bbcb8c13bd State: Peer in Cluster (Connected)
Elenca il pool di archiviazione.
raj@gluster1:~$ sudo gluster pool list UUID Hostname State 51470928-dfa8-42e1-a221-d7bbcb8c13bd gluster2.itzgeek.local Connected dc7c1639-d21c-4adf-b28f-5150229e6980 localhost Connected
Imposta volume GlusterFS:
Crea un mattone (directory) chiamato "gvol0 ” nel file system montato su entrambi i nodi.
sudo mkdir -p /data/gluster/gvol0
Poiché utilizzeremo il volume replicato, crea il volume denominato "gvol0 ” con due repliche.
raj@gluster1:~$ sudo gluster volume create gvol0 replica 2 gluster1.itzgeek.local:/data/gluster/gvol0 gluster2.itzgeek.local:/data/gluster/gvol0 volume create: gvol0: success: please start the volume to access data
Avvia il volume.
raj@gluster1:~$ sudo gluster volume start gvol0 volume start: gvol0: success
Controlla lo stato del volume creato.
raj@gluster1:~$ sudo gluster volume info gvol0 Volume Name: gvol0 Type: Replicate Volume ID: ca102e4b-6cd1-4d9d-9c5a-03b882c76da0 Status: Started Snapshot Count: 0 Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: gluster1.itzgeek.local:/data/gluster/gvol0 Brick2: gluster2.itzgeek.local:/data/gluster/gvol0 Options Reconfigured: transport.address-family: inet performance.readdir-ahead: on nfs.disable: on
Impostazione del client GlusterFS:
Installa glusterfs-client pacchetto per supportare il montaggio dei filesystem GlusterFS. Esegui tutti i comandi come root utente.
$ su - ### CentOS / RHEL ### yum install -y glusterfs-client ### Ubuntu / Debian ### apt-get install -y glusterfs-client
Crea una directory per montare il filesystem GlusterFS.
mkdir -p /mnt/glusterfs
Ora monta il filesystem GlusterFS su /mnt/glusterfs usando il comando seguente.
mount -t glusterfs gluster1.itzgeek.local:/gvol0 /mnt/glusterfs
Puoi anche utilizzare gluster2.itzgeek.local invece di gluster1.itzgeek.com nel comando precedente.
Verifica il filesystem GlusterFS montato.
[root@client ~]# df -hP /mnt/glusterfs Filesystem Size Used Avail Use% Mounted on gluster1.itzgeek.local:/gvol0 4.8G 11M 4.6G 1% /mnt/glusterfs
Puoi anche utilizzare il comando seguente per verificare il filesystem GlusterFS.
[root@client ~]# cat /proc/mounts rootfs / rootfs rw 0 0 sysfs /sys sysfs rw,seclabel,nosuid,nodev,noexec,relatime 0 0 proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0 devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=490448k,nr_inodes=122612,mode=755 0 0 securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0 tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev 0 0 devpts /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0 tmpfs /run tmpfs rw,seclabel,nosuid,nodev,mode=755 0 0 tmpfs /sys/fs/cgroup tmpfs ro,seclabel,nosuid,nodev,noexec,mode=755 0 0 cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd 0 0 pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0 cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0 cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0 cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0 cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0 cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0 cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpuacct,cpu 0 0 cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0 cgroup /sys/fs/cgroup/hugetlb cgroup rw,nosuid,nodev,noexec,relatime,hugetlb 0 0 cgroup /sys/fs/cgroup/net_cls cgroup rw,nosuid,nodev,noexec,relatime,net_cls 0 0 configfs /sys/kernel/config configfs rw,relatime 0 0 /dev/mapper/centos-root / xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 selinuxfs /sys/fs/selinux selinuxfs rw,relatime 0 0 systemd-1 /proc/sys/fs/binfmt_misc autofs rw,relatime,fd=25,pgrp=1,timeout=300,minproto=5,maxproto=5,direct 0 0 hugetlbfs /dev/hugepages hugetlbfs rw,seclabel,relatime 0 0 debugfs /sys/kernel/debug debugfs rw,relatime 0 0 mqueue /dev/mqueue mqueue rw,seclabel,relatime 0 0 /dev/mapper/centos-home /home xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 /dev/sda1 /boot xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 tmpfs /run/user/0 tmpfs rw,seclabel,nosuid,nodev,relatime,size=100136k,mode=700 0 0 gluster1.itzgeek.local:/gvol0 /mnt/glusterfs fuse.glusterfs rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=131072 0 0 fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0
Aggiungi la voce di seguito a /etc/fstab per il montaggio automatico durante l'avvio del sistema.
gluster1.itzgeek.local:/gvol0 /mnt/glusterfs glusterfs defaults,_netdev 0 0
Test di replica GlusterFS e alta disponibilità:
Lato server di GlusterFS:
Per verificare la replica, monta il volume GlusterFS creato sullo stesso nodo di archiviazione.
raj@gluster1:~$ sudo mount -t glusterfs gluster1.itzgeek.local:/gvol0 /mnt raj@gluster2:~$ sudo mount -t glusterfs gluster2.itzgeek.local:/gvol0 /mnt
Dati all'interno di /mnt la directory di entrambi i nodi sarà sempre la stessa (replica).
Lato client GlusterFS:
Creiamo alcuni file sul filesystem montato su client.itzgeek.local.
touch /mnt/glusterfs/file1 touch /mnt/glusterfs/file2
Verifica i file creati.
[root@client ~]# ll /mnt/glusterfs/ total 0 -rw-r--r--. 1 root root 0 Sep 26 11:22 file1 -rw-r--r--. 1 root root 0 Sep 26 11:22 file2
Testa entrambi i nodi GlusterFS se hanno gli stessi dati all'interno di /mnt .
raj@gluster1:~$ ll /mnt/ total 12 drwxr-xr-x 4 root root 4096 Sep 26 20:52 ./ drwxr-xr-x 24 root root 4096 Sep 25 21:57 ../ -rw-r--r-- 1 root root 0 Sep 26 20:52 file1 -rw-r--r-- 1 root root 0 Sep 26 20:52 file2 raj@gluster2:~$ ls -al /mnt/ total 12 drwxr-xr-x 4 root root 4096 Sep 26 06:30 . drwxr-xr-x 23 root root 4096 Sep 24 08:39 .. -rw-r--r-- 1 root root 0 Sep 26 2016 file1 -rw-r--r-- 1 root root 0 Sep 26 2016 file2
Come sapete, abbiamo montato il volume GlusterFS da gluster1.itzgeek.local su client.itzgeek.local , ora è il momento di testare l'elevata disponibilità del volume spegnendo il nodo.
raj@gluster1:~$ sudo poweroff
Ora verifica la disponibilità dei file, vedrai i file che abbiamo creato di recente anche se il nodo è inattivo.
[root@client ~]# ll /mnt/glusterfs/ total 0 -rw-r--r--. 1 root root 0 Sep 26 11:22 file1 -rw-r--r--. 1 root root 0 Sep 26 11:22 file2Potresti riscontrare lentezza nell'esecuzione dei comandi sul filesystem GlusterFS montato a causa del passaggio da GlusterFS a gluster2.itzgeek.local quando il client.itzgeek.local impossibile raggiungere gluster1.itzgeek.local .
Crea altri file sul filesystem GlusterFS per verificare la replica.
touch /mnt/glusterfs/file3 touch /mnt/glusterfs/file4
Verifica il conteggio dei file.
[root@client ~]# ll /mnt/glusterfs/ total 0 -rw-r--r--. 1 root root 0 Sep 26 11:22 file1 -rw-r--r--. 1 root root 0 Sep 26 11:22 file2 -rw-r--r--. 1 root root 0 Sep 26 11:26 file3 -rw-r--r--. 1 root root 0 Sep 26 11:26 file4
Dal gluster1 è inattivo, tutti i tuoi dati sono ora scritti su gluster2.itzgeek.local grazie all'alta disponibilità. Ora accendi il nodo1 (gluster1.itzgeek.local ).
Controlla il /mnt del gluster1.itzgeekk.local; dovresti vedere tutti e quattro i file nella directory, questo conferma che la replica funziona come previsto.
raj@gluster1:~$ sudo mount -t glusterfs gluster1.itzgeek.local:/gvol0 /mnt [sudo] password for raj: raj@gluster1:~$ ll /mnt/ total 12 drwxr-xr-x 4 root root 4096 Sep 26 20:59 ./ drwxr-xr-x 24 root root 4096 Sep 25 21:57 ../ -rw-r--r-- 1 root root 0 Sep 26 20:52 file1 -rw-r--r-- 1 root root 0 Sep 26 20:52 file2 -rw-r--r-- 1 root root 0 Sep 26 20:56 file3 -rw-r--r-- 1 root root 0 Sep 26 20:56 file4
Questo è tutto.