Veritas Volume Replicator (VVR)

Il Veritas Volume Replicator (VVR) e' un'estensione al Veritas Volume Manager (VxVM) che consente la creazione di copie consistenti dei dati su uno o piu' siti remoti, funzionalita' fondamentale per la gestione del Disaster Recovery e della Business Continuity. Il VVR permette la replicazione dei volumi, definiti 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, tipi di 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_rvg
...
# 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

# Mettendo tutto assieme...
vxprint -Ath | grep "^rl" | awk ' { print "vradmin -g ", $7, "repstatus", $3 } '|sh

# Oppure (fa quasi la stessa cosa ma avendo dimenticato di averlo gia' scritto l'ho rifatto in un altro modo)...
vxdg list | awk '{ print $1 }' | grep -v NAME | grep -v root | (while read a; do vradmin -g $a repstatus ${a%_dg}_rvg; done)

Quanto riportato dovrebbe essere sufficiente come introduzione. Ma se davvero dovete lavorare con il VVR... continuate a leggere!

Installazione e licenza

Il VVR viene installato come componente compresa nel VxVM ma richiede una licenza specifica (N.d.R. ha un costo a parte). Per controllare se e' abilitato si utilizza il comando vxlicrep.
L'abilitazione del VVR non richiede un reboot, ma debbono essere stati lanciati gli script di attivazione/boot: S94vxnm-host_infod S94vxnm-vxnetd

Creazione di un volume replicato

Prima bisogna configurare il volume secondario, poi si puo' attivare il VVR. Nell'esempio utilizziamo due host (hostA, hostB) con un DG ciascuno (diskgroupA, diskgroupB) ed una coppia di volumi replicati (sampleA, sampleB). I nomi dei diskgroup e dei volumi possono essere gli stessi (anzi generalmente e' cosi'), ma nell'esempio li utilizziamo differenti per maggior chiarezza.

vxassist -g diskgroupB make sampleB 4g layout=log logtype=dcm

Il dimensionamento dell'SRL (Storage Replicator Log) e' molto importante...

vxassist -g diskgroupB make srlB 500m

Quindi va creato l' rlink. La scelta sul sincronismo delle operazioni e' molto importante. Con OFF la modalita' e' asincrona, con OVERRIDE la modalita' e' sincrona quando il link e' attivo e asincrona con link non attivo, con FAIL la modalita' e' sempre sincrona (quindi in caso di caduta del link si blocca anche il primario).

vxmake -g diskgroupB rlink rlinkB remote_host=hostA remote_dg=diskgroupA remote_rlink=rlinkA local_host=hostB synchronous=off srlprot=dcm

Con la creazione dell'RVG si collegano assieme il volume, l'SRL ed l'rlink:

vxmake -g diskgroupB rvg rvgB rlink=rlinkB datavol=sampleB srl=srlB primary=false

Attach dell'rlink all'rvg:

vxrlink -g diskgroupB att rlinkB

Partenza dell'RVG sul secondario:

vxrvg -g diskgroupB start rvgB

Le stesse operazioni vanno svolte sul primario:

vxassist -g diskgroupA make sampleA 4g layout=log logtype=dcm

vxassist -g diskgroupA make srlA 500m

vxmake -g diskgroupA rlink rlinkA remote_host=hostB remote_dg=diskgroupB remote_rlink=rlinkB local_host=hostA synchronous=off srlprot=dcm

vxmake -g diskgroupA rvg rvgA rlink=rlinkA datavol=sampleA srl=srlA primary=true

Il nome del volume puo' anche essere diverso tra primary e secondary. In questo caso bisogna definirne il nome:

vxedit -g diskgroupB set primary_datavol=sampleA sampleB
vxrlink -g diskgroupA att rlinkA

vxrvg -g diskgroupA start rvgA

Siete pigri? Fate fare tutto al vradmin!

vxassist -g diskgroupA make sampleA 1g
vxassist -g diskgroupA make srlvol 100m

vradmin -g diskgroupA createpri vvrdg sampleA srlvol
vradmin -g diskgroupA addsec vvrdg primarynode drnode1 prlink=rlk_10.208.131.52 srlink=rlk_10.208.131.53
vradmin -g diskgroupA -a startrep vvrdg
Cancellazione di un volume replicato

Per cancellare un volume VVR (senza perdere i dati) vanno seguiti i seguenti passi:

vxrlink -g diskgroupA det rlinkA
vxrlink -g diskgroupB det rlinkB

vxrvg -g diskgroupA stop rvgA
vxrvg -g diskgroupB stop rvgB

