A Cinder volume is the fundamental resource unit allocated by the Block Storage service. It represents an allocation of persistent, readable, and writable block storage. A Cinder volume can be used as the root disk for a compute instance or as secondary storage that can be attached to or detached from a compute instance. The connection between the consumer and the Cinder service can use iSCSI, NFS, Fibre Channel, or NVMe/TCP storage protocols, depending on the Cinder driver in use.
Warning
A Cinder volume is an abstract storage object that may not directly map to a “volume” concept from the underlying backend storage provider. It is important to understand this distinction, especially in Cinder deployments using NetApp storage solutions.
Cinder volumes are uniquely identified by a UUID assigned at creation. A volume may also have a human-readable name, but this is not guaranteed to be unique within a tenant or deployment.
The actual blocks for a Cinder volume reside on a single Cinder backend. Starting with the Havana release, a Cinder volume can be migrated between storage backends within a deployment. See “Cinder Command Line Interface (CLI)” for a migration example.
The cinder manage command allows importing existing storage objects not
managed by Cinder as new Cinder volumes. The operation locates an object in a
specified backend and creates the necessary metadata in the Cinder database to
manage it like any other Cinder volume. The operation also renames the volume
to a name appropriate to the particular Cinder driver in use. The imported
object could be a file, LUN, NVMe namespace, or volume, depending on the
protocol (iSCSI/FC/NFS/NVMe). This feature is useful for migration scenarios
where virtual machines or other data need to be managed by Cinder. See
“Cinder Manage Usage” for an example.
The cinder unmanage command allows Cinder to stop managing a specific
volume. All related data in the Cinder database is removed, but the backing
file, LUN, or storage object is not deleted. This enables transferring the
volume to another environment. See “Cinder Unmanage Usage” for an example.
A Cinder snapshot is a point-in-time, read-only copy of a Cinder volume. Snapshots can be created from an existing volume that is operational and either attached or detached. A snapshot can serve as the source for a new volume (using the create from snapshot option) or be used to revert a volume to the most recent snapshot (as of the Pike release).
A Cinder backend is the configuration object that represents a single provider of block storage upon which provisioning requests may be fulfilled. A Cinder backend communicates with the storage system through a Cinder driver. Cinder supports multiple backends to be simultaneously configured and managed (even with the same Cinder driver) as of the Grizzly release.
Note
A single Cinder backend may be defined in the [DEFAULT] stanza
of cinder.conf; however, NetApp recommends that the
enabled_backends configuration option be set to a
comma-separated list of backend names, and each backend name have
its own configuration stanza with the same name as listed in the
enabled_backends option. Refer to the section called
“Cinder.conf: Overview” for an example of the use of this option.
A Cinder driver is a particular implementation of a Cinder backend that maps the abstract APIs and primitives of Cinder to appropriate constructs within the particular storage solution underpinning the Cinder backend.
Caution
The use of the term “driver” often creates confusion given common understanding of the behavior of “device drivers” in operating systems. The term can connote software that provides a data I/O path. In the case of Cinder driver implementations, the software provides provisioning and other manipulation of storage devices but does not lay in the path of data I/O. For this reason, the term “driver” is often used interchangeably with the alternative (and perhaps more appropriate) term “provider”.
A Cinder volume type is an abstract collection of criteria used to
characterize Cinder volumes. They are most commonly used to create a
hierarchy of functional capabilities that represent a tiered level of
storage services; for example, a cloud administrator might define a
premium volume type that indicates a greater level of performance
than a basic volume type, which would represent a best-effort level
of performance.
The collection of criteria is specified as a list of key/value pairs, which are inspected by the Cinder scheduler when determining which Cinder backend(s) are able to fulfill a provisioning request. Individual Cinder drivers (and subsequently Cinder backends) may advertise arbitrary key/value pairs (also referred to as capabilities) to the Cinder scheduler, which are then compared against volume type definitions when determining which backend will fulfill a provisioning request.
An extra spec is a key/value pair, expressed in the style of
key=value. Extra specs are associated with Cinder volume types, so
that when users request volumes of a particular volume type, the volumes
are created on storage backends that meet the specified criteria.
Note
The list of default capabilities that may be reported by a Cinder driver and included in a volume type definition include:
volume_backend_name: The name of the backend as defined in
cinder.conf
vendor_name: The name of the vendor who has implemented the
driver (e.g. NetApp)
driver_version: The version of the driver (e.g. 1.0)
storage_protocol: The protocol used by the backend to export
block storage to clients (e.g. iSCSI, fc, nvme or nfs)
For a table of NetApp supported extra specs, refer to Table 4.11, “NetApp supported Extra Specs for use with Cinder volume Types”.
Note
NetApp drivers support multi-attachment of volumes for NFS, iSCSI
and FC protocols from the Rocky release. This enables attaching a
volume to multiple servers simultaneously and can be configured
by creating an extra-spec multiattach=True for the associated
Cinder volume type.
Note
In-use volume extension support depends on protocol/backend. For NetApp ONTAP SAN (iSCSI and FC/FCP), extending a Cinder volume while attached (in-use) is supported starting with the Stein release (and later). For NFS, OpenStack does not currently support extending in-use volumes with the NFS driver; the volume must be detached before extending.
The Cinder Quality of Service (QoS) support for volumes can be enforced
either at the hypervisor or at the storage subsystem (backend), or
both.
SolidFire
Within the SolidFire platform, each volume may be configured with minimum, maximum, and burst IOPS values that are strictly enforced within the system. The minimum IOPS provides a guarantee for performance, independent of what other applications on the system are doing. The maximum and burst values control the allocation of performance and deliver consistent performance to workloads.
QoS support for the SolidFire drivers includes the ability to set the
following capabilities in the OpenStack Block Storage API
cinder.api.contrib.qos_specs_manage qos specs extension module:
Option |
Description |
|---|---|
minIOPS |
The minimum number of IOPS guaranteed for this volume. Default = 100. |
maxIOPS |
The maximum number of IOPS allowed for this volume. Default = 15,000. |
burstIOPS |
The maximum number of IOPS allowed over a short period of time. Default = 15,000. |
Table 4.1a. SolidFire QoS Options
Note
The SolidFire driver utilizes volume-types for QoS settings and allows dynamic changes to QoS.
ONTAP
The NetApp ONTAP Cinder driver currently supports QoS by backend QoS specs or via netapp:qos_policy_group assignment using Cinder Extra-Specs. The NetApp Cinder driver accomplishes this by using NetApp QoS policy groups, introduced with ONTAP 8.2, and applying these policy groups to Cinder volumes.
netapp:qos_policy_group: A Cinder extra-spec, which references an externally provisioned QoS policy group, provides a means to assign a Netapp QoS policy group for a set of Cinder volumes. All Cinder volumes associated with a single QoS policy group share the throughput value restrictions as a group. The ONTAP QoS policy group must be created by the storage administrator on the backend prior to specifying the netapp:qos_policy_group option in a Cinder extra-spec. Whether the policy group is the adaptive type use the Cinder extra-spec netapp:qos_policy_group_is_adaptive. Use the netapp:qos_policy_group option when a Service Level Objective (SLO) needs to be applied to a set of Cinder volumes. For more information on this, see Table 4.11, “NetApp supported Extra Specs for use with Cinder volume Types”.
QoS Spec: QoS specifications are added as standalone objects that can then be associated with Cinder volume types. A Cinder QoS Spec will create a new NetApp QoS policy group for each Cinder volume. A Cinder QoS spec can specify either non-adaptive (Table 4.1b) or an adaptive (Table 4.1c) QoS throughput values. For the first method, it can be a maximum, a minimum or both QoS, using bytes per second or IOPS. For the adaptive method, it must set the maximum (peak) and the minimum (expected) QoS together, and IOPS values are dynamically set according to the volume size. When deleting a Cinder volume that has a QoS Spec applied, the NetApp QoS policies associated with that Cinder volume will not immediately be deleted. The driver marks the QoS policies for deletion by the NetApp QoS policy reaping job. The NetApp QoS policy reaping job runs every 60 seconds. Refer to NetApp ONTAP documentation for your version of ONTAP to determine NetApp QoS policy group limits. Use the QoS Spec feature when a SLO needs to be applied to a single Cinder volume.
Option |
Description |
|---|---|
maxBPS |
The maximum bytes per second allowed. |
maxBPSperGiB |
The maximum bytes per second allowed per GiB of Cinder volume capacity. |
maxIOPS |
The maximum IOPS allowed. |
maxIOPSperGiB |
The maximum IOPS allowed per GiB of Cinder volume capacity. |
minIOPS |
The minimum IOPS allowed. |
minIOPSperGiB |
The minimum bytes per second allowed per GiB of Cinder volume capacity. |
Table 4.1b. NetApp Non-Adaptive Supported Backend QoS Spec Options.
Option |
Description |
|---|---|
expectedIOPSperGiB |
The minimum expected IOPS per allocated GiB. ONTAP can only guarantee for AFF platforms. |
peakIOPSperGiB |
The maximum expected IOPS per allocated GiB. |
expectedIOPSAllocation |
Specifies either the allocated-size or the used-size which determines the minimum throughput calculation. Default = allocated-space. |
peakIOPSAllocation |
Specifies either the allocated-size or the used-size which determines the maximum throughput calculation. Default = allocated-space. |
absoluteMinIOPS |
The absolute minimum number of IOPS. |
blockSize |
The application I/O block size. Values: 8K, 16K, 32K, 64K, ANY. Default = 32K. |
Table 4.1c. NetApp Adaptive Supported Backend QoS Spec Options.
Note
The per GiB unit of the non-adaptive method calculates the QoS throughput based on the first allocated volume size, it does not change with the extend volume operation. While for the adaptive method, the QoS throughput is affected by changes on the volume size (or used size).
Note
You can use the absoluteMinIOPS field with very small storage objects.
It overrides both peakIOPSperGiB and/or expectedIOPSperGiB when
absoluteMinIOPS is greater than the calculated expectedIOPSperGiB.
For example, if you set expectedIOPSperGiB to 1,000 IOPS/GiB, and the
volume size is less than 1 GB, the calculated expectedIOPSperGiB will be
a fractional IOP. The calculated peakIOPSperGiB will be an even smaller
fraction. You can avoid this by setting absoluteMinIOPS to a realistic
value.
Important
The non-adaptive QoS minimum is only supported by storage ONTAP All Flash
FAS (AFF) with version equal or greater than 9.3 for NFS and 9.2 for iSCSI
and FCP. Select Premium with SSD and C190 storage systems are also supported
starting on ONTAP 9.6. The driver reports this support by the capability
netapp_qos_min_support.
Important
The adaptive QoS specs can only be used with ONTAP version equal to
or greater than 9.4, excepting the expectedIOPSAllocation and
blockSize specs which require at least 9.5.
Warning
While SolidFire supports volume retyping, ONTAP does not.
Warning
Cinder NVMe/TCP ONTAP driver does not support QoS.
Starting with the Juno release of OpenStack, Cinder introduced the concept of “storage pools.” Backend storage can present one or more logical storage resource pools, and Cinder selects a pool as the storage location when provisioning volumes. In releases prior to Juno, NetApp’s Cinder drivers contained logic to determine which FlexVol volume, volume group, or DDP a Cinder volume would be placed into. With the introduction of pools, all scheduling logic is handled by the Cinder scheduler.
For NetApp’s Cinder drivers, a Cinder pool is a single container. The container mapped to a Cinder pool depends on the storage protocol:
iSCSI, NVMe/TCP, and Fibre Channel: A Cinder pool is created for every
FlexVol volume within the SVM specified by netapp_vserver, or for ONTAP,
all FlexVol volumes in the system unless limited by
netapp_pool_name_search_pattern.
NFS: A Cinder pool is created for each junction path from FlexVol or
FlexGroup volumes listed in nfs_shares_config.
For more information, see Cinder Scheduling and Resource Pool Selection.
Starting with the Newton release, NetApp supports Generic Volume Groups for ONTAP iSCSI, Fibre Channel, and NFS drivers. SolidFire support was added in the Pike release. Existing consistency group operations will be migrated to use generic volume group operations in future releases. The Consistency Group construct cannot be easily extended for features like consistent group snapshots across multiple volumes. Generic volume groups allow grouping volumes used by the same application, even if they do not support consistent group snapshots. This provides a way to manage and group volumes by a common factor. For more information, see the generic-volume-groups documentation.
Note
Only Block Storage V3 API supports groups. The minimum version for group
operations supported by ONTAP drivers is 3.14. The API version can be set
with --os-volume-api-version 3.14.
With the Mitaka release of OpenStack, NetApp supports Cinder Consistency Groups when using ONTAP iSCSI/Fibre Channel drivers. With the Newton release of OpenStack, NetApp supports Cinder Consistency Groups when using ONTAP NFS drivers. Consistency group support allows snapshots of multiple volumes in the same consistency group to be taken at the same point-in-time to ensure data consistency. To illustrate the usefulness of consistency groups, consider a bank account database where a transaction log is written to Cinder volume V1 and the account table itself is written to Cinder volume V2. Suppose that $100 is to be transferred from account A to account B via the following sequence of writes:
Log start of transaction.
Log remove $100 from account A.
Log add $100 to account B.
Log commit transaction.
Update table A to reflect -$100.
Update table B to reflect +$100.
Writes 1-4 go to Cinder volume V1 whereas writes 5-6 go to Cinder volume V2. To see that we need to keep write order fidelity in both snapshots of V1 and V2, suppose a snapshot is in progress during writes 1-6, and suppose that the snapshot completes at a point where writes 1-3 and 5 have completed, but not 4 and 6. Because write 4 (log of commit transaction) did not complete, the transaction will be discarded. But write 5 has completed anyways, so a restore from snapshot of the secondary will result in a corrupt account database, one where account A has been debited $100 without account B getting the corresponding credit.
Before using consistency groups, update the policies for the consistency group
APIs in /etc/cinder/policy.json. By default, these APIs are disabled.
Enable them before running consistency group operations. Example policy
entries:
"consistencygroup:create": "group:nobody",
"consistencygroup:delete": "group:nobody",
"consistencygroup:update": "group:nobody",
"consistencygroup:get": "group:nobody",
"consistencygroup:get_all": "group:nobody",
"consistencygroup:create_cgsnapshot" : "group:nobody",
"consistencygroup:delete_cgsnapshot": "group:nobody",
"consistencygroup:get_cgsnapshot": "group:nobody",
"consistencygroup:get_all_cgsnapshots": "group:nobody",
Remove group:nobody to enable these APIs:
"consistencygroup:create": "",
"consistencygroup:delete": "",
"consistencygroup:update": "",
"consistencygroup:get": "",
"consistencygroup:get_all": "",
"consistencygroup:create_cgsnapshot" : "",
"consistencygroup:delete_cgsnapshot": "",
"consistencygroup:get_cgsnapshot": "",
"consistencygroup:get_all_cgsnapshots": "",
Remember to restart the Block Storage API service after changing policies.
The NetApp driver creates consistency group LUN snapshots as thick provisioned. This can be changed on the backend after the snapshot is taken with no effect to Cinder.
Note
Consistency group operations are deprecated in Block Storage V3 API. Only Block Storage V2 API supports consistency groups. Future releases will migrate these operations to generic volume group operations.
Caution
Consistency group operations are not supported when the storage pool is a FlexGroup volume.
Cinder provides self-service backup and restore operations for Cinder volumes. These operations are performed on individual volumes. A backup operation creates a point-in-time, read-only set of data and metadata that can be used to restore a single Cinder volume to a new or existing volume. Unlike snapshots, backups are stored in a dedicated repository, independent of the original storage pool or backend.
Cinder backup repositories can use an object store (such as Swift) or an NFS shared filesystem. The backup service uses a single repository, regardless of the backends used for storage pools. For example, a FlexVol volume exported from ONTAP using NFS can serve as a backup repository for multi-backend, heterogeneous Cinder deployments.
Tenant-controlled, per-volume backup service complements, but does not replace, administrative backups of the storage pools that hold Cinder volumes. See http://netapp.github.io/openstack/2015/03/12/cinder-backup-restore/ for an approach to administrative backups with ONTAP storage pools.
NetApp’s Cinder driver for ONTAP (FC, NFS, iSCSI) supports Cinder’s replication v2.1 specification. This enables replication of an entire backend and allows all replicated volumes across different pools to fail over together. The driver uses ONTAP SnapMirror as the replication transport.
Starting with the Hibiscus release, three SnapMirror policy families are available:
Asynchronous (MirrorAllSnapshots or Asynchronous) — Replicates
data at scheduled intervals. Supports iSCSI, FC, and NFS on ONTAP 9.16.1+.
Suitable for disaster recovery scenarios where a small recovery point lag is
acceptable.
AutomatedFailOver — Synchronous replication (zero RPO, near-zero RTO once triggered) using ONTAP SnapMirror Active Sync in asymmetric mode. Supports iSCSI and FC on ONTAP 9.15.1+. REST API required.
AutomatedFailOverDuplex — Synchronous replication (zero RPO, near-zero RTO) using ONTAP SnapMirror Active Sync in symmetric (stretched) mode. Both sites serve I/O simultaneously and ONTAP fails over automatically, with no administrator action required. Supports iSCSI and FC on ONTAP 9.15.1+. REST API required. See AutomatedFailOverDuplex Policy (SnapMirror Active Sync — Symmetric) for full details.
All policies support grouping all FlexVol volumes in a backend stanza under a
single shared Consistency Group (netapp_consistent_replication = True),
ensuring crash-consistent failover across all volumes. This is mandatory for
AutomatedFailOverDuplex and optional for others.
For full configuration details, prerequisites, and failover/failback procedures, see SnapMirror Replication Policies for Cinder.
Caution
The NFS driver with FlexGroup pool can only automatically create the disaster recovery partner if the source FlexGroup volume was created using the default number of constituents. For custom source FlexGroup pools, the administrator must manually create the replica FlexGroup volume with the same number of constituents as the source.
Caution
NFS and NVMe protocols are not supported for the AutomatedFailOver or
AutomatedFailOverDuplex policies. These active sync policies require
iSCSI or FC.
Starting with the Hibiscus release, the NetApp Cinder driver supports ONTAP SnapMirror Active Sync, which extends synchronous replication to enable storage-level high availability without requiring a MetroCluster configuration.
SnapMirror Active Sync maintains a continuously synchronized copy of data on a secondary ONTAP cluster. The two modes are:
Asymmetric (AutomatedFailOver) — One site serves all I/O (active/standby). In the event of a failure, an administrator triggers failover. Zero data loss (RPO = 0) and near-zero recovery time (RTO in seconds to low minutes)
Symmetric / Stretched (AutomatedFailOverDuplex) — Both sites serve I/O simultaneously. When one site fails, ONTAP automatically redirects all I/O to the surviving site with no operator action required. Zero data loss (RPO = 0) and near-zero recovery time (RTO in seconds to low minutes). This mode is designed for stretched cluster deployments where compute nodes span two physical availability zones.
In symmetric mode, the driver configures host proximity on ONTAP igroup
objects to indicate which storage site is closest to each compute host. This
is controlled by the netapp_proximal_nodes configuration option, which
lists the iSCSI IQNs or FC WWPNs of initiators local to the SVM in each
backend stanza.
As of the Pike release, Cinder supports the revert to snapshot feature. This feature can overwrite the current state and data of a volume with the most recent snapshot. A volume cannot be reverted if it was extended after the snapshot was taken.
The SolidFire driver uses an optimized implementation. For ONTAP backends, the feature uses a generic implementation for NFS, iSCSI, FC, and NVMe drivers. From the Xena release, ONTAP NFS, iSCSI, and FC drivers use a safer and faster storage-based approach.
Caution
Revert to snapshot is not supported when the storage pool is a FlexGroup volume.
Starting with the Xena release, Cinder supports storage assisted migration. This feature can migrate ONTAP NFS, iSCSI, and FC drivers within the same cluster. It is non-disruptive within the same SVM and disruptive between different SVMs. For NFS drivers, migration is always disruptive. Scenarios:
Note
Storage Assisted Migration has a time limit to happen. The time is defined
by netapp_migrate_volume_timeout driver option. The default value is
3600 seconds. When the timeout is reached:
For disruptive operations, migration is canceled, the volume returns to its original state, and the target copy is deleted.
For non-disruptive operations, migration cannot be stopped. The volume
status is set to maintenance. The user must monitor migration status
and, when successful, reset the volume state to its previous value using:
cinder reset-state --type volume --state <state> <name|id> (must know
the previous status).
Within a Storage Virtual Machine (SVM): Non-disruptive for iSCSI and FC drivers. NFS drivers require the volume to be in available status.
Between SVMs in the same cluster: Disruptive in all cases; volume must be in available status.
Between two different clusters: Not supported for storage assisted; driver falls back to host assisted migration.
Note
Storage Assisted Migration between backends/stanzas requires the cluster admin account. With an SVM-scoped account, it falls back to host assisted.
Caution
Storage Assisted Migration is not supported when the storage pool is a FlexGroup volume.
Starting with the Bobcat release (2023.2), Cinder supports active/active high availability mode for NetApp NFS protocol-based backends. This feature allows failover of ONTAP NFS drivers within or across ONTAP clusters. If a backend is exposed via NFS to Cinder, all volumes in that backend can be automatically failed over to replication targets in the OpenStack cluster when the host is down. For Cinder Active/Active support, NetApp uses the replication functionality built in previous releases.
Note
This support is only for the NetApp NFS driver, not for iSCSI or FCP drivers.
To use Active/Active support, configure the replication target properly for the backend on the primary host. Use the following options in cinder.conf:
replication_device = backend_id:target_cmodeNfs
netapp_replication_aggregate_map = backend_id:target_cmodeNfs,source_aggr_1:destination_aggr_1,source_aggr_2:destination_aggr_2
If the backend differs between primary and secondary, configure vserver and cluster peering properly to handle SnapMirror relationships between source and destination.
Note
You can refer to this article to know how to configure replication targets for NetApp volumes https://netapp.io/2016/10/14/cinder-replication-netapp-perfect-cheesecake-recipe
Metro cluster is a clustering solution with synchronous replication to deliver continuous availability, immediately duplicating all of the mission-critical data on a transaction-by-transaction basis. MetroCluster configurations enhance the built-in high availability and non disruptive operations of NetApp hardware and ONTAP storage software, providing an additional layer of protection for the entire storage and host environment.
Note
User should have a primary backend added to cinder.conf with required configuration for cinder to work.
After switchover: Update the following parameters in the cinder.conf file for the storage backend stanza and restart the Cinder services.
netapp_server_hostname = <secondary_cluster_host_name_or_ip> netapp_server_hostname = <vserver_name>-mc
For example, if the vserver name on the primary site is vs_iscsi, then after switchover, netapp_server_hostname should be set to vs_iscsi-mc. After making these changes, restart the Cinder service.
After switchback: Revert the netapp_server_hostname parameters to their original values (primary cluster hostname or IP and vserver name) and restart the cinder service.
Important
If you have different credentials for primary and secondary sites, update the following parameters as needed for the current MetroCluster switchover status:
netapp_login=<user_name> netapp_password=<password>
This document is licensed under Apache 2.0 license.