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:
Quanto riportato dovrebbe essere sufficiente come introduzione.
Ma se davvero dovete lavorare con il VVR... continuate a leggere!
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.
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.
Il dimensionamento dell'SRL (Storage Replicator Log)
e' molto importante...
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).
Con la creazione dell'RVG si collegano assieme il volume, l'SRL ed l'rlink:
Attach dell'rlink all'rvg:
Partenza dell'RVG sul secondario:
Le stesse operazioni vanno svolte sul primario:
Il nome del volume puo' anche essere diverso tra primary e secondary.
In questo caso bisogna definirne il nome:
Siete pigri? Fate fare tutto al vradmin!
Per cancellare un volume VVR (senza perdere i dati) vanno
seguiti i seguenti passi:
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.
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.
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".
Per riattivare il "vecchio primary":
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.
Informazioni e statistiche:
Modifica della modalita' di replicazione (sincrona/asincrona):
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)
# 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)
L'abilitazione del VVR non richiede un reboot, ma debbono
essere stati lanciati gli script di attivazione/boot:
S94vxnm-host_infod S94vxnm-vxnetd
vxassist -g diskgroupB make sampleB 4g layout=log logtype=dcm
vxassist -g diskgroupB make srlB 500m
vxmake -g diskgroupB rlink rlinkB remote_host=hostA remote_dg=diskgroupA remote_rlink=rlinkA local_host=hostB synchronous=off srlprot=dcm
vxmake -g diskgroupB rvg rvgB rlink=rlinkB datavol=sampleB srl=srlB primary=false
vxrlink -g diskgroupB att rlinkB
vxrvg -g diskgroupB start rvgB
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
vxedit -g diskgroupB set primary_datavol=sampleA sampleB
vxrlink -g diskgroupA att rlinkA
vxrvg -g diskgroupA start rvgA
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
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
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
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
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
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
vxrlink [-i interval] stats rlinkA
vxrlink -g diskgroupA status rlinkA
vxprint -Pl # RLink full info
vxprint -Vl # RVG full info
vxedit set synchronous=[off|override|fail] rlinkA
Data: 1 Aprile 2009
Versione: 1.0.3 - 31 Giugno 2009
Autore: mail@meo.bogliolo.name