MacroSAN Fibre Channel and iSCSI drivers

The MacroSANFCDriver and MacroSANISCSIDriver Cinder drivers allow the MacroSAN Storage arrays to be used for Block Storage in OpenStack deployments.

System requirements

To use the MacroSAN drivers, the following are required:

  • MacroSAN Storage arrays with: - iSCSI or FC host interfaces - Enable RESTful service on the MacroSAN Storage Appliance. (The service is automatically turned on in the device. You can check if python /odsp/scripts/devop/devop.py is available via ps -aux|grep python. )

  • Network connectivity between the OpenStack host and the array management interfaces

  • HTTPS or HTTP must be enabled on the array

When creating a volume from image, install the multipath tool and add the following configuration keys for each backend section or in [backend_defaults] section as a common configuration for all backends in /etc/cinder/cinder.conf file:

[cinder-iscsi-a]
use_multipath_for_image_xfer = True

When creating a instance from image, install the multipath tool and add the following configuration keys in the [libvirt] configuration group of the /etc/nova/nova.conf file:

iscsi_use_multipath = True

Supported operations

  • Create, delete, attach, and detach volumes.

  • Create, list, and delete volume snapshots.

  • Create a volume from a snapshot.

  • Copy an image to a volume.

  • Copy a volume to an image.

  • Clone a volume.

  • Extend a volume.

  • Volume Migration (Host Assisted).

  • Volume Migration (Storage Assisted).

  • Retype a volume.

  • Manage and unmanage a volume.

  • Manage and unmanage a snapshot.

  • Volume Replication.

  • Thin Provisioning.

