Utilizzo di un Volume Manager su Unix: note pratiche

Le sempre crescenti richieste in termini di memoria di massa richiedono la possibilita' di gestire in modo semplice e flessibile i dischi in ambiente Unix.

La possibilita' di gestire i dischi con opzioni quali il mirroring, lo striping, il RAID-5, la concatenazione, .. e' quindi molto utile.

Tra i prodotti piu' diffusi ed utilizzati (spesso sotto etichette differenti) vi e' il Veritas Volume Manager. In questo breve documento ne sono riportati i principali concetti ed alcuni esempi pratici. Alcune elementi e note sono comunque validi per diversi Volume Manager.

Utilizzo di un Volume Manager

L'utilizzo di un Volume Manager comporta diversi vantaggi:

I principali utilizzi di un Volume Manager sono i seguenti:

Gli oggetti trattati

Su Unix si opera generalmente a livello di partizioni di disco. Su tali partizioni possono essere creati file system (che vengono quindi montati) oppure possono essere utilizzate direttamente (eg. swap, raw partition di un RDBMS).

Con un volume manager viene inserito un livello logico intermedio che si occupa di gestire la parte fisica di indirizzamento al disco e fornisce al sistema operativo i "volumi". Dal punto di vista del sistema Unix un volume viene utilizzato come se si trattasse di una partizione (e' quindi possibile creare un file system, ...). Vengono infatti creati i relativi file /dev a blocchi ed a caratteri.

Il volume manager interfaccia direttamente i dischi fisici. Tali dischi vengono spezzati in parti chiamate subdisk. La dimensione massima di un subdisk e' quindi quella del disco stesso.

Aggregando uno o piu' subdisk e' possibile creare un plex. Quando si utilizzano piu' subdisk questi possono essere visti in concatenazione (in tal modo la dimensione del plex puo' superare la dimensione di un disco fisico), in striping (in tal modo le operazioni di lettura e scrittura vengono eseguite in parallelo su piu' dischi fisici) o in raid (che fornisce funzionalita' di fault tolerance).

E' quindi possibile creare un volume assegnando uno o piu' plex. Quando i plex associati (ed attivi) sono piu' di uno il volume manager li tiene costantemente aggiornati tra loro (sono quindi in mirroring). Nel caso in cui si verifichi un errore fisico su un disco il relativo plex viene posto in stato di detach e le operazioni continuano normalmente sugli altri plex. Anche l'operazione di riallineamento di un plex puo' avvenire in linea (naturalmente richiede piu' tempo).

Su alcune versioni di volume manager (eg. Veritas VxVM, SUN Solstice) sono definiti i disk group. Ad ogni disk group corrispondono volumi, plex e dischi distinti. Sul disk group principale (rootdg) vengono salvati i dati della configurazione del volume manager. E' opportuno utilizzare tale disk group solo per i volumi di sistema e non per i dati. Sugli altri disk group e' infatti possibile effettuare operazioni di deport ed import (che consentono ripristini in alcune situazioni di anomalia).

La figura seguente riporta la gerarchia degli oggetti su VxVM:

VxVM Objects Hierarchy

 

Funzioni speciali

Vi sono funzionalita' particolari presenti solo in alcuni VM.

Su alcune versioni di volume manager i volumi posti in mirroring possono avere un volume log. Sul volume log vengono registrate le diverse attivita' svolte sul volume. In tal modo in caso di problema temporaneo su un plex non e' necessario rieffettuare una lunga operazione di riallineamento ma vengono ribaltati i soli cambiementi occorsi (mantenuti sul volume log).

Alcuni volume manager offrono la funzionalita' di bootability ovvero la possibilita' di effettuare il boot del sistema operativo non solo dal disco principale ma anche dalle copie in mirroring.

In alcuni casi e' disponibile la funzione di Hot relocation di un disco. Quando questa funzione e' presente, nel caso che un disco in una configurazione di mirroring o RAID-5 abbia un malfunzionamento, viene automaticamente sostituito dal disco stabilito.

In alcuni sistemi e' disponibile la Hot relocation di un singolo subdisk nel caso in cui il problema si presenti su una sola parte del disco.

Interfaccia grafica

