GlusterFS è un file system di rete open source sviluppato da RedHat. A differenza di CephFS, è ideale per soluzioni semplici e rapide da deployare. Al contrario, Ceph offre funzionalità più avanzate e una migliore gestione dei carichi di lavoro intensi, a costo di una maggiore complessità di configurazione e manutenzione.
La situazione finale sarà quella di avere N nodi con un volume GlusterFS condiviso tra tutti. Su ciascun nodo verrà installato Docker e configurato un cluster Swarm. Per maggiori informazioni, si rimanda alla lettura dei precedenti articoli Docker Swarm e MicroCeph e anche Bilanciamento del carico con HAProxy.
Configurazione degli host
Dal nostro nodo PVE, possiamo creare tre VM a partire da un template, avendo cura di aggiungere un secondo disco di storage dedicato a GlusterFS. Per ulteriori dettagli, leggere la guida dedicata alla creazione di una VM in PVE.
Nel nostro caso, abbiamo creato i seguenti 3 nodi basati su Debian:
- swarm-master: 10.10.1.10
- swarm-worker1: 10.10.1.11
- swarm-worker2: 10.10.1.12
Su ciascun nodo, si deve partizionare il secondo disco e formattarlo in ext4, tramite i comandi fdisk e mkfs.
Per l’automount della partizione, una volta recuperato l’ID, creato la directory in cui questa sarà montata, si deve modificare il file /etc/fstab di conseguenza. Ad esempio:
Su ciascun nodo, dare quindi il comando systemctl daemon-reload e successivamente mount -a in modo che il filesystem sia montato in automatico.
La situazione finale dovrebbe essere simile alla seguente:
|
|
Installazione di GlusterFS e Docker
Per l’installazione di GlusterFS su Debian, seguire la documentazione ufficiale. Infine abilitare il seguente servizio: systemctl enable --now glusterfsd.service.
Anche per l’installazione di Docker su Debian, si consiglia di seguire la guida ufficiale.
Inizializzazione dello storage
Dal nodo master, dare i seguenti comandi per la creazione del cluster storage:
Per verificarne lo stato di salute esiste il comando gluster peer status:
Per visualizzare i nodi attivi all’interno del cluster storage, esiste anche il comando gluster pool list, che fornisce un elenco dettagliato dei nodi che compongono il cluster, mostrando informazioni chiave come l’UUID, l’indirizzo IP e lo stato di connessione di ciascun nodo:
Creazione del volume GlusterFS
Per creare e avviare il volume, dare i seguenti comandi:
Per visualizzare tutte le informazioni in merito al volume appena creato:
|
|
Montare il volume GlusterFS
Su ciascun nodo, creare il punto di mount che verrà utilizzato per i volumi docker tramite il comando mkdir -p /opt/docker. Quindi, creare il file /etc/systemd/system/opt-docker.mount per gestire il mount del volume:
Avviare e abilitare il mount col comando systemctl enable --now opt-docker.mount
A questo punto si avrà a disposizione /opt/docker come storage ridondato e sincronizzato per i vari volumi Docker. Questo approccio garantisce che i dati siano distribuiti e replicati attraverso i nodi, migliorando la disponibilità e la resilienza.
In alternativa alla creazione di un file di mount systemd, si può configurare il mount di GlusterFS aggiungendo la seguente riga nel file /etc/fstab di ciascun nodo:
|
|
Dopo aver aggiornato il file /etc/fstab, eseguire il seguente comando per ricaricare la configurazione di systemd e montare tutte le voci specificate:
|
|
Docker Swarm
Riferirsi alla seguente guida per creare il cluster e aggiungere i vari nodi.
Una volta completata la configurazione del cluster, creare la seguente directory e il file index.html:
|
|
Infine, solo sul nodo master, creare il file docker-compose.yml di esempio, che configura un web server NGINX per servire la pagina index.html:
Infine, avviare lo stack con il seguente comando:
|
|
Accedendo al browser web e collegandosi agli indirizzi http://10.10.1.10:8080/ (master), http://10.10.1.11:8080/ (nodo1) o http://10.10.1.12:8080/ (nodo2), sarà visibile la pagina web creata in precedenza.
HAProxy
Per avere maggiori informazioni e dettagli, riferirsi all’articolo Bilanciamento del carico con HAProxy. In particolare, un esempio del file di configurazione /etc/haproxy/haproxy.cfg:
|
|
Collegandosi all’indirizzo 10.10.1.5 tramite un qualsiasi browser, la richiesta verrà instradata da HAProxy a uno dei tre nodi. Questo approccio garantisce che, in caso di malfunzionamento di uno dei nodi, il sito rimanga comunque accessibile.