Configuring the array

  1. Verify that the array can be managed via an HTTPS connection.

    Confirm that virtual pools A and B are present if you plan to use virtual pools for OpenStack storage.

  2. Edit the cinder.conf file to define a storage backend entry for each storage pool on the array that will be managed by OpenStack. Each entry consists of a unique section name, surrounded by square brackets, followed by options specified in a key=value format.

    • The volume_backend_name option value can be a unique value, if you wish to be able to assign volumes to a specific storage pool on the array, or a name that is shared among multiple storage pools to let the volume scheduler choose where new volumes are allocated.

    In the examples below, two back ends are defined, one for pool A and one for pool B.

    • Add the following configuration keys in the configuration group of enabled_backends of the /etc/cinder/cinder.conf file:

    iSCSI example back-end entries

    [DEFAULT]
    enabled_backends = cinder-iscsi-a, cinder-iscsi-b
    rpc_response_timeout = 300
    
    [cinder-iscsi-a]
    # Storage protocol.
    iscsi_protocol = iscsi
    
    #iSCSI target user-land tool.
    iscsi_helper = tgtadm
    
    # The iSCSI driver to load
    volume_driver = cinder.volume.drivers.macrosan.driver.MacroSANISCSIDriver.
    
    # Name to give this storage back-end.
    volume_backend_name = macrosan
    
    #Choose attach/detach volumes in cinder using multipath for volume to image and image to volume transfers.
    use_multipath_for_image_xfer = True
    
    # IP address of the Storage if attaching directly.
    san_ip = 172.17.251.142, 172.17.251.143
    
    # Storage user name.
    san_login = openstack
    
    # Storage user password.
    san_password = openstack
    
    #Choose using thin-lun or thick lun. When set san_thin_provision to True,you must set
    #macrosan_thin_lun_extent_size, macrosan_thin_lun_low_watermark, macrosan_thin_lun_high_watermark.
    san_thin_provision = False
    
    #The name of Pool in the Storage.
    macrosan_pool = Pool-a
    
    #The default ports used for initializing connection.
    #Separate the controller by semicolons (``;``)
    #Separate the ports by comma (``,``)
    macrosan_client_default = eth-1:0:0, eth-1:0:1; eth-2:0:0, eth-2:0:1
    
    #The switch to force detach volume when deleting
    macrosan_force_unmap_itl = True
    
    #Set snapshot's resource ratio
    macrosan_snapshot_resource_ratio = 1
    
    #Calculate the time spent on the operation in the log file.
    macrosan_log_timing = True
    
    # =============Optional settings=============
    
    #Set the thin lun's extent size when the san_thin_provision is True.
    macrosan_thin_lun_extent_size = 8
    
    #Set the thin lun's low watermark when the san_thin_provision is True.
    #macrosan_thin_lun_low_watermark = 8
    
    #Set the thin lun's high watermark when the san_thin_provision is True.
    macrosan_thin_lun_high_watermark = 40
    
    #The setting of Symmetrical Dual Active Storage
    macrosan_sdas_ipaddrs = 172.17.251.142, 172.17.251.143
    macrosan_sdas_username = openstack
    macrosan_sdas_password = openstack
    
    #The setting of Replication Storage. When you set ip, you must set
    #the macrosan_replication_destination_ports parameter.
    macrosan_replication_ipaddrs = 172.17.251.142, 172.17.251.143
    macrosan_replication_username = openstack
    macrosan_replication_password = openstack
    
    ##The ports used for the Replication Storage.
    #Separate the controller by semicolons (``,``)
    #Separate the ports by semicolons (``/``)
    macrosan_replication_destination_ports = eth-1:0:0/eth-1:0:1, eth-2:0:0/eth-2:0:1
    
    #Macrosan iscsi_clients list. You can configure multiple clients. Separate the ports by semicolons (``/``)
    macrosan_client = (devstack; controller1name; eth-1:0:0/eth-1:0:1; eth-2:0:0/eth-2:0:1), (dev; controller2name; eth-1:0:0/eth-1:0:1; eth-2:0:0/eth-2:0:1)
    
    [cinder-iscsi-b]
    iscsi_protocol = iscsi
    iscsi_helper = tgtadm
    volume_driver = cinder.volume.drivers.macrosan.driver.MacroSANISCSIDriver
    volume_backend_name = macrosan
    use_multipath_for_image_xfer = True
    san_ip = 172.17.251.142, 172.17.251.143
    san_login = openstack
    san_password = openstack
    macrosan_pool = Pool-b
    san_thin_provision = False
    macrosan_force_unmap_itl = True
    macrosan_snapshot_resource_ratio = 1
    macrosan_log_timing = True
    macrosan_client_default = eth-1:0:0, eth-1:0:1; eth-2:0:0, eth-2:0:1
    
    macrosan_thin_lun_extent_size = 8
    macrosan_thin_lun_low_watermark = 8
    macrosan_thin_lun_high_watermark = 40
    macrosan_sdas_ipaddrs = 172.17.251.142, 172.17.251.143
    macrosan_sdas_username = openstack
    macrosan_sdas_password = openstack
    macrosan_replication_ipaddrs = 172.17.251.142, 172.17.251.143
    macrosan_replication_username = openstack
    macrosan_replication_password = openstack
    macrosan_replication_destination_ports = eth-1:0:0, eth-2:0:0
    macrosan_client = (devstack; controller1name; eth-1:0:0; eth-2:0:0), (dev; controller2name; eth-1:0:0; eth-2:0:0)
    

    Fibre Channel example backend entries

    [DEFAULT]
    enabled_backends = cinder-fc-a, cinder-fc-b
    rpc_response_timeout = 300
    
    [cinder-fc-a]
    volume_driver = cinder.volume.drivers.macrosan.driver.MacroSANFCDriver
    volume_backend_name = macrosan
    use_multipath_for_image_xfer = True
    san_ip = 172.17.251.142, 172.17.251.143
    san_login = openstack
    san_password = openstack
    macrosan_pool = Pool-a
    san_thin_provision = False
    macrosan_force_unmap_itl = True
    macrosan_snapshot_resource_ratio = 1
    macrosan_log_timing = True
    
    #FC Zoning mode configured.
    zoning_mode = fabric
    
    #The number of ports used for initializing connection.
    macrosan_fc_use_sp_port_nr = 1
    
    #In the case of an FC connection, the configuration item associated with the port is maintained.
    macrosan_fc_keep_mapped_ports = True
    
    # =============Optional settings=============
    
    macrosan_thin_lun_extent_size = 8
    macrosan_thin_lun_low_watermark = 8
    macrosan_thin_lun_high_watermark = 40
    macrosan_sdas_ipaddrs = 172.17.251.142, 172.17.251.143
    macrosan_sdas_username = openstack
    macrosan_sdas_password = openstack
    macrosan_replication_ipaddrs = 172.17.251.142, 172.17.251.143
    macrosan_replication_username = openstack
    macrosan_replication_password = openstack
    macrosan_replication_destination_ports = eth-1:0:0, eth-2:0:0
    
    
    [cinder-fc-b]
    volume_driver = cinder.volume.drivers.macrosan.driver.MacroSANFCDriver
    volume_backend_name = macrosan
    use_multipath_for_image_xfer = True
    san_ip = 172.17.251.142, 172.17.251.143
    san_login = openstack
    san_password = openstack
    macrosan_pool = Pool-b
    san_thin_provision = False
    macrosan_force_unmap_itl = True
    macrosan_snapshot_resource_ratio = 1
    macrosan_log_timing = True
    zoning_mode = fabric
    macrosan_fc_use_sp_port_nr = 1
    macrosan_fc_keep_mapped_ports = True
    
    macrosan_thin_lun_extent_size = 8
    macrosan_thin_lun_low_watermark = 8
    macrosan_thin_lun_high_watermark = 40
    macrosan_sdas_ipaddrs = 172.17.251.142, 172.17.251.143
    macrosan_sdas_username = openstack
    macrosan_sdas_password = openstack
    macrosan_replication_ipaddrs = 172.17.251.142, 172.17.251.143
    macrosan_replication_username = openstack
    macrosan_replication_password = openstack
    macrosan_replication_destination_ports = eth-1:0:0, eth-2:0:0
    
  3. After modifying the cinder.conf file, restart the cinder-volume service.

  4. Create and use volume types.

    Create and use sdas volume types

    $ openstack volume type create sdas
    $ openstack volume type set --property sdas=True sdas
    

    Create and use replication volume types

    $ openstack volume type create replication
    $ openstack volume type set --property replication_enabled=True replication
    