Per una piu' semplice gestione dei dischi, dei volumi, ... e' spesso fornita un'interfaccia grafica (in genere sotto X-Windows). Spesso vi sono comandi ed opzioni semplificate (eg. selezionando un disco fisico e lanciando la creazione di un volume vengono creati automaticamente sub-disk, plex, volumi, log, file system, ..).

Potendo utilizzare tale interfaccia non leggete questo documento ed utilizzatela direttamente. E' molto piu' facile e divertente.

L'importante e' conoscere i concetti di fondo dell'architettura del Volume Manager utilizzato.

Come esempio le piu' recenti versioni di VxVM offrono il Veritas Enterprise Administrator (eg. /opt/VRTSob/bin/vea), su SUN e' disponibile il comando vxva, ...

 

Interfaccia a comando

E' sempre fornita anche un'interfaccia a comando che e' necessaria in alcuni casi (terribili) e su stazioni che non forniscono l'interfaccia X.
A seconda delle versioni e dei porting i comandi possono cambiare leggermente (eg. vxprint vs volprint) ma la logica e' sempre la stessa.

 

Quello che segue e' un esempio completo di creazione di un volume a partire dai singoli componenti (vi sono comandi che fanno tutto in meno passi ma cosi' e' piu' chiaro e completo). Quindi viene "staccato" un plex e poi nuovamente agganciato.

# Creazione dei subdisk
volmake sd sc0d1s3-01 /dev/dsk/sc0d1s3,0 len=1400000
volmake sd sc0d1s3-02 /dev/dsk/sc0d1s3,1400000 len=103000
# ....
volmake sd sc1d1s3-01 /dev/dsk/sc1d1s3,0 len=1400000

# Creazione dei plex
volmake plex nomepl-0 sd=sc0d1s3-01
volmake plex nomepl-1 sd=sc1d1s3-01

# Creazione del volume
volmake -U fsgen vol nomevol plex=nomepl-0,nomepl-1

# Modifica delle permission sul volume (deve essere effettuata 
# sul volume e non sui file /dev)
voledit set fstype=gen user=oracle group=dba mode=660 nomevol
voledit set fstype=fsgen user=root group=bin mode=660 nomevol

# Attivazione del volume
volume init active nomevol
# volume init [clean active enable zero]

# Creazione di un file system sul volume
mkfs -F vxfs /dev/rvol/nomevol 1400000

# Disconnessione di un plex e subdisk
volplex dis nomepl-1
volsd dis sc1d1s3-01
# Ripristino della situazione
volsd assoc nomepl-1 sc1d1s3-01
volplex att nomevol nomepl-1

Esempio di distruzione di un volume e di tutti i suoi componenti con comandi singoli (vi e' un comando che fa tutto ma cosi' e' piu' bello):

# Disassociazione del volume da un plex
volplex dis nomepl-0
# Disassociazione del secondo plex (richiede l'opzione di force)
# poiche' si tratta dell'ultimo plex associato
volplex -oforce dis nomepl-1

# Cancellazione del volume
voledit -f rm nomevol

# Disassociazione dei subdisk dai plex
volsd dis sc0d1s3-01
volsd dis sc1d1s3-01

# Cancellazione dei plex
voledit -f rm nomepl-0
voledit -f rm nomepl-1

# Cancellazione dei subdisk
voledit -f rm sc0d1s3-01
voledit -f rm sc1d1s3-01

Per controllare lo stato dei volumi e degli altri oggetti associati e' utilizzabile il comando volprint. Con l'opzione -t si hanno maggiori dettagli e con l'opzione -l tutti i possibili dettagli. Altri comandi per visualizzare lo stato corrente e le statistiche di utilizzo sono volinfo e volstat.

Un elenco completo dei comandi e' riportato in questo documento.
I diversi oggetti passano attraverso stati differenti. La figura seguente riportano i principali stati in cui si puo' trovare un plex:

VxVM Plex States - State diagram

Installazione

Non e' sempre necessario effettuare l'installazione poiche' spesso il volume manager fa parte del software di sistema preinstallato.
A seconda del sistema operativo ospite le modalita' possono variare... tipicamente vengono lanciati script installer o installmp (per le patch) presenti nel software distribuito da Veritas. E' invece piu' frequente il caso in cui e' necessario incapsulare i dischi i boot (opzionale) e quindi far gestire dal volume manager gli altri dischi. I passi da seguire sono indicativamente questi:

Start vxconfigd in disabled mode.
# vxconfigd -d

