Jump to: navigation, search

Cinder/EMCVolumeDriver

  • Launchpad Entry:
  • Created: 12 December 2012
  • Contributors: Xing Yang

Summary

We would like to introduce support for EMC storage in the Cinder-Volume service. This blueprint proposes a driver based on the existing ISCSIDriver, with the ability to create/delete and attach/detach volumes and create/delete snapshots, etc.

The Cinder Driver executes the volume operations by communicating with the backend EMC storage. It uses a CIM client in python called PyWBEM to make CIM operations over HTTP.

EMC CIM Object Manager (ECOM) is packaged with the SMI-S Provider. It is a CIM server that allows CIM clients to make CIM operations over HTTP, using SMI-S in the backend for EMC storage operations.

SMI-S Provider supports the SNIA Storage Management Initiative (SMI), an ANSI standard for storage management. It supports VMAX/VMAXe and VNX storage systems.

Release Note

For the initial implementation we would like to provide the ability to create, delete, attach, and detach VMAX/VMAXe and VNX volumes to nova-compute VM's via iSCSI.

The following operations will be supported on both VMAX/VMAXe and VNX arrays:

  • Create volume
  • Delete volume
  • Attach volume
  • Detach volume

Snapshot is not supported on VMAXe with SMI-S 4.5.0. Support will be added in SMI-S 4.5.1 which is scheduled to release in Q1 2013. The following operations will be supported on VMAX and VMAX arrays.

  • Create snapshot
  • Delete snapshot

The following operations will be supported on VNX only:

  • Create volume from snapshot

Only thin provisioning is supported by EMC Cinder Plugin.

Rationale

User stories

User needs to install pyWBEM on the cinder-volume node. pyWBEM is opensource and can be downloaded from http://sourceforge.net.

User also needs to set flags in /etc/cinder.conf, and starts/restarts cinder-volume service.

Example cinder.conf entries:

--iscsi_target_prefix = iqn.2001-07.com.vnx

--iscsi_ip_address = 10.10.61.35

--volume_driver = cinder.volume.emc.EMCISCSIDriver

--cinder_emc_config_file = /opt/stack/cinder/etc/cinder/cinder_emc_config.xml

Cinder-volume doesn't need to be restarted if you changed cinder_emc_config.xml. Example cinder_emc_config.xml entries is in the following. MaskingView is only needed for VMAX/VMAXe arrays.

<?xml version='1.0' encoding='UTF-8'?>

<EMC>

<StorageType>gold</StorageType>

<MaskingView>openstack</MaskingView>

<EcomServerIp>x.x.x.x</EcomServerIp>

<EcomServerPort>xxxx</EcomServerPort>

<EcomUserName>xxxxxxxx</EcomUserName>

<EcomPassword>xxxxxxxx</EcomPassword>

</EMC>

EMC VMAX/VMAXe or VNX storage should now be available for use by OpenStack for additional block storage.

This has been tested with the Folsom release using Horizon and Cinder CLI.

Assumptions

Notes

Design

Subclass implementation of the ISCSIDriver in cinder/volume/driver.py

create-volume:

  • In create_volume, one SMI-S method call is invoked to create a volume of the specified size.
Class: EMC_StorageConfigurationService
Method: CreateOrModifyElementFromStoragePool

delete-volume:

  • In delete_volume, one SMI-S method call is invoked to delete the specified volume.
Class: EMC_StorageConfigurationService
Method: EMCReturnToStoragePool

create-volume-from-snapshot:

  • In create_volume_from_snapshot, two SMI-S method calls are involved. First a target volume is created from a source snapshot. Then the clone relationship will be removed so the new volume can be used independently from the source snapshot.
Class: EMC_ReplicationService
Method: CreateElementReplica 

create-snapshot:

  • In create_snapshot, one SMI-S method call is invoked to create a target snapshot from a source volume. This will create a target element (the snapshot) as well as a snap session. For VNX, a new VNX snapshot will be created, not the Snapview snapshot.
Class: EMC_ReplicationService
Method: CreateElementReplica 

delete-snapshot:

  • In delete_snapshot, one SMI-S method call is invoked to delete both the target element and the snap session.
Class: EMC_ReplicationService
Method: ModifyReplicaSynchronization 

ensure-export:

  • Ensure_export finds the DeviceID of an EMC_StorageVolume object and writes it in provider_location field of a volume entry in the Cinder database.

create-export:

  • Create_export finds the DeviceID of an EMC_StorageVolume object and writes it in provider_location field of a volume entry in the Cinder database.

delete-export:

  • No operation is performed in this method as it is not necessary.

initialize-connection:

  • In initialize_connection, a volume is mapped to a compute node, then an iSCSI discovery is done, and the volume’s iscsi property including the IQN of the iSCSI target, the portal of the iSCSI target, the lun of the iSCSI target, and the id of the volume, will be returned to the caller.
  • VNX and VMAX/VMAXe have different implementations for lun mapping. Masking and Mapping subprofile in SMI-S is available for VNX lun mapping. Masking and Mapping profile in SMI-S is available to use groups of Initiators, Target Ports, and Volumes on Symmetrix arrays running Enginuity 5874 and higher. The Cinder Plugin implementation only supports Symmetrix arrays running Enginuity 5874 and higher.
  • For VNX, the following SMI-S method call is invoked to map a lun to a host.
Class: EMC_ControllerConfigurationService
Method: ExposePaths 
  • For VMAX, the following SMI-S method call is invoked to map a lun to a host.
Class: EMC_ControllerConfigurationService
Method: AddMembers 

terminate-connection:

  • In terminate_connection, a volume is unmapped from a compute node.
  • VNX and VMAX/VMAXe have different implementations for lun mapping. Masking and Mapping subprofile in SMI-S is available for VNX lun mapping. Masking and Mapping profile in SMI-S is available to use groups of Initiators, Target Ports, and Volumes on Symmetrix arrays running Enginuity 5874 and higher. The Cinder Plugin implementation only support Symmetrix arrays running Enginuity 5874 and higher.
  • For VNX, the following SMI-S method call is invoked to unmap a lun from a host.
Class: EMC_ControllerConfigurationService
Method: HidePaths 
  • For VMAX, the following SMI-S method call is invoked to unmap a lun from a host.
Class: EMC_ControllerConfigurationService
Method: RemoveMembers