vxvol -g disgroupA stop sampleA

vxvol -g diskgroupA dis sampleA
vxvol -g diskgroupB dis sampleB

vxedit -rf rm rvgA
vxedit -rf rm rvgB
Resize di un volume replicato

La variazione di dimensione di un volume con il VVR funziona come quella di un normale volume. Il VVR non cambia le dimensioni dei volumi tra i diversi siti ma questo va fatto manualmente sulla coppia di volumi assicurandosi che il volume sul secondario sia sempre piu' grande di quello sul primario.
Quindi se si vuole aumentare la dimensione va fatto prima sul secondario e poi sul primario mentre se si vuole diminuire la dimensione va fatto prima sul primario e poi sul secondario.
Ecco i comandi:

vxrvg stop rvgA
vxrlink det rlinkA
vxvol dis srlA

vxassist growto srlA 2gb

vxvol aslog rvgA srlA
vxrlink -f att rlinkA
vxvg start rvgA
Test Fail over (primary up)

I comandi che seguono riportano cosa deve essere fatto per trasformare un secondario in primario e viceversa con i sistemi entrambe attivi e connessi tra loro. E' una tipica procedura di test ma viene comunque spesso utilizzata anche per attivita' di manutenzione.
Ecco i comandi:

/etc/rc3.d/S99start-app stop
umount /filesysA
vxrvg stop rvgA

vxrlink det rlinkA
vxvol dis srlA
vxedit set primary=false rvgA
vxvol aslog rvgA srlA
vxrvg start rvgA
vxrlink -f att rlinkA

vxrvg stop rvgB
vxrlink det rlinkB
vxvol dis srlB
vxedit set primary=true rvgB

vxedit set remote_host=hostA local_host=hostB remote_dg=diskgroupAmremote_rlink=rlinkA rlinkB

vxedit set primary_datavol=sampleB sampleB
vxedit set primary_datavol=sampleB sampleA

vxrlink -f att rlinkB
vxrvg start rvgB
Fail over (primary down)

In questo caso si considera un caso "vero" in cui il primario NON e' piu' disponibile e va attivato il secondario in sua vece. Quando il "vecchio primario" sara' nuovamente disponibile sara' quindi possibile riallinearlo al "nuovo primario".
Ecco i comandi per promuovere il secondario a primario:

vxrvg stop rvgB
vxrlink det rlinkB
vxvol dis srlB

vxedit -g diskgroupB set primary=true rvgB

vxvol aslog rvgB srlB
vxedit set primary_datavol=sampleB sampleB

vxrvg start rvgB

Per riattivare il "vecchio primary":

vxrvg stop rvgA
vxrlink det rlinkA

vxvol dis srlA
vxedit set primary=false rvgA

vxvol aslog rvgA srlA
vxedit set primary_datavol=sampleB sampleA

vxrlink -f att rlinkA
vxrvg start rvgA

vxedit set remote_host=hostA local_host=hostB remote_dg=diskgroupA remote_rlink=rlinkA
vxrlink -a att rlinkB

Quando termina la sincronizzazione (attenzione solo allora altrimenti si ha una perdita di dati) e' nuovamente possibile invertire il ruolo tra primario e secondario con gli stessi passi utilizzati nel test fail over.

Altri comandi ed informazioni

Informazioni e statistiche:

vxrlink [-i interval] stats rlinkA

vxrlink -g diskgroupA status rlinkA

vxprint -Pl              # RLink full info
vxprint -Vl              # RVG   full info

Modifica della modalita' di replicazione (sincrona/asincrona):

vxedit set synchronous=[off|override|fail] rlinkA

La valutazione a priori della dimensione degli SRL e' molto difficile... Proova! e' il metodo migliore ;-)

L'upgrade della versione del VVR che richiede spesso una specifica procedura, quando cambia in modo significativo la rvg_version che e' riportata nell'header dell'SRL. Per controllare la versione dell'RVG si utilizza il comando vxprint -Vl, nel campo info viene riportata la rvg_version. La versione del layout dei diskgroup e' generalmente indipendente... ma non sempre! La versione del diskgroup e' riportata dal comando vxprint -Gl, nel campo version e' riportata la versione. Per cambiare la versione del DG il comando e' vxdg -T 140 upgrade DiskGroup.

Oltre alla documentazione ufficiale, forse sin troppo ampia, e' molto ben fatta la pagina: http://www.blight.com/~rick/veritas/vvr.html


Veritas Volume Replicator (VVR)
Data: 1 Aprile 2009
Versione: 1.0.3 - 31 Giugno 2009
Autore: mail@meo.bogliolo.name