Create the /etc/volboot file.
# vxdctl init

Add license key(s), if needed.
# vxserial -c

Make a new rootdg group.
# vxdg init rootdg

Initialize a new disk.
# /etc/vx/bin/vxdisksetup -i c0t2d0

Add disk record.
# vxdisk -f init c0t2d0s2

Add disk name to rootdg disk group.
# vxdg -g rootdg adddisk disk01=c0t2d0s2

Enable transactions.
# vxdctl enable

Remove the install-db file, if present.
# rm /etc/vx/reconfig.d/state.d/install-db

To optionally add additional disks into the 'rootdg' diskgroup,
run the following two commands for each disk:
# /etc/vx/bin/vxdisksetup -i c#t#d#
# vxdg -g rootdg adddisk disk##=c#t#d#s2
	

Altre informazioni

Le versioni ed i comandi nel tempo sono cambiati (eg. vol -> vx), ma la logica di fondo e' sempre la stessa...
Dall'introduzione dei Volume Manager ad oggi l'evoluzione tecnologica e' stata notevole. La gestione delle SAN e del multipath, soluzioni di Disaster Recovery, sono funzionalita' che si sono aggiunte sucessivamente. Nel seguito diamo qualche accenno...

Il comando vxassist permette di lanciare in modo semplificato una catena di operazioni.

Una funzionalita' molto sfruttata e' quella degli SNAPSHOT che consentono di disporre di piu' copie degli stessi volumi. Affiancata al Fast Mirror Resync (disponibile come feature dalla versione 3.1), consente di gestire in modo semplice (vxassist snapstart|snapshot|snapclear) la replicazione di volumi per molteplici usi.

Il demone di configurazione vxconfigd, attivo sul sistema Unix ospite, mantiene le configurazioni di dischi e volumi e si occupa della sincronizzazione tra comandi lanciati ed il kernel.
Il comando vxdctl permette il controllo del demone di configurazione. Ad esempio con vxdctl enable si porta in stato di enable il demone e fa effettuare una nuova scansione delle risorse presenti sul sistema. In questo modo dischi aggiunti dinamicamente al sistema possono essere riconosciuti ed utilizzati senza richiedere un reboot.

Con il comando vxdmpadm si controlla il Dynamic Multipathing (DMP). Tale facility permette di definite nodi che utilizzano controller differenti per raggiungere gli enclosure. Insomma gestisce il multipath dei dischi!

Spesso i volume manager sono utilizzati su sistemi configurati in alta affidabilita' con un cluster. In questo caso i disk group debbono migrare da un sistema all'altro in caso di switch. Per disassociare un disk group da un sistema il comando e' vxdg -g disk_group deport mentre per importare un disk group il comando e' vxdg -g disk_group import. La lista di tutti i dischi visibili da un sistema, compresi anche quelli contenuti in disk group non importati e' vxdisk -o alldgs list.

Informazioni specifiche sul Volume Manager per sistema operativo si trovano nei documenti: SPARCstorage Volume Manager, Veritas VM su HP-UX, Veritas VM su IBM AIX, LSM su Digital Tru64, ... Un elenco riassuntivo dei comandi e' riportato in questo documento.

Oracle ODM

Oracle Disk Manager (ODM) e' un'implementazione piu' efficiente dello Unix I/O attivabile quando Oracle utilizza un volume manager. ODM e' stato sviluppato in modo congiunto da Veritas e da Oracle.
Dal punto di vista tecnico l'abilitazione dell'ODM e' molto semplice poiche' Oracle viene distribuito con una libreria stub che e' sufficiente sostituire con quella distribuita da Veritas:

Oracle9i
Abilitare ODM 		ln -s /opt/VRTSodm/libodm.sl $ORACLE_HOME/lib/libodm9.sl
Disabilitare ODM 	ln -s $ORACLE_HOME/lib/libodmd9.so libodm9.so

Oracle10i
Abilitare ODM 		ln -s /opt/VRTSodm/libodm.sl $ORACLE_HOME/lib/libodm10.sl
Disabilitare ODM 	ln -s $ORACLE_HOME/lib/libodmd10.so libodm10.so
Possono esserci piccole variazioni ai comandi a seconda delle versioni, dei sistemi operativi ospite e della piattaforma... ma in sostanza si usa un link. Ovviamente il link va effettuato a DB non attivo!
Il controllo dell'effettivo utilizzo di ODM da parte di Oracle puo' essere quindi effettuato:

