[S.Li.P] Clustering di 2 server per vm

Lucio Crusca lucio a sulweb.org
Mar 9 Lug 2019 11:51:46 CEST


Il 08/07/19 23:11, Marco Lim ha scritto:
> Grazie della risposta, in realtà la cosa servirebbe in primis a capire come installare un sistema di cluster (sicuramente non per livello professionale, ma puramente didattico).

Il problema è che la parola "cluster" è troppo generica per andare in cerca di un software specifico, perché come dicevo ci sono diversi tipi di cluster che contemplano soluzioni software completamente diverse fra loro.

> Per quanto riguarda l'utilizzo sarebbe quello di avere la potenza ma soprattutto le risorse  dei servers come se fosse uno solo.

Per capirci, introduco un po' di teoria. Possiamo distinguere le risorse dei server in due categorie: risorse pre-rilasciabili, preemptible in inglese, (tempo di CPU, memoria RAM) e risorse non pre-rilasciabili (files su disco, canali di comunicazione, stampanti e periferiche in generale).

Le risorse preemptible possono essere temporaneamente sottratte ad un programma in esecuzione, mettendolo prima in pausa, senza che questo se ne accorga: quando il programma viene fatto ripartire, prima di tutto il sistema operativo (Linux) dedica di nuovo a lui le risorse che gli aveva sottratto quando lo aveva messo in pausa.

Le risorse non preemptible, se venissero sottratte durante l'esecuzione ad un programma, non potrebbero essere più riassegnate al programma nello stesso stato in cui si trovavano quando gli sono state sottratte e di conseguenza non si possono togliere al programma nemmeno mettendolo in pausa: se altri programmi necessitano di una di queste risorse, sono costretti a mettersi in coda ed attendere che il programma che la sta usando termini.

Le risorse preemptible tipicamente determinano la potenza di calcolo massima del server. Le risorse non preemptible costituiscono gli anelli deboli della catena.

Un cluster può esistere per UNO di due motivi: sommare fra loro le risorse preemptible, ottenendo maggior potenza di calcolo complessiva, oppure rendere più affidabili, attraverso la ridondanza, quelle non preemptible, ottenendo anelli deboli della catena che sono meno deboli. Purtroppo questi due obiettivi sono ortogonali fra loro, cioè remano in direzioni diverse. È sicuramente possibile creare un cluster che sia allo stesso tempo affidabile e potente (quasi) come la somma dei server che lo compongono, ma è una cosa che non interessa a nessuno, perché quel "quasi" diventa tanto più grande quanto meno ci si focalizza su uno solo dei due obiettivi. Esistono quindi software specifici per risolvere l'una o l'altra problematica, ma non entrambe nello stesso momento.

> Servirebbe per creare una specie di laboratorio virtuale di PC dove installare vari OS e vari applicativi.

Escludiamo quindi definitivamente il cluster HPC, che comunque, a fini puramente didattici, potrai poi installare successivamente creando macchine virtuali apposite (ma tieni conto che nel caso reale non si fa mai con le macchine virtuali).

Detta così e considerando che lo scopo è imparare, suggerisco di non usare nessun software specifico per ora, ma di usare solo KVM e libvirt, con i rispettivi comandi da terminale. Impari i concetti base e, chiariti quelli, sarà poi semplice anche per te scegliere il software che meglio si adatta alle esigenze reali di quello che eventualmente andrai a fare con quanto avrai imparato.

Se vuoi sommare lo spazio su disco di dischi fisicamente installati in server diversi, la strada si chiama SAN (Storage Area Network). Una SAN è una rappresentazione virtuale, utilizzabile attraverso la rete, di uno spazio di archiviazione (storage). Uno dei possibili protocolli per implementare una SAN è iSCSI (con la "i" davanti come se fosse un prodotto Apple, ma non lo è).

Una volta realizzata la SAN iSCSI, per esempio con una macchina virtuale per ognuno dei due server fisici, dovrai metterci sopra un filesystem (formattarla con LVM+ext4, btrfs o simili per intendersi). Anche per questo serve un'apposita macchina virtuale. Dovrai poi pubblicare lo stesso filesystem attraverso un opportuno protocollo di rete: scegli GFS2 di RedHat se vuoi fare le cose in grande, oppure pubblica semplicemente via NFS se non vuoi diventare vecchio prima di aver raggiunto il tuo scopo.

Arrivato qui avrai la macchina virtuale appena citata che condivide in rete un filesystem, per esempio via NFS, il cui spazio è la somma degli spazi delle partizioni dei singoli dischi sui singoli server che avevi deciso di dedicare al volume unico condiviso. Naturalmente se vuoi che tutto ciò sia anche affidabile oltre che figo a raccontarsi, i singoli dischi dei singoli server dovrebbero essere messi in RAID, ma per imparare non è necessario.

Da qui in avanti puoi iniziare a creare macchine viruali che vivono sul filesystem condiviso via NFS (ovvero il cui hard disk virtuale è semplicemente un file che risiede su quel filesystem) e che quindi possono essere migrate da un server fisico all'altro anche mentre sono accese (con opportuni comandi di libvirt).

Essendo tutto virtuale, avrai comunque un problema di dipendenze, ovvero dovrai fare in modo (attraverso uno script per esempio) che i server fisici prima di tutto facciano partire le macchine virtuali della SAN, poi montino il volume NFS e solo allora facciano partire le altre macchine virtuali del tuo laboratorio, perché prima di allora saranno inaccessibili.



Maggiori informazioni sulla lista SLiP