Before configuring, you need to make sure two scripts have been run from /etc/rc2.d: S94vxnm-host_infod and S94vxnm-vxnetd. VVR will not work if these scripts don't get run AFTER VVR licenses have been instralled. So if you install VVR licenses and don't reboot immediately after, run these scripts to get VVR to work.
Before the Primary can be set up, the Secondary must be configured.
First, use vxassist to create your datavolumes. Make sure to specify the logtype as DCM (Data Change Map, which keeps track of data changes if the Storage Replicator log fills up) if your replicated volumes are asynchronous.
vxassist -g diskgroupB make sampleB 4g layout=log logtype=dcm
Then create the SRL (Storage Replicator Log) for the volume. Carefully decide how big you want this to be, based on available bandwidth between your hosts and how fast your writes happen.
See pages 18-25 of the SRVM Configuration Notes for detailed (excruciatingly) notes on selecting your SRL size.
vxassist -g diskgroupB make srlB 500m
Next make the rlink object:
vxmake -g diskgroupB rlink rlinkB remote_host=hostA remote_dg=diskgroupA remote_rlink=rlinkA local_host=hostB synchronous=[off|override|fail] srlprot=dcm
Use synchronous=off only if you can stand to lose some data. Otherwise, set synchronize=override or synchronize=fail. override runs as synchronous (writes aren't committed until they reach the secondary) until the link dies, then it switches to asynchronous, storing pending writes to the secondary in the SRL. When the link comes back, it resyncs the secondary and switches back to Synchronous mode. synchronize=fail fails new updates to the primary in the case of a downed link.
In any of the above cases, you'll lose data if the link fails and, before the secondary can catch up to the primary, there is a failure of the primary data volume. This is why it's important to have both redundant disks and redundant network paths.
Now make the RVG, where you put together the datavolume, the SRL, and the rlink:
vxmake -g diskgroupB rvg rvgB rlink=rlinkB datavol=sampleB srl=srlB primary=false
Attach the rlink to the rvg:
vxrlink -g diskgroupB att rlinkB
Start the RVG on the Secondary:
vxrvg -g diskgroupB start rvgB
Now work begins on the primary. As with the Secondary, make data volumes, an SRL, and an rlink:
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|override|fail] srlprot=dcm
Make the RVG for the primary. Only the last option is different:
vxmake -g diskgroupA rvg rvgA rlink=rlinkA datavol=sampleA srl=srlA primary=true
Now go back to the secondary. When we created the secondary, brain-dead Veritas figured the volume on the Seconday and the Primary would have the same name, but when we set this up, we wanted to have the Primary datavolume named sampleA and the Secondary datavolume be sampleB. So we need to tell the Secondary that the Primary is sampleA:
vxedit -g diskgroupB set primary_datavol=sampleA sampleB
Now you can attach the rlink to the RVG and start the RVG. On the Primary:
vxrlink -g diskgroupA att rlinkA
You should see output like this:
vxvm:vxrlink: INFO: Secondary data volumes detected with rvg rvgB as parent:
vxvm:vxrlink: INFO: sampleB: len=8388608 primary_datavol=sampleA
Finally, start I/O on the Primary:
vxrvg -g diskgroupA start rvgA
First, detach the rlinks on the Primary and then the Secondary:
vxrlink -g diskgroupA det rlinkA
vxrlink -g diskgroupB det rlinkB
Then stop the RVG on the primary and then the secondary:
vxrvg -g diskgroupA stop rvgA
vxrvg -g diskgroupB stop rvgB
On the primary, stop the datavolumes:
vxvol -g disgroupA stop sampleA
If you want to keep the datavolumes, you need to disassociate them from the RVG:
vxvol -g diskgroupA dis sampleA
vxvol -g diskgroupB dis sampleB
Finally, on both the Primary and the Secondary, remove everything:
vxedit -rf rm rvgA
vxedit -rf rm rvgB
You may need to grow an SRL if your pipe shrinks (more likely if your pipe gets busier) or the amount of data you are sending increases. See pages 18-25 of the SRVM Configuration Notes for detailed (excruciatingly) notes on selecting your SRL size.
To grow an SRL, you must first stop the RVG and disassociate the SRL from the RVG:
vxrvg stop rvgA
vxrlink det rlinkA
vxvol dis srlA
From this point, you can grow your SRL (which is now just an ordinary volume):
vxassist growto srlA 2gb
Once your SRL has been successfully grown, reassociate it with the RVG, reattach the RLINK, and start the RVG:
vxvol aslog rvgA srlA
vxrlink -f att rlinkA
vxvg start rvgA
You can get get useful stats out of the vxrlink command:
vxrlink [-i interval] stats rlinkA
Output should look similar to netstat. If you run without an interval, you can see cumulative statistics. With an interval, you get the stats that hit during the interval.
# vxrlink -i 5 rlinkA
Messages Errors Flow Control
-------- ------ ------------
# Blocks RT(usec) Timeout Stream Memory Delays NW Bytes NW Delay
28 0 512 0 0 0 0 5000 1
0 0 512 0 0 0 0 5000 1
0 0 512 0 0 0 0 5000 1
0 0 512 0 0 0 0 5000 1
0 0 512 0 0 0 0 5000 1
0 0 512 0 0 0 0 5000 1
0 0 512 0 0 0 0 5000 1
10 0 2110 0 0 0 0 5000 1
256 0 22766 0 0 0 0 5000 1
468 0 15417 18 0 0 0 5000 4
18 0 7818 0 0 0 0 5000 4
0 0 7818 0 0 0 0 5000 4
0 0 7818 0 0 0 0 5000 4
The sample output is from a Secondary system, so there are no Blocks Transmitted.
You can use vxrlink to check the status of an rlink and SRL:
vxrlink -g diskgroupA status rlinkA
Output should look like this:
Rlink rlinkA has 8 outstanding writes, occupying 520 Kbytes (1%) on the SRL
If there are no outstanding writes and the SRL has been fully played, you will see this message:
Rlink rlinkA is up to date
You can only use this command on the primary. Trying it on the secondary will just result in Veritas yelling at you.
vxprint can also give you some useful info, and it comes with some shortcuts.
vxprint -Pl
vxprint -Vl
The first command lists all the RLINKs on the system. The second lists all the RVGs.
You can use this info to check VVR settings and some basic status. Check the flags for the RLINK to make sure that both systems are connected and consistent, the IPs and ports are set right, etc.
In the output for an RVG, you can see listed in the flags line if an RVG is set as the Primary of Secondary node.
to set the synchronous variable for an RLINK, do the following:
vxedit set synchronous=[off|override|fail] rlinkA
There are two situations where you would have to fail from a primary. The first is in preparation for an outage of the Primary, in which case you can happily turn off your app, switch the Primary to a Secondary, switch the Secondary to a Primary, and start this up again.
The second case is when your Primary goes down in flames and you need to get your Secondary up as a Primary.
If your primary is still functioning:
First, you'll need to turn off your applications, umount any filesystems on from your datavolumes, and stop the rvg:
/etc/rc3.d/S99start-app stop
umount /filesysA
vxrvg stop rvgA
If you can't umount your filesystems because of running apps, DON'T go any further! You'll make your life harder in the future, and you might lose data.
Once you've stopped the RVG, you need to detach the rlink, disassociate the SRL volume (you can't edit the PRIMARY RVG attribute while an SRL is associated), change PRIMARY to false, and bring everything back up:
vxrlink det rlinkA
vxvol dis srlA
vxedit set primary=false rvgA
vxvol aslog rvgA srlA
vxrvg start rvgA
vxrlink -f att rlinkA
Now go to work on the Old Secondary to bring it up as the new Primary.
First you need to stop the RVG, detach the rlink, disassociate the SRL, and turn the PRIMARY attribute on:
vxrvg stop rvgB
vxrlink det rlinkB
vxvol dis srlB
vxedit set primary=true rvgB
Veritas recommends that you use vxedit to reinitialize some values on the RLINK to make sure you're still cool:
vxedit set remote_host=hostA local_host=hostB remote_dg=diskgroupA remote_rlink=rlinkA rlinkB
Before you can attach the rlink, you need to change the PRIMARY_DATAVOL attribute on both hosts to point the the Veritas volume name of the NEW Primary:
On the new primary (e.g. hostB):
vxedit set primary_datavol=sampleB sampleB
On the new secondary (e.g. hostA):
vxedit set primary_datavol=sampleB sampleA
Now that you have that, go back to the new Primary, attach the RLINK, and start the RVG:
vxrlink -f att rlinkB
vxrvg start rvgB
The vxrlink command should show normal output as described in section 1 above.
If the Primary is down:
First you'll need to bring up the secondary as a primary. If your secondary datavolume is inconsistent (this is only likely if an SRL overflow occurred and the secondary was not resynchronized before the Primary went down) you will need to disassociate the volumes from the RVG, fsck them if they contain filesystems, and reassociate them with VVR. If your volumes are consistent, the task is much easier:
On the secondary, first stop the RVG, detach the RLINK, and disassociate the SRL:
vxrvg stop rvgB
vxrlink det rlinkB
vxvol dis srlB
Make the Secondary the new Primary:
vxedit -g diskgroupB set primary=true rvgB
Now reassociate the SRL and change the primary_datavol:
vxvol aslog rvgB srlB
vxedit set primary_datavol=sampleB sampleB
If the old Primary is still down, all you need to do is start the RVG to be able to use the datavolumes:
vxrvg start rvgB
This will allow you to keep the volumes in VVR so that once you manage to resurrect the former Primary, you can make the necessary VVR commands to set it up as a secondary so it can resynchronize from the backup system. Once it has resynchronized, you can use the process listed at the beginning of section 6 (above) to fail from the Old Secondary/New Primary back to the original configuration.
Here's now to resynchronize the old Primary once you bring it back up:
The RVG and RLINK should be stopped and detached. If not, stop and detach:
vxrvg stop rvgA
vxrlink det rlinkA
Disassociate the SRL and make the system a secondary:
vxvol dis srlA
vxedit set primary=false rvgA
Reassociate the SRL, change the primary_datavol attribute:
vxvol aslog rvgA srlA
vxedit set primary_datavol=sampleB sampleA
Attach the RLINK and then start the RVG:
vxrlink -f att rlinkA
vxrvg start rvgA
This won't do much, as the RLINK on hostB (the Primary) should still be detached, preventing the Secondary from connecting. Now go back to the Primary to turn the RLINK on:
vxedit set remote_host=hostA local_host=hostB remote_dg=diskgroupA remote_rlink=rlinkA
vxrlink -a att rlinkB
Giving the -a flag to vxrlink tells it to run in autosync mode. This will automatically resync the secondary datavolumes from the Primary. If the Primary is being updated faster than the Secondary can be synced, the Secondary will never become synced, so this method is only appropriate for certain implementations.
Once synchronization is complete, follow the instructions above (the beginning of section 6) to transfer the Primary role back to the original Primary system.