Volume Replicator

L'estensione al Veritas Volume Manager (VVM) che consente la gestione del disaster recovery e' il Veritas Volume Replicator (VVR). Il VVR permette la replicazione di volumi, definito su Replicated Volume Group (RVG), verso un sistema remoto. Sono supportate fino a 32 repliche che hanno tipicamente gli stessi nomi e dimensioni del volume primario ma non hanno altre limitazioni (eg. gli Enclosure possono utilizzare HW differenti, RAID diversi, ...). Il passaggio dei dati avviene su rete IP consentendo una distanza geografica tra i siti. Il link logico tra i siti e' definito RLink e la sua caratteristica fondamentale e' l'indirizzo IP. La replicazione puo' essere sincrona o asincrona. La replicazione sincrona consente di operare in "zero data loss" ma puo' rallentare le applicazioni o bloccarle in caso di assenza del link. La replicazione asincrona non induce particolari rallentamenti o blocchi nelle applicazioni ed utilizza lo Storage Replicator Log (SRL) come buffer. La replicazione, in condizioni di normale funzionamento, rispetta l'ordine di scrittura; tale comportamento, necessario per mantenere la consistenza di applicazioni quali i gestori di basi dati, viene definita write order fidelity. Tipicamente anche la replicazione asincrona viene trasmessa ed applicata immediatamente. Se si presenta un calo della banda della rete o si ha un aumento di scritture sui dischi, la replicazione puo' subire ritardi e viene utilizzato l'SRL. Nel caso in cui questo non sia sufficiente (tipicamente dopo ore di indisponibilita' del link di rete), il VVR utilizza la bitmap Data Change Map (DCM) per registrare i settori di disco modificati e non trasmessi in remoto; in questo caso al ripristino del link non sara' rispettata la write order fidelity fino alla completa sincronizzazione dei dati.

Il VVR e' completamente integrato al VxVM. Percio' con vxprint -Ath vengono riportate tutte le informazioni sulla configurazione dei volumi, degli SRL, ... Comandi specifici per la gestione sono vxrlink e vradmin:

# Per determinare su quali volumi e' presente un RLINK
vxprint -Ath | grep ^rl
rl rlk_10.10.20.29_test1_rvg test1_rvg CONNECT ACTIVE 10.10.20.29 test1_dg rlk_10.102.201.115_test1_rvg
rl rlk_10.10.20.34_test2_rvg test2_rvg CONNECT ACTIVE 10.10.20.34 test2_dg rlk_10.102.201.120_test2_rvgi
...
# Per determinare la dimensione degli SRL
vxprint -Ath | grep ^v | grep SRL

# Per conoscere lo stato di un RLINK
vxrlink -g  test1_dg status rlk_10.10.20.29_test1_rvg
VxVM VVR vxrlink INFO V-5-1-4467 Rlink ... is up to date

# Per raccogliere la configurazione degli RVG
vradmin printvol
vradmin printrvg

# Per conoscere lo stato di replicazione
vradmin -g test2_dg repstatus test2_rvg
Replicated Data Set: provprod_rvg
Primary:
  Host name:                  prod-rep
  RVG name:                   test2_rvg
  DG name:                    test2_dg
  RVG state:                  enabled for I/O
  Data volumes:               4
  VSets:                      0
  SRL name:                   SRL_provprod
  SRL size:                   15.00 G
  Total secondaries:          1

Secondary:
  Host name:                  dr-rep
  RVG name:                   test2_rvg
  DG name:                    test2_dg
  Data status:                consistent, up-to-date
  Replication status:         replicating (connected)
  Current mode:               asynchronous
  Logging to:                 SRL
  Timestamp Information:      behind by 0h 0m 0s

Il VVR e' disponibile come componente del VxVM da parecchie versioni... ma richiede una specifica abilitazione (quindi con una licenza ed un costo a parte). Maggiori dettagli sono riportati nel documento Note sul Veritas Volume Replicator (VVR).


Testo: Utilizzo di un Volume Manager su Unix: note pratiche
Data: 4 Agosto 1997
Versione: 1.2.10 - 31 Settembre 2008
Autore: mail@meo.bogliolo.name