OpenVZ
OpenVZ è una tecnologia di virtualizzazione a livello del sistema operativo basata sul kernel Linux e il sistema operativo. OpenVZ consente a un server fisico di eseguire più istanze isolate di un sistema operativo, note come contenitori, Virtual Private Servers (VPSs), o gli ambienti virtuali (VEs).
Rispetto alle macchine virtuali create ad esempio da VMware e a tecnologie di paravirtualizzazione usate da Xen, OpenVZ richiede che sia l’host sia il guest siano GNU/Linux (anche se esistono contenitori diversi per differenti distribuzioni).
OpenVZ è una versione nata da Parallels Virtuozzo Container, un prodotto software proprietario fornito da Parallels, Inc; OpenVZ è sotto licenza GNU GPL versione 2 ed il suo progetto è sostenuto e sponsorizzato da Parallels.
[ad#basso]
OpenVZ è composta da un kernel personalizzato e strumenti a livelli utente.
Kernel
Il kernel di OpenVZ è Linux, modificato per aggiungere il supporto per i contenitori OpenVZ. Il kernel modificato fornisce la virtualizzazione, l’isolamento, gestione delle risorse, e checkpointing.
Virtualizzazione e l’isolamento
Ogni contenitore è una entità separata, e in generalmente si comporta come un server fisico. Ciascun container possiede:
- File
Librerie di sistema, applicazioni, /proc e /sys virtualizzati, pure lock virtualizzati…
- Utenti e gruppi
Ogni contenitore ha la sua root per gli utenti, così come altri utenti e gruppi.
- Processo albero
Un contenitore vede solo i propri processi (a partire da init). PID sono virtualizzati, in modo che il PID di init è 1 come dovrebbe essere.
- Rete
Dispositivo di rete virtuale, che consente a un contenitore di disporre di un proprio indirizzo IP, oltre a una serie di regole per netfilter (iptables) e di routing.
- Dispositivi
Se necessario, qualsiasi contenitore può essere concesso l’accesso a dispositivi fisici come le interfacce di rete, porte seriali, partizioni del disco, ecc
- Oggetti IPC
Memoria condivisa, i semafori, i messaggi.
Gestione delle risorse
La gestione delle risorse usando OpenVZ è costituita da tre componenti: due livello di quota disco, uno scheduler CPU di tipo fair, e l’ utente beancounters (amministratore). Queste risorse possono essere variate durante l’esecuzione del contenitore, così beneficiando della possibilità di non riavviarlo.
Due a livello di quota disco
Ogni contenitore può avere le proprie quote di disco, indicate in termini di blocchi del disco e inode (circa il numero dei file). All’interno del contenitore, è possibile utilizzare gli strumenti standard di UNIX per amministrare utenti e gruppi e le relative quote disco.
CPU scheduler
Lo scheduler della CPU in OpenVZ è a due livelli di attuazione della strategia di scheduling fair-share.
Al primo livello, lo scheduler che decide a quale contenitore dare un ciclo di tempo della CPU, secondo il valore impostato nei cpuunits di ogni contenitore. All’altro livello c’è uno scheduler di Linux standard che decide quale processo va in esecuzione in un contenitore che, utilizzando le normali priorità dei processi definite da Linux.
E ‘possibile impostare valori diversi per la CPU in ciascun contenitore così che i cicli della CPU verranno distribuiti in accordo con tali valori.
Sono possibili anche limiti precisi, come ad esempio il 10% del tempo totale di elaborazione della CPU.
I/O scheduler
Simile allo scheduler della CPU, lo scheduler di input e output in OpenVZ è a due livelli, utilizzando lo CFQ I/O scheduler (di Jens Axboe) al suo secondo livello.
Ad ogni contenitore è assegnata una priorità di I/O, lo scheduler distribuisce la banda disponibile in base alle priorità assegnate. In questo modo nessun singolo contenitore può saturare l’ I/O di un canale.
Utente Beancounters
L’utente Beancounters è un insieme di contatori, limiti e garanzie per i contenitori. Vi è un insieme di circa 20 parametri che si dispongono per controllare tutti gli aspetti del contenitore. Ciò è per evitare che un contenitore si attribuisca tutte le risorse di sistema.
Tali risorse consistono principalmente in memoria e in vari oggetti del kernel come ad esempio segmenti IPC di memoria condivisa, e buffer di rete. Ogni risorsa può essere vista da /proc /user_beancounters e ha cinque valori associati ad essa: uso corrente, massimo uso (per la vita di un contenitore), barriera, limite, e contatore degli errori (fail counter). La barriera e il limite possono essere pensati come un limite leggero e un limite rigido; se una qualsiasi risorsa supera il limite, il contatore degli errori è incrementato. Questo permette all’amministratore di individuare problemi tenendo sotto controllo /proc/user_beancounters nel contenitore.
Checkpointing e live migration
La “live migration” e il checkpointing sono stati implementati in OpenVZ a metà del mese di aprile (2006). In questo modo è possibile spostare un contenitore da un server fisico a un altro senza lo spegnimento del contenitore. Il processo è noto come checkpointing: un contenitore è congelato e tutto il suo stato viene salvato in un file sul disco. Questo file può quindi essere trasferiti su un’altra macchina e il contenitore può essere scongelati (ripristinato) lì; il ritardo, ciò la non disponibilità del container, è di circa un paio di secondi. Di solito lo stato è conservato completamente perciò questa pausa può sembrare un normale ritardo computazionale.
OpenVZ caratteristiche distinte
- Scalabilità
Siccome OpenVZ impiega come un unico modello del kernel, è come scalabile come il kernel Linux 2,6, con i benefici che ne comporta, esempio: supporta fino a 64 processori e fino a 64 GiB di RAM. Un unico contenitore può scalare fino a raggiungere tutte le possibilità fisiche, vale a dire utilizzare tutte le CPU e tutto lo spazio RAM.
- Prestazioni
L’overhead osservati in OpenVZ è limitato, e può essere trascurato in molti scenari.
- Densità
OpenVZ è in grado di ospitare centinaia di contenitori su un buon hardware (le principali limitazioni sono RAM e CPU).
Il grafico mostra la relazione del tempo di risposta del contenitore con un server web Apache col variare del numero di contenitori. Le misurazioni sono state effettuate su un macchina con 768 MiB di RAM; ogni contenitore fa eseguire l’insieme di processi: init, syslogd, crond, sshd e Apache. I deamon di Apache servono pagine statiche, che sono prelevate da http_load, ed è stato registrato il primo tempo di risposta. Come il numero di contenitori crescere, il tempo di risposta diventa più elevato a causa della carenza di RAM e swap eccessivi.
In questo scenario è possibile eseguire fino a 120 contenitori con 768 MiB di RAM. Cresce in maniera lineare, per cui è possibile eseguire fino a circa 320 contenitori su server dotato di 2 GiB di RAM.
- Gestione generale
Un amministratore (cioè root) di OpenVZ su un server fisico (conosciuto anche come un nodo hardware o sistema host) può vedere tutti i processi in esecuzione e i file su tutti i contenitori del sistema. Ciò rende possibile la gestione generale (mass management). VMware o Xen sono utilizzati per il consolidamento del server: per applicare un aggiornamento a 10 server virtuali è richiesto che una amministratore acceda a ciascuna virtual machine ed esegua l’aggiornamento mentre OpenVZ con un semplice script di shell in grado di aggiornare tutti i contenitori in una sola volta.
Voce OpenVZ tratta e tradotta da Wikipedia inglese.