Configuration file parameters

This section describes mandatory and optional configuration file parameters of the MacroSAN volume driver.

Mandatory parameters

Parameter

Default value

Description

Applicable to

volume_backend_name

-

indicates the name of the backend

All

volume_driver

cinder.volume.drivers.lvm.LVMVolumeDriver

indicates the loaded driver

All

use_multipath_for_image_xfer

False

Chose attach/detach volumes in cinder using multipath for volume to image and image to volume transfers.

All

san_thin_provision

True

Default volume type setting, True is thin lun, and False is thick lun.

All

macrosan_force_unmap_itl

True

Force detach volume when deleting

All

macrosan_log_timing

True

Calculate the time spent on the operation in the log file.

All

macrosan_snapshot_resource_ratio

1

Set snapshot’s resource ratio”.

All

iscsi_helper

tgtadm

iSCSI target user-land tool to use.

iSCSI

iscsi_protocol

iscsi

Determines the iSCSI protocol for new iSCSI volumes, created with tgtadm.

iSCSI

macrosan_client_default

None

This is the default connection information for iscsi. This default configuration is used when no host related information is obtained.

iSCSI

zoning_mode

True

FC Zoning mode configured.

Fibre channel

macrosan_fc_use_sp_port_nr

1

The use_sp_port_nr parameter is the number of online FC ports used by the single-ended memory when the FC connection is established in the switch non-all-pass mode. The maximum is 4.

Fibre channel

macrosan_fc_keep_mapped_ports

True

In the case of an FC connection, the configuration item associated with the port is maintained.

Fibre channel

Optional parameters

Parameter

Default value

