NetApp Snap Mirror
Well
every NetApp engineer will be aware of the snapmirror , it’s a common and
important feature of the NetApp, so today I thought of writing something about
snapmirror , May be my blog on snapmirror can help you to understand the snapmirror
more nicely.
Why
we need a snapmirror.
SnapMirror
is replication feature of NetApp and it is fast and flexible enterprise
solution to replicate your critical and very precious data over local area,
wide area and fiber channel networks to the destination/different location, and
it is the very good solution for the disaster and even good solution for the online
data migration without any additional overhead.
Snapmirror
have three modes.
Async: Replicates snapshot copies from a
source volume or qtree to a destination volume or qtree. Incremental updates
are based on schedules or are performed manually using the snapmirror update
command. It works both in volume level and qtree level.
Sync: Replicates writes from a source volume
to a secondary volume at the same time it is written to the source volume. Snap
mirror Sync is used in environments that have zero tolerance for data loss.
Semi-sync: It is between the Async and sync mode
with less impact on performance. It can configure a snapMirror sync replication
to lag behind the source volume by a user-defined number of write operations or
milliseconds.
Volume
snapmirror enables block-for –block replication. The entire volume, including
its qtrees, and all the associated snapshot copies, are replicated to the
destination volume. The source volume is online/writable and the destination
volume is online/readonly and when the relationship is break the destination
volume becomes writable.
Initial
Transfer and Replication.
To
initialize a snapmirror relation, you first have to restrict the destination
volume in which the replica will reside. During the baseline transfer, the
source system takes a snapshot copy of the volume. All data blocks referenced
by this snapshot copy, including volume metadata such as language translation
settings, as well as all snapshot copies of the volume are transferred and
written to the destination volume.
After
the initialization completes, the source and destination file systems have one
snapshot copy in common. Update occur from this point and are based on the
schedule specified in a flat-text configuration file known as the
snapmirror.conf file or by using the snapmirror update command.
To
identify new and changed blocks, the block map in the new snapshot copy is
compared to the block map of the baseline snapshot copy. Only the blocks that
are new or have changed since the last successful replication are sent to the
destination. Once the transfer has completed the new shapshot copy becomes the
baseline snapshot copy and the old one is deleted.
Requirements
and Limitations
Destinations
Data Ontap version must be equal to or more recent than the source. In
addition, the source and the destination must be on the same Data ontap
release.
Volume
snapMirror replication can only occur with volumes of the same type either
traditional volumes or both flexible volumes.
Destination
volumes capacity equal to or greater than size of the source, Administrators
can thin provision the destination so that it appears to be equal to or greater
than the size of the source volume.
Quota
cannot be enabled on destination volume.
It
is recommended that you allow a range of TCP ports from 10565 to 10569.
Qtree
SnapMirror
Qtree
snapMirror is a logical replication. All the files and directories in the
source file system are created in the target destination qtree.
Qtree
Snap Mirror replication occurs between qtrees regardless of the type of the
volume (traditional or flexible).Even qtree replication can occur between
different releases of Data ONTAP.
Source
volume and qtree are online/writable in qtree replication and Destination
volume is also online/writable (in qtree replication).
NOTE: Unlike volume snapMirror , a qtree
snapMirror does not require that the size of the destination volume be equal to
or greater than the size of the source qtree.
In
initial baseline transfer you not need to create the destination qtree , it
gets automatically created upon first time replication.
Requirements
and limitations
Support
Async mode only
Destination
volume must contain 5% more free space than the source qtree and destination
qtree cannot be /etc
Qtree
snapMirror performance is impacted by deep directory structure and large number
(tens of millions) of small files replicated.
Configuration
process of snapmirror
1. Install the snapMirror license
For ex: license add <code>
2. On the source, specify the host name or
IP address of the snapMirror destination systems you wish to authorize to
replicate this source system.
For Ex: options snapmirror.access host=dst_hostname1,dst_hostname2
3. For each source volume and qtree to
replicate, perform an initial baseline transfer, For volume snapmirror restrict
the destination volume.
For Ex: vol restrict dst_volumename
Then initialize the volume snapmirror
baseline, using the following syntax on the destination:
For Ex: snapmirror initialize –S
src_hostname:src_vol dst_hostname:dst_vol
For
a qtree snapmirror baseline transfer, use the following syntax on the destination
Snapmirror initialize –S src_hostname:
/vol/src_vol/src_qtree dst_hostname:/vol/dst_vol/dst_qtree
4. Once the initial transfer completes,
set the snapmirror mode of replication by creating the /etc/snapmirror.conf
file in the destination’s root volume.
Snapmirror.conf
The
snapmirror.conf configuration file entries define the relationship between the
source and the destination, the mode of replication, and the arguments that
control SnapMirror when replicating data.
Entries
can be seen like this in snapmirror.conf file
For
ex: Fas1:vol1 Fas2:vol1 – 0 23 * 1,3,5
Fas1:vol1 : source storage system hostname and
path
Fas2:vol1: destination storage system hostname
and path
“-“: Arguments: Arguments fields let you
define the transfer speed and restart mode and “– “ indicate the default mode is selected
Schedules
0: updates on the hours
23: updates on 11PM
*: Updates on all applicable days of the
months
1,3,5: updates on Monday,Wednesday,Friday
You
can Monitor transfer by running the cmd “snapmirror status” this cmd can be run on source as well as on
the destination also, it comes with two options –l and –q
-l
: option display the long format of the output.
-q:
option displays which volumes or qtree are quiesced or quiescing.
You
can list all the snap shot copies of particular volumes by “snap list
volumename” cmd, snapmirror snapshot copies are distinguished from system
snapshot copies by a more elaborate naming convention.
The
snap list command display the keyword snapmirror next to the necessary snapshot
copy
Log
files
Snapmirror
logs record whether the transfer finished successfully or failed. If there is a
problem with the updates , it is useful to look at the log file to see what has
happened since the last successful update. The log include the start and end of
each transfer, along with the amount of data transferred.
For
ex: options snapnmirror.log.enable (on/off) by default it is on.
Log
files are stored in the source and the destination storage system root volume,
in the /etc/logs/snapmirror directory.
This
guides you quickly through the Snapmirror setup and commands.
1) Enable Snapmirror on source and destination filer
source-filer> options snapmirror.enable
snapmirror.enable on
source-filer>
source-filer> options snapmirror.access
snapmirror.access legacy
source-filer>
2) Snapmirror Access
Make sure destination filer has snapmirror access to the source filer. The snapmirror filer's name or IP address should be in /etc/snapmirror.allow. Use wrfile to add entries to /etc/snapmirror.allow.
source-filer> rdfile /etc/snapmirror.allow
destination-filer
destination-filer2
source-filer>
3) Initializing a Snapmirror relation
Volume snapmirror : Create a destination volume on destination netapp filer, of same size as source volume or greater size. For volume snapmirror, the destination volume should be in restricted mode. For example, let us consider we are snapmirroring a 100G volume - we create the destination volume and make it restricted.
destination-filer> vol create demo_destination aggr01 100G
destination-filer> vol restrict demo_destination
1) Enable Snapmirror on source and destination filer
source-filer> options snapmirror.enable
snapmirror.enable on
source-filer>
source-filer> options snapmirror.access
snapmirror.access legacy
source-filer>
2) Snapmirror Access
Make sure destination filer has snapmirror access to the source filer. The snapmirror filer's name or IP address should be in /etc/snapmirror.allow. Use wrfile to add entries to /etc/snapmirror.allow.
source-filer> rdfile /etc/snapmirror.allow
destination-filer
destination-filer2
source-filer>
3) Initializing a Snapmirror relation
Volume snapmirror : Create a destination volume on destination netapp filer, of same size as source volume or greater size. For volume snapmirror, the destination volume should be in restricted mode. For example, let us consider we are snapmirroring a 100G volume - we create the destination volume and make it restricted.
destination-filer> vol create demo_destination aggr01 100G
destination-filer> vol restrict demo_destination
Volume SnapMirror creates a Snapshot
copy before performing the initial transfer. This copy is referred to as the
baseline Snapshot copy. After performing an initial transfer of all data in the
volume, VSM (Volume SnapMirror) sends to the destination only the blocks that have
changed since the last successful replication. When SnapMirror performs an
update transfer, it creates another new Snapshot copy and compares the changed
blocks. These changed blocks are sent as part of the update transfer.
Snapmirror is always destination filer driven. So the snapmirror initialize has to be done on destination filer. The below command starts the baseline transfer.
destination-filer> snapmirror initialize -S source-filer:demo_source destination-filer:demo_destination
Transfer started.
Monitor progress with 'snapmirror status' or the snapmirror log.
destination-filer>
Qtree Snapmirror : For qtree snapmirror, you should not create the destination qtree. The snapmirror command automatically creates the destination qtree. So just volume creation of required size is good enough.
Snapmirror is always destination filer driven. So the snapmirror initialize has to be done on destination filer. The below command starts the baseline transfer.
destination-filer> snapmirror initialize -S source-filer:demo_source destination-filer:demo_destination
Transfer started.
Monitor progress with 'snapmirror status' or the snapmirror log.
destination-filer>
Qtree Snapmirror : For qtree snapmirror, you should not create the destination qtree. The snapmirror command automatically creates the destination qtree. So just volume creation of required size is good enough.
Qtree SnapMirror determines changed
data by first looking through the inode file for inodes that have changed and
changed inodes of the interesting qtree for changed data blocks. The SnapMirror
software then transfers only the new or changed data blocks from this Snapshot
copy that is associated with the designated qtree. On the destination volume, a
new Snapshot copy is then created that contains a complete point-in-time copy
of the entire destination volume, but that is associated specifically with the
particular qtree that has been replicated.
destination-filer> snapmirror initialize -S source-filer:/vol/demo1/qtree destination-filer:/vol/demo1/qtree
Transfer started.
Monitor progress with 'snapmirror status' or the snapmirror log.
4) Monitoring the status : Snapmirror data transfer status can be monitored either from source or destination filer. Use "snapmirror status" to check the status.
destination-filer> snapmirror status
Snapmirror is on.
Source Destination State Lag Status
source-filer:demo_source destination-filer:demo_destination Uninitialized - Transferring (1690 MB done)
source-filer:/vol/demo1/qtree destination-filer:/vol/demo1/qtree Uninitialized - Transferring (32 MB done)
destination-filer>
5) Snapmirror schedule : This is the schedule used by the destination filer for updating the mirror. It informs the SnapMirror scheduler when transfers will be initiated. The schedule field can either contain the word sync to specify synchronous mirroring or a cron-style specification of when to update the mirror. The cronstyle schedule contains four space-separated fields.
destination-filer> snapmirror initialize -S source-filer:/vol/demo1/qtree destination-filer:/vol/demo1/qtree
Transfer started.
Monitor progress with 'snapmirror status' or the snapmirror log.
4) Monitoring the status : Snapmirror data transfer status can be monitored either from source or destination filer. Use "snapmirror status" to check the status.
destination-filer> snapmirror status
Snapmirror is on.
Source Destination State Lag Status
source-filer:demo_source destination-filer:demo_destination Uninitialized - Transferring (1690 MB done)
source-filer:/vol/demo1/qtree destination-filer:/vol/demo1/qtree Uninitialized - Transferring (32 MB done)
destination-filer>
5) Snapmirror schedule : This is the schedule used by the destination filer for updating the mirror. It informs the SnapMirror scheduler when transfers will be initiated. The schedule field can either contain the word sync to specify synchronous mirroring or a cron-style specification of when to update the mirror. The cronstyle schedule contains four space-separated fields.
If you want to sync
the data on a scheduled frequency, you can set that in destination filer's
/etc/snapmirror.conf . The time settings are similar to Unix cron. You can set
a synchronous snapmirror schedule in /etc/snapmirror.conf by adding “sync”
instead of the cron style frequency.
destination-filer> rdfile /etc/snapmirror.conf
source-filer:demo_source destination-filer:demo_destination - 0 * * * # This syncs every hour
source-filer:/vol/demo1/qtree destination-filer:/vol/demo1/qtree - 0 21 * * # This syncs every 9:00 pm
destination-filer>
6) Other Snapmirror commands
- To break snapmirror relation - do snapmirror quiesce and snapmirror break.
- To update snapmirror data - do snapmirror update
- To resync a broken relation - do snapmirror resync.
- To abort a relation - do snapmirror abort
Snapmirror do provide
multipath support. More than one physical path between a source and a
destination system might be desired for a mirror relationship. Multipath
support allows SnapMirror traffic to be load balanced between these paths and
provides for failover in the event of a network outage.
Some
Important Points to be known about SnapMirror
Clustered
failover interaction.The
SnapMirror product complements NetApp clustered failover (CF) technology by
providing an additional level of recoverability. If a catastrophe disables access
to a clustered pair of storage systems, one or more SnapMirror volumes can
immediately be accessed in read-only mode while recovery takes place. If
read-write access is required, the mirrored volume can be converted to a writable
volume while the recovery takes place. If SnapMirror is actively updating data
when a takeover or giveback operation is instigated, the update aborts.
Following completion of the takeover or giveback operation, SnapMirror
continues as before. No specific additional steps are required for the
implementation of SnapMirror in a clustered failover environment
Adding disks to SnapMirror environments.When adding disks to volumes in a
SnapMirror environment always complete the addition of disks to the destination
storage system or volume before attempting to add disks to the source volume.
Note: The dfcommand does not
immediately reflect the diskor disks added to the SnapMirror volume until after
the first SnapMirror update following the disk additions.
Logging.
The SnapMirror log file (located in
/etc/logs/snapmirror.log) records the start and end
of an update as well as other significant
SnapMirror events. It records whether the transfer finished successfully or
whether it failed for some reason. If there is a problem with updates, it is
often useful to look at the log file to see what happened since the last
successful update. Because the log file is kept on the source and destination
storage systems,quite often the source or the destination system may log the
failure, and the other partner knows only that there was a failure. For this
reason, you should look at both the source and the destination log file to get
the most information about a failure. The log file contains the start and end time
of each transfer, along with the amount of data transferred. It can be useful
to look back and see the amount of data needed to make the update and the
amount of time the updates take.
Note: The time vs. data sent is not an
accurate measure of the network bandwidth because the transfer is not
constantly sending data
Destination
volume.For
SnapMirror volume replication, you must create a restricted volume to be used
as the destination volume. SnapMirror does not automatically create a volume.
Destination
volume type.The
mirrored volume must not be the root volume.
Data
change rate.Using
the ‘snap delta’ command, you can
now display the rate of change stored between two Snapshot copies as well as
the rate of change between a Snapshot copy and the active file system. Data
ONTAP displays the rates of change in two tables. The first table displays
rates of change between successive Snapshot copies. The second table displays a
summary of the rate of change between the oldest Snapshot copy and the active
file system.
Failed
updates. If
a transfer fails for any reason, SnapMirror attempts a retransfer immediately,
not waiting for the next scheduled mirror time. These retransfer attempts
continue until they are successful, until the appropriate entry in the
/etc/snapmirror.conf file is commented out, or until SnapMirror is turned off.
Some events that can cause failed transfers include:
Loss
of network connectivity
Source
storage system is unavailable
Source
volume is offline
SnapMirror
timeouts. There
are three situations that can cause a SnapMirror timeout:
Write socket timeout. If the TCP
buffers are full and the writing application cannot hand off data to
TCP within 10 minutes, a write socket
timeout occurs. Following the timeout, SnapMirror resumes
at the next scheduled update.
Read
socket timeout.
If the TCP socket that is receiving data has not received any data from the application
within 30 minutes, it generates a timeout. Following the timeout, SnapMirror
resumes at the next scheduled update. By providing a larger timeout value for
the read socket timeout, you can be assured
that SnapMirror will not time out while
waiting for the source file to create Snapshot copies, even when dealing with
extremely large volumes. Socket timeout values are not tunable in the Data
ONTAP and SnapMirror environment.
Sync
timeouts. These
timeouts occur in synchronous deployments only. If an event occurs that causes
a synchronous deployment to revert to asynchronous mode, such as a network
outage, no ACK is received from the destination system.
Open
Files
If SnapMirror is in the middle of a
transfer and encounters an incomplete file (a file that an FTP server is still transferring
into that volume or qtree), it transfers the partial file to the destination.
Snapshot copies behave in the same way. A Snapshot copy of the source would
show the transferring file and would show the partial file on the destination.
A workaround for this situation is to
copy a file to the source. When the file is complete on the source, rename the
source file to the correct name. This way the partial file has an incorrect
name, and the complete file has the correct name.