The NetApp Cinder driver supports SnapMirror-based volume replication across ONTAP clusters. Beginning with the Hibiscus release, three policy families are available, each designed for specific protection and recovery objectives. This section describes the operational model, configuration options, and limitations for each policy, helping administrators select the best strategy for their deployment.
Policy |
RPO |
RTO |
Protocols |
Min ONTAP |
|---|---|---|---|---|
|
Minutes (async lag) |
Minutes (manual failover) |
iSCSI, FC, NFS |
9.15.1 |
|
Zero (sync) |
Near-zero (automatic) |
iSCSI, FC |
9.15.1 |
|
Zero (sync) |
Near-zero (automatic) |
iSCSI, FC |
9.15.1 |
Important
All replication policies require the ONTAP REST API. Set
netapp_use_legacy_client = False in every backend stanza that uses
AutomatedFailOver or AutomatedFailOverDuplex. The asynchronous
policies (MirrorAllSnapshots and Asynchronous) support both ZAPI
and REST.
Important
None of the replication policies described here are supported on ASA r2 (disaggregated) platforms. These policies apply exclusively to Unified ONTAP deployments.
Caution
Changing the replication policy on an existing SnapMirror relationship is
not supported. To switch from one policy to another, you must first remove
replication (delete SnapMirror relationships and Consistency Groups on
ONTAP), update cinder.conf, and reinitialize the driver.
—
Asynchronous replication transfers data from the source SVM to the destination SVM at scheduled intervals, resulting in a small recovery point lag (typically minutes). This is the simplest replication model to deploy and supports the widest range of protocols—iSCSI, FC, and NFS.
Two ONTAP pre-defined policies are supported:
MirrorAllSnapshotsSnapMirror asynchronous policy for mirroring all snapshots and the latest active file system.
AsynchronousA unified SnapMirror asynchronous policy for mirroring the latest active file system and daily and weekly snapshots with an hourly transfer schedule.
By default, the driver creates one independent SnapMirror relationship per FlexVol volume in the backend stanza. During failover, each FlexVol is failed over individually, which may result in slightly inconsistent point-in-time data across volumes if transfers are not all at the same snapshot.
Setting netapp_consistent_replication = True changes this to a
single shared Consistency Group (CG) protecting all FlexVol volumes in the
stanza. The CG ensures all volumes are failed over from the same
crash-consistent snapshot, eliminating cross-volume inconsistency.
Note
netapp_consistent_replication defaults to False. Enabling it on a
backend stanza that already has per-volume SnapMirror relationships will
fail the driver. The existing volumes must be manually unprotected
and re-protected under a new shared CG on the next driver initialization.
Caution
FlexGroup volumes cannot be included in a Consistency Group. If a backend
stanza contains FlexGroup pools and netapp_consistent_replication is set
to True, driver initialization will fail. FlexGroup pools
continue to be replicated individually regardless of this flag.
Planned failover (primary site is healthy, but administrator initiates failover for testing or maintenance):
cinder failover-host <hostname> \
--backend_id <failover target>
After failover, the replication status of each OpenStack volume changes to
failed-over and the destination backend becomes the active I/O-serving
site.
Failback (returning I/O to the original primary site after it is restored):
Before issuing the failback command, manually resync the SnapMirror relationships from the secondary site back to the primary site on ONTAP so that data written during the failover period is transferred back. manually perform reverse replication of the snapmirror relationship. Refer to the ONTAP SnapMirror documentation for resync steps. Then run:
cinder failover-host <hostname> \
--backend_id default
After failback, volumes return to replication_status: enabled, and the
primary site resumes as the active backend.
Note
If the primary site is unrecoverable and cannot be restored, see Failback When the Primary Site is Non-Recoverable for the manual reconfiguration procedure.
[source-async-backend]
volume_backend_name = source-async-backend
volume_driver = cinder.volume.drivers.netapp.common.NetAppDriver
netapp_server_hostname = source-cluster-mgmt-ip
netapp_login = admin
netapp_password = secret
netapp_storage_protocol = iscsi
netapp_storage_family = ontap_cluster
netapp_vserver = source-svm
netapp_use_legacy_client = False
# Replication settings
replication_device = backend_id:dest-async-backend
netapp_replication_policy = Asynchronous
netapp_consistent_replication = True
[dest-async-backend]
volume_backend_name = dest-async-backend
volume_driver = cinder.volume.drivers.netapp.common.NetAppDriver
netapp_server_hostname = dest-cluster-mgmt-ip
netapp_login = admin
netapp_password = secret
netapp_storage_protocol = iscsi
netapp_storage_family = ontap_cluster
netapp_vserver = dest-svm
netapp_use_legacy_client = False
Custom ONTAP SnapMirror policies are not supported. Only the
ONTAP pre-canned policies MirrorAllSnapshots and Asynchronous
are accepted.
Changing netapp_replication_policy from an asynchronous value to
AutomatedFailOver or AutomatedFailOverDuplex is not supported after
a relationship exists. This is an ONTAP limitation.
ASAr2 (disaggregated) ONTAP platforms are not supported.
The AutomatedFailOver policy implements ONTAP SnapMirror Active Sync in
asymmetric mode. It provides synchronous replication—data is committed to
both the source and destination clusters simultaneously—resulting in a recovery
point objective (RPO) of zero: no data is lost at failover.
Supported protocols: iSCSI and FC only.
Minimum ONTAP version: Unified ONTAP 9.15.1.
API requirement: REST only (netapp_use_legacy_client = False).
Prior to the Hibiscus release, each FlexVol volume in the backend stanza was placed in its own individual Consistency Group and protected independently. This meant that failover broke each SnapMirror relationship separately, which could introduce data inconsistencies across volumes if transfers were not perfectly aligned.
With Hibiscus, setting netapp_consistent_replication = True causes the
driver to place all FlexVol volumes in the stanza into a single shared CG,
which is then protected with the AutomatedFailOver policy. The result is
that all volumes fail over atomically from the same crash-consistent point.
This flag defaults to False to avoid disrupting existing deployments that
relied on the per-volume behavior.
Important
When enabling netapp_consistent_replication = True on an existing
AutomatedFailOver backend, ensure that none of the volumes are already
protected with an existing snapmirror relationship. This can result in
driver initialization failure.
Planned failover:
Fails over the volumes from primary to secondary site
cinder failover-host <hostname> \
--backend_id <failover target>
Failback:
Fails back the volumes from secondary to primary site
cinder failover-host <hostname> \
--backend_id default
[source-af-backend]
volume_backend_name = source-af-backend
volume_driver = cinder.volume.drivers.netapp.common.NetAppDriver
netapp_server_hostname = source-cluster-mgmt-ip
netapp_login = admin
netapp_password = secret
netapp_storage_protocol = iscsi
netapp_storage_family = ontap_cluster
netapp_vserver = source-svm
netapp_use_legacy_client = False
# Replication settings
replication_device = backend_id:dest-af-backend
netapp_replication_policy = AutomatedFailOver
netapp_consistent_replication = True
[dest-af-backend]
volume_backend_name = dest-af-backend
volume_driver = cinder.volume.drivers.netapp.common.NetAppDriver
netapp_server_hostname = dest-cluster-mgmt-ip
netapp_login = admin
netapp_password = secret
netapp_storage_protocol = iscsi
netapp_storage_family = ontap_cluster
netapp_vserver = dest-svm
netapp_use_legacy_client = False
NFS and NVMe protocols are not supported.
ZAPI is not supported (ONTAP limitation for SnapMirror Active Sync).
ASAr2 platforms are not supported.
Changing the policy from AutomatedFailOver to
AutomatedFailOverDuplex on an existing relationship is not supported.
Remove and recreate the replication configuration.
Changing from AutomatedFailOver to an asynchronous or synchronous
policy is not supported (ONTAP limitation).
—
The AutomatedFailOverDuplex (AFD) policy implements ONTAP SnapMirror
Active Sync in symmetric mode. Both sites serve read and write I/O
simultaneously, and ONTAP automatically redirects I/O to the surviving site
when a failure is detected. No manual operator intervention is required. This
delivers zero RPO and near-zero RTO, making it the strongest protection tier
available.
The AFD topology is designed for stretched cluster deployments where OpenStack compute nodes span two physical sites or availability zones. Each compute host has network connectivity to storage at both sites, and the storage system uses host proximity metadata to determine the optimal storage path for each host.
Supported protocols: iSCSI and FC only.
Minimum ONTAP version: Unified ONTAP 9.15.1.
API requirement: REST only (netapp_use_legacy_client = False).
netapp_consistent_replication: mandatory (must be True).
Important
netapp_consistent_replication = True is required for
AutomatedFailOverDuplex. Driver initialization will fail with an
error if this option is not set. There is no per-volume CG mode for AFD.
In a symmetric stretched topology, ONTAP needs to know which site each compute host is physically closest to (proximal to) so that it can prefer the local data path for I/O. The driver configures this proximity metadata on the ONTAP igroup objects automatically during volume attach operations.
The netapp_proximal_nodes option provides the list of iSCSI IQNs or FC
WWPNs of compute host initiators that are local to the SVM in the backend
stanza. This option is set independently in both the source and destination
backend stanzas, reflecting the initiators local to each respective site.
The driver derives host proximity as follows:
Initiators listed only in the source netapp_proximal_nodes are
proximal to the source SVM only (local-only to site A).
Initiators listed only in the destination netapp_proximal_nodes are
proximal to the destination SVM only (local-only to site B).
Initiators listed in both stanzas are considered shared — they have connectivity to both sites. The driver configures proximity to both SVMs for these initiators.
Note
Host proximity configuration is performed automatically by the driver when
a volume is attached to a compute node. No manual ONTAP proximity commands
are needed. However, the netapp_proximal_nodes lists must be kept
accurate: incorrectly listing a remote initiator as proximal will cause
ONTAP to prefer the wrong storage path.
Because both sites serve I/O simultaneously, ONTAP handles site failure
automatically without requiring operator action. The surviving site
continues serving I/O transparently. The OpenStack volume replication_status
changes to failed-over once the Cinder periodic health check runs.
For planned failover (e.g., scheduled maintenance on one site):
cinder failover-host <hostname> \
--backend_id <failover target>
For failback after the original primary site is restored:
After verifying that the primary site ONTAP cluster is healthy and the SnapMirror relationship is re-synchronized, run:
cinder failover-host <hostname> \
--backend_id default
Note
For unplanned failovers where the primary site cannot be recovered, refer to Failback When the Primary Site is Non-Recoverable.
The following example shows a stretched iSCSI deployment across two sites.
The netapp_proximal_nodes in each stanza lists the IQNs of compute hosts
that are local to that site’s SVM.
[source-afd-backend]
volume_backend_name = source-afd-backend
volume_driver = cinder.volume.drivers.netapp.common.NetAppDriver
netapp_server_hostname = source-cluster-mgmt-ip
netapp_login = admin
netapp_password = secret
netapp_storage_protocol = iscsi
netapp_storage_family = ontap_cluster
netapp_vserver = source-svm
netapp_use_legacy_client = False
# Replication settings — AFD requires consistent_replication = True
replication_device = backend_id:dest-afd-backend
netapp_replication_policy = AutomatedFailOverDuplex
netapp_consistent_replication = True
# IQNs of compute hosts physically local to the source SVM's site
netapp_proximal_nodes = iqn.1994-05.com.redhat:compute-host-a1,iqn.1994-05.com.redhat:compute-host-a2
[dest-afd-backend]
volume_backend_name = dest-afd-backend
volume_driver = cinder.volume.drivers.netapp.common.NetAppDriver
netapp_server_hostname = dest-cluster-mgmt-ip
netapp_login = admin
netapp_password = secret
netapp_storage_protocol = iscsi
netapp_storage_family = ontap_cluster
netapp_vserver = dest-svm
netapp_use_legacy_client = False
# IQNs of compute hosts physically local to the destination SVM's site
netapp_proximal_nodes = iqn.1994-05.com.redhat:compute-host-b1,iqn.1994-05.com.redhat:compute-host-b2
NFS is not supported (ONTAP limitation for AFD).
NVMe is not supported in this release (planned for a future release).
ZAPI is not supported (ONTAP limitation for SnapMirror Active Sync).
ASAr2 platforms are not supported.
Changing from AutomatedFailOver to AutomatedFailOverDuplex on an
existing relationship is not supported. Remove and recreate.
Changing from AutomatedFailOverDuplex to an asynchronous or synchronous
policy is not supported.
—
If the primary site cannot be recovered and a new primary site must be established from the former secondary:
Delete the primary backend stanza from cinder.conf.
On ONTAP, manually delete the SnapMirror relationship(s) and Consistency Group(s) on the secondary cluster. Refer to the ONTAP data protection documentation for the delete and release procedure.
In cinder.conf, promote the secondary stanza to be the new primary:
add replication_device, netapp_replication_policy,
netapp_consistent_replication, and (for AFD)
netapp_proximal_nodes to the former destination stanza.
Add a new destination backend stanza pointing to the replacement secondary cluster.
Reinitialize the Cinder driver.
If the original primary site is later rebuilt and needs to become the I/O-serving site again, repeat steps 1–5 with the roles reversed.
This document is licensed under Apache 2.0 license.