Description

Applicable to

macrosan_sdas_ipaddrs

-

The ip of Symmetrical Dual Active Storage

All

macrosan_sdas_username

-

The username of Symmetrical Dual Active Storage

All

macrosan_sdas_password

-

The password of Symmetrical Dual Active Storage

All

macrosan_replication_ipaddrs

-

The ip of replication Storage. When you set ip, you must set the macrosan_replication_destination_ports parameter.

All

macrosan_replication_username

-

The username of replication Storage

All

macrosan_replication_password

-

The password of replication Storage

All

macrosan_replication_destination_ports

-

The ports of replication storage when using replication storage.

All

macrosan_thin_lun_extent_size

8

Set the thin lun’s extent size when the san_thin_provision is True.

All

macrosan_thin_lun_low_watermark

5

Set the thin lun’s low watermark when the san_thin_provision is True.

All

macrosan_thin_lun_high_watermark

20

Set the thin lun’s high watermark when the san_thin_provision is True.

All

macrosan_client

True

Macrosan iscsi_clients list. You can configure multiple clients. You can configure it in this format: (hostname; client_name; sp1_iscsi_port; sp2_iscsi_port), E.g: (controller1; decive1; eth-1:0:0; eth-2:0:0),(controller2; decive2; eth-1:0:0/ eth-1:0:1; eth-2:0:0/ eth-2:0:1)

All

Important

Client_name has the following requirements:

[a-zA-Z0-9.-_:], the maximum number of characters is 31

The following are the MacroSAN driver specific options that may be set in cinder.conf:

Description of MacroSAN configuration options

Configuration option = Default value

Description

macrosan_client = None

(List of String) Macrosan iscsi_clients list. You can configure multiple clients. You can configure it in this format: (host; client_name; sp1_iscsi_port; sp2_iscsi_port), (host; client_name; sp1_iscsi_port; sp2_iscsi_port) Important warning, Client_name has the following requirements: [a-zA-Z0-9.-_:], the maximum number of characters is 31 E.g: (controller1; device1; eth-1:0; eth-2:0), (controller2; device2; eth-1:0/eth-1:1; eth-2:0/eth-2:1),

macrosan_client_default = None

(String) This is the default connection ports’ name for iscsi. This default configuration is used when no host related information is obtained.E.g: eth-1:0/eth-1:1; eth-2:0/eth-2:1

macrosan_fc_keep_mapped_ports = True

(Boolean) In the case of an FC connection, the configuration item associated with the port is maintained.

macrosan_fc_use_sp_port_nr = 1

(Integer(max=4)) The use_sp_port_nr parameter is the number of online FC ports used by the single-ended memory when the FC connection is established in the switch non-all-pass mode. The maximum is 4

macrosan_force_unmap_itl = True

(Boolean) Force disconnect while deleting volume

macrosan_log_timing = True

(Boolean) Whether enable log timing

macrosan_pool = None

(String) Pool to use for volume creation

macrosan_replication_destination_ports = eth-1:0/eth-1:1, eth-2:0/eth-2:1

(List of String) Slave device

macrosan_replication_ipaddrs = None

(List of String) MacroSAN replication devices’ ip addresses

macrosan_replication_password = None

(String) MacroSAN replication devices’ password

macrosan_replication_username = None

(String) MacroSAN replication devices’ username

macrosan_sdas_ipaddrs = None

(List of String) MacroSAN sdas devices’ ip addresses

macrosan_sdas_password = None

(String) MacroSAN sdas devices’ password

macrosan_sdas_username = None

(String) MacroSAN sdas devices’ username

macrosan_snapshot_resource_ratio = 1.0

(Float) Set snapshot’s resource ratio

macrosan_thin_lun_extent_size = 8

(Integer) Set the thin lun’s extent size

macrosan_thin_lun_high_watermark = 20

(Integer) Set the thin lun’s high watermark

macrosan_thin_lun_low_watermark = 5

(Integer) Set the thin lun’s low watermark