openstack-manuals/doc/config-reference/block-storage/drivers/emc-vnx-direct-driver.xml
Xi Yang fda48904cf Revise some content for EMC VNX Cinder driver
Change-Id: I80eb8210d494f0aa204374622f9b440f25242b45
Closes-Bug: 1459518
2015-06-01 23:26:19 -04:00

717 lines
41 KiB
XML

<section xml:id="emc-vnx-direct-driver"
xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0">
<?dbhtml stop-chunking?>
<title>EMC VNX direct driver</title>
<para><literal>EMC VNX direct driver</literal> (consists of <literal>EMCCLIISCSIDriver</literal>
and <literal>EMCCLIFCDriver</literal>) supports both iSCSI and FC protocol.
<literal>EMCCLIISCSIDriver</literal> (VNX iSCSI direct driver) and
<literal>EMCCLIFCDriver</literal> (VNX FC direct driver) are separately
based on the <literal>ISCSIDriver</literal> and <literal>FCDriver</literal>
defined in Block Storage.
</para>
<para><literal>EMCCLIISCSIDriver</literal> and <literal>EMCCLIFCDriver</literal>
perform the volume operations by executing Navisphere CLI (NaviSecCLI)
which is a command line interface used for management, diagnostics and reporting
functions for VNX.</para>
<section xml:id="emc-vnx-direct-supported-release">
<title>Supported OpenStack release</title>
<para><literal>EMC VNX direct driver</literal> supports the Kilo release.</para>
</section>
<section xml:id="emc-vnx-direct-reqs">
<title>System requirements</title>
<itemizedlist>
<listitem>
<para>VNX Operational Environment for Block version 5.32 or
higher.</para>
</listitem>
<listitem>
<para>VNX Snapshot and Thin Provisioning license should be
activated for VNX.</para>
</listitem>
<listitem>
<para>Navisphere CLI v7.32 or higher is installed along with
the driver.</para>
</listitem>
</itemizedlist>
</section>
<section xml:id="emc-vnx-direct-supported-ops">
<title>Supported operations</title>
<itemizedlist>
<listitem>
<para>Create, delete, attach, and detach volumes.</para>
</listitem>
<listitem>
<para>Create, list, and delete volume snapshots.</para>
</listitem>
<listitem>
<para>Create a volume from a snapshot.</para>
</listitem>
<listitem>
<para>Copy an image to a volume.</para>
</listitem>
<listitem>
<para>Clone a volume.</para>
</listitem>
<listitem>
<para>Extend a volume.</para>
</listitem>
<listitem>
<para>Migrate a volume.</para>
</listitem>
<listitem>
<para>Retype a volume.</para>
</listitem>
<listitem>
<para>Get volume statistics.</para>
</listitem>
<listitem>
<para>Create and delete consistency groups.</para>
</listitem>
<listitem>
<para>Create, list, and delete consistency group snapshots.</para>
</listitem>
<listitem>
<para>Modify consistency groups.</para>
</listitem>
</itemizedlist>
</section>
<section xml:id="emc-vnx-direct-prep">
<title>Preparation</title>
<para>This section contains instructions to prepare the Block Storage
nodes to use the EMC VNX direct driver. You install the Navisphere
CLI, install the driver, ensure you have correct zoning
configurations, and register the driver.</para>
<section xml:id="install-naviseccli">
<title>Install NaviSecCLI</title>
<para>Navisphere CLI needs to be installed on all Block Storage nodes
within an OpenStack deployment.</para>
<itemizedlist>
<listitem>
<para>For Ubuntu x64, DEB is available at <link
xlink:href="https://github.com/emc-openstack/naviseccli">EMC
OpenStack Github</link>.</para>
</listitem>
<listitem>
<para>For all other variants of Linux, Navisphere CLI is available at <link
xlink:href="https://support.emc.com/downloads/36656_VNX2-Series">
Downloads for VNX2 Series</link> or <link
xlink:href="https://support.emc.com/downloads/12781_VNX1-Series">
Downloads for VNX1 Series</link>.</para>
</listitem>
<listitem>
<para>After installation, set the security level of Navisphere CLI to low:</para>
<screen><prompt>$</prompt> <userinput
>/opt/Navisphere/bin/naviseccli security -certificate -setLevel low</userinput></screen>
</listitem>
</itemizedlist>
</section>
<section xml:id="install-cinder-driver">
<title>Install Block Storage driver</title>
<para>Both <literal>EMCCLIISCSIDriver</literal> and
<literal>EMCCLIFCDriver</literal> are provided in the installer
package:</para>
<itemizedlist>
<listitem>
<para><filename>emc_vnx_cli.py</filename></para>
</listitem>
<listitem>
<para><filename>emc_cli_fc.py</filename> (for
<option>EMCCLIFCDriver</option>)</para>
</listitem>
<listitem>
<para><filename>emc_cli_iscsi.py</filename> (for
<option>EMCCLIISCSIDriver</option>)</para>
</listitem>
</itemizedlist>
<para>Copy the files above to the <filename>cinder/volume/drivers/emc/</filename>
directory of the OpenStack node(s) where
<systemitem class="service">cinder-volume</systemitem> is running.</para>
</section>
<section xml:id="fc-zoning">
<title>FC zoning with VNX (<literal>EMCCLIFCDriver</literal> only)</title>
<para>A storage administrator must enable FC SAN auto zoning between all OpenStack nodes and VNX
if FC SAN auto zoning is not enabled.</para>
</section>
<section xml:id="register-vnx-direct">
<title>Register with VNX</title>
<para>Register the compute nodes with VNX to access the storage in VNX
or enable initiator auto registration.</para>
<para>To perform "Copy Image to Volume" and "Copy Volume to Image"
operations, the nodes running the <systemitem class="service">cinder-volume</systemitem>
service(Block Storage nodes) must be registered with the VNX as well.</para>
<para>Steps mentioned below are for a compute node. Please follow the same
steps for the Block Storage nodes also. The steps can be skipped if initiator
auto registration is enabled.</para>
<note>
<para>When the driver notices that there is no existing storage group that has
the host name as the storage group name, it will create the storage group
and then add the compute nodes' or Block Storage nodes' registered initiators
into the storage group.</para>
<para>If the driver notices that the storage group already exists, it will assume
that the registered initiators have also been put into it and skip the
operations above for better performance.</para>
<para>It is recommended that the storage administrator does not create the storage
group manually and instead relies on the driver for the preparation. If the
storage administrator needs to create the storage group manually for some
special requirements, the correct registered initiators should be put into the
storage group as well (otherwise the following volume attaching operations will
fail).</para>
</note>
<section xml:id="register-vnx-direct-fc">
<title>EMCCLIFCDriver</title>
<para>Steps for <literal>EMCCLIFCDriver</literal>:</para>
<procedure>
<step>
<para>Assume <literal>20:00:00:24:FF:48:BA:C2:21:00:00:24:FF:48:BA:C2</literal>
is the WWN of a FC initiator port name of the compute node whose
hostname and IP are <literal>myhost1</literal> and
<literal>10.10.61.1</literal>. Register
<literal>20:00:00:24:FF:48:BA:C2:21:00:00:24:FF:48:BA:C2</literal>
in Unisphere:</para>
<substeps>
<step><para>Login to Unisphere, go to
<guibutton>FNM0000000000->Hosts->Initiators</guibutton>.
</para></step>
<step><para>Refresh and wait until the initiator <literal>
20:00:00:24:FF:48:BA:C2:21:00:00:24:FF:48:BA:C2</literal>
with SP Port <literal>A-1</literal> appears.</para></step>
<step><para>Click the <guibutton>Register</guibutton> button,
select <guilabel>CLARiiON/VNX</guilabel> and enter the
hostname (which is the output of the linux command <literal>
hostname</literal>) and IP address:</para>
<itemizedlist>
<listitem>
<para>Hostname : <literal>myhost1</literal></para>
</listitem>
<listitem>
<para>IP : <literal>10.10.61.1</literal></para>
</listitem>
<listitem>
<para>Click <guibutton>Register</guibutton></para>
</listitem>
</itemizedlist>
</step>
<step><para>Then host <literal>10.10.61.1</literal> will
appear under <guibutton>Hosts->Host List</guibutton>
as well.</para></step>
</substeps>
</step>
<step><para>Register the wwn with more ports if needed.</para></step>
</procedure>
</section>
<section xml:id="register-vnx-direct-iscsi">
<title>EMCCLIISCSIDriver</title>
<para>Steps for <literal>EMCCLIISCSIDriver</literal>:</para>
<procedure>
<step><para>On the compute node with IP address
<literal>10.10.61.1</literal> and hostname <literal>myhost1</literal>,
execute the following commands (assuming <literal>10.10.61.35</literal>
is the iSCSI target):</para>
<substeps>
<step><para>Start the iSCSI initiator service on the node</para>
<screen><prompt>#</prompt> <userinput
>/etc/init.d/open-iscsi start</userinput></screen></step>
<step><para>Discover the iSCSI target portals on VNX</para>
<screen><prompt>#</prompt> <userinput
>iscsiadm -m discovery -t st -p 10.10.61.35</userinput></screen></step>
<step><para>Enter <filename>/etc/iscsi</filename></para>
<screen><prompt>#</prompt> <userinput
>cd /etc/iscsi</userinput></screen></step>
<step><para>Find out the iqn of the node</para>
<screen><prompt>#</prompt> <userinput
>more initiatorname.iscsi</userinput></screen></step>
</substeps>
</step>
<step><para>Login to VNX from the compute node using the
target corresponding to the SPA port:</para>
<screen><prompt>#</prompt> <userinput
>iscsiadm -m node -T iqn.1992-04.com.emc:cx.apm01234567890.a0 -p 10.10.61.35 -l</userinput></screen>
</step>
<step><para>Assume <literal>iqn.1993-08.org.debian:01:1a2b3c4d5f6g</literal>
is the initiator name of the compute node. Register
<literal>iqn.1993-08.org.debian:01:1a2b3c4d5f6g</literal> in
Unisphere:</para>
<substeps>
<step><para>Login to Unisphere, go to
<guibutton>FNM0000000000->Hosts->Initiators
</guibutton>.</para></step>
<step><para>Refresh and wait until the initiator
<literal>iqn.1993-08.org.debian:01:1a2b3c4d5f6g</literal>
with SP Port <literal>A-8v0</literal> appears.</para></step>
<step><para>Click the <guibutton>Register</guibutton> button,
select <guilabel>CLARiiON/VNX</guilabel> and enter the
hostname (which is the output of the linux command <literal>
hostname</literal>) and IP address:</para>
<itemizedlist>
<listitem>
<para>Hostname : <literal>myhost1</literal></para>
</listitem>
<listitem>
<para>IP : <literal>10.10.61.1</literal></para>
</listitem>
<listitem>
<para>Click <guibutton>Register</guibutton></para>
</listitem>
</itemizedlist>
</step>
<step><para>Then host <literal>10.10.61.1</literal> will
appear under <guibutton>Hosts->Host List</guibutton>
as well.</para></step>
</substeps>
</step>
<step><para>Logout iSCSI on the node:</para>
<screen><prompt>#</prompt> <userinput
>iscsiadm -m node -u</userinput></screen>
</step>
<step><para>Login to VNX from the compute node using the
target corresponding to the SPB port:</para>
<screen><prompt>#</prompt> <userinput
>iscsiadm -m node -T iqn.1992-04.com.emc:cx.apm01234567890.b8 -p 10.10.61.36 -l</userinput></screen>
</step>
<step><para>In Unisphere register the initiator with the
SPB port.</para></step>
<step><para>Logout iSCSI on the node:</para>
<screen><prompt>#</prompt> <userinput
>iscsiadm -m node -u</userinput></screen>
</step>
<step><para>Register the iqn with more ports if needed.</para></step>
</procedure>
</section>
</section>
</section>
<section xml:id="emc-vnx-direct-conf">
<title>Backend configuration</title>
<para>Make the following changes in the
<filename>/etc/cinder/cinder.conf</filename>:</para>
<programlisting language="ini">storage_vnx_pool_name = Pool_01_SAS
san_ip = 10.10.72.41
san_secondary_ip = 10.10.72.42
#VNX user name
#san_login = username
#VNX user password
#san_password = password
#VNX user type. Valid values are: global(default), local and ldap.
#storage_vnx_authentication_type = ldap
#Directory path of the VNX security file. Make sure the security file is generated first.
#VNX credentials are not necessary when using security file.
storage_vnx_security_file_dir = /etc/secfile/array1
naviseccli_path = /opt/Navisphere/bin/naviseccli
#timeout in minutes
default_timeout = 10
#If deploying EMCCLIISCSIDriver:
#volume_driver = cinder.volume.drivers.emc.emc_cli_iscsi.EMCCLIISCSIDriver
volume_driver = cinder.volume.drivers.emc.emc_cli_fc.EMCCLIFCDriver
destroy_empty_storage_group = False
#"node1hostname" and "node2hostname" shoule be the full hostnames of the nodes(Try command 'hostname').
#This option is for EMCCLIISCSIDriver only.
iscsi_initiators = {"node1hostname":["10.0.0.1", "10.0.0.2"],"node2hostname":["10.0.0.3"]}
[database]
max_pool_size = 20
max_overflow = 30</programlisting>
<itemizedlist>
<listitem>
<para>where <literal>san_ip</literal> is one of the SP IP addresses
of the VNX array and <literal>san_secondary_ip</literal> is the other
SP IP address of VNX array. <literal>san_secondary_ip</literal> is an
optional field, and it serves the purpose of providing a high
availability(HA) design. In case that one SP is down, the other SP
can be connected automatically. <literal>san_ip</literal> is a
mandatory field, which provides the main connection.</para>
</listitem>
<listitem>
<para>where <literal>Pool_01_SAS</literal> is the pool from which
the user wants to create volumes. The pools can be created using
Unisphere for VNX. Refer to the <xref linkend="emc-vnx-direct-multipool"/>
on how to manage multiple pools.</para>
</listitem>
<listitem>
<para>where <literal>storage_vnx_security_file_dir</literal> is the
directory path of the VNX security file. Make sure the security
file is generated following the steps in
<xref linkend="emc-vnx-direct-auth"/>.</para>
</listitem>
<listitem>
<para>where <literal>iscsi_initiators</literal> is a dictionary of
IP addresses of the iSCSI initiator ports on all OpenStack nodes which
want to connect to VNX via iSCSI. If this option is configured,
the driver will leverage this information to find an accessible iSCSI
target portal for the initiator when attaching volume. Otherwise,
the iSCSI target portal will be chosen in a relative random way.</para>
</listitem>
<listitem>
<para>Restart <systemitem class="service">cinder-volume</systemitem> service
to make the configuration change take effect.</para>
</listitem>
</itemizedlist>
</section>
<section xml:id="emc-vnx-direct-auth">
<title>Authentication</title>
<para>VNX credentials are necessary when the driver connects to the
VNX system. Credentials in global, local and ldap scopes are
supported. There are two approaches to provide the credentials.</para>
<para>The recommended one is using the Navisphere CLI security file to
provide the credentials which can get rid of providing the plain text
credentials in the configuration file. Following is the instruction on
how to do this.</para>
<procedure>
<step><para>Find out the linux user id of the
<filename>/usr/bin/cinder-volume</filename>
processes. Assuming the service
<filename>/usr/bin/cinder-volume</filename> is running
by account <literal>cinder</literal>.</para></step>
<step><para>Switch to <literal>root</literal> account</para>
</step>
<step><para>Change
<literal>cinder:x:113:120::/var/lib/cinder:/bin/false</literal> to
<literal>cinder:x:113:120::/var/lib/cinder:/bin/bash</literal> in
<filename>/etc/passwd</filename> (This temporary change is to make
step 4 work).</para></step>
<step><para>Save the credentials on behalf of <literal>cinder</literal>
user to a security file (assuming the array credentials are
<literal>admin/admin</literal> in <literal>global</literal>
scope). In below command, switch <literal>-secfilepath</literal>
is used to specify the location to save the security file (assuming
saving to directory <filename>/etc/secfile/array1</filename>).</para>
<screen><prompt>#</prompt> <userinput>su -l cinder -c '/opt/Navisphere/bin/naviseccli -AddUserSecurity -user admin -password admin -scope 0 -secfilepath /etc/secfile/array1'</userinput></screen>
<para>Save the security file to the different locations for different
arrays except where the same credentials are shared between all arrays managed
by the host. Otherwise, the credentials in the security file will
be overwritten. If <literal>-secfilepath</literal> is not specified
in the command above, the security file will be saved to the default
location which is the home directory of the executor.</para>
</step>
<step><para>Change <literal>cinder:x:113:120::/var/lib/cinder:/bin/bash</literal>
back to <literal>cinder:x:113:120::/var/lib/cinder:/bin/false</literal> in
<filename>/etc/passwd</filename>.</para></step>
<step><para>Remove the credentials options <literal>san_login</literal>,
<literal>san_password</literal> and
<literal>storage_vnx_authentication_type</literal> from
<filename>cinder.conf</filename> (normally it is
<filename>/etc/cinder/cinder.conf</filename>). Add the option
<literal>storage_vnx_security_file_dir</literal> and set its value to the
directory path supplied with switch <literal>-secfilepath</literal> in step 4.
Omit this option if <literal>-secfilepath</literal> is not used in step 4.</para>
<programlisting language="ini">#Directory path that contains the VNX security file. Generate the security file first
storage_vnx_security_file_dir = /etc/secfile/array1</programlisting>
</step>
<step><para>Restart <systemitem class="service">cinder-volume</systemitem> service to make the
change take effect.</para></step>
</procedure>
<para>Alternatively, the credentials can be specified in
<filename>/etc/cinder/cinder.conf</filename> through the
three options below:</para>
<programlisting language="ini">#VNX user name
san_login = username
#VNX user password
san_password = password
#VNX user type. Valid values are: global, local and ldap. global is the default value
storage_vnx_authentication_type = ldap</programlisting>
</section>
<section xml:id="emc-vnx-direct-restriction">
<title>Restriction of deployment</title>
<para>It does not suggest to deploy the driver on a compute node if
<literal>cinder upload-to-image --force True</literal> is used
against an in-use volume. Otherwise,
<literal>cinder upload-to-image --force True</literal> will
terminate the vm instance's data access to the volume.</para>
</section>
<section xml:id="emc-vnx-direct-vol-ext-restriction">
<title>Restriction of volume extension</title>
<para>VNX does not support to extend the thick volume which has
a snapshot. If the user tries to extend a volume which has a
snapshot, the volume's status would change to
<literal>error_extending</literal>.</para>
</section>
<section xml:id="emc-vnx-direct-vol-iscsi-restriction">
<title>Restriction of iSCSI attachment</title>
<para>The driver caches the iSCSI ports information. If the iSCSI port
configurations are changed, the administrator should restart the
<systemitem class="service">cinder-volume</systemitem> service or
wait 5 minutes before any volume attachment operation. Otherwise,
the attachment may fail because the old iSCSI port configurations were used.</para>
</section>
<section xml:id="emc-vnx-direct-provisioning">
<title>Provisioning type (thin, thick, deduplicated and compressed)</title>
<para>User can specify extra spec key <literal>storagetype:provisioning</literal>
in volume type to set the provisioning type of a volume. The provisioning
type can be <literal>thick</literal>, <literal>thin</literal>,
<literal>deduplicated</literal> or <literal>compressed</literal>.</para>
<itemizedlist>
<listitem>
<para><literal>thick</literal> provisioning type means the volume is
fully provisioned.</para>
</listitem>
<listitem>
<para><literal>thin</literal> provisioning type means the volume is
virtually provisioned.</para>
</listitem>
<listitem>
<para><literal>deduplicated</literal> provisioning type means the
volume is virtually provisioned and the deduplication is enabled
on it. Administrator shall go to VNX to configure the system level
deduplication settings. To create a deduplicated volume, the VNX
deduplication license should be activated on VNX first, and use key
<literal>deduplication_support=True</literal> to let Block Storage scheduler
find a volume back end which manages a VNX with deduplication license
activated.</para>
</listitem>
<listitem>
<para><literal>compressed</literal> provisioning type means the volume is
virtually provisioned and the compression is enabled on it.
Administrator shall go to the VNX to configure the system level
compression settings. To create a compressed volume, the VNX compression
license should be activated on VNX first, and the user should specify
key <literal>compression_support=True</literal> to let Block Storage scheduler
find a volume back end which manages a VNX with compression license activated.
VNX does not support to create a snapshot on a compressed volume. If the
user tries to create a snapshot on a compressed volume, the operation would
fail and OpenStack would show the new snapshot in error state.</para>
</listitem>
</itemizedlist>
<para>Here is an example about how to create a volume with provisioning type. Firstly
create a volume type and specify storage pool in the extra spec, then create
a volume with this volume type:</para>
<screen><prompt>$</prompt> <userinput>cinder type-create "ThickVolume"</userinput>
<prompt>$</prompt> <userinput>cinder type-create "ThinVolume"</userinput>
<prompt>$</prompt> <userinput>cinder type-create "DeduplicatedVolume"</userinput>
<prompt>$</prompt> <userinput>cinder type-create "CompressedVolume"</userinput>
<prompt>$</prompt> <userinput>cinder type-key "ThickVolume" set storagetype:provisioning=thick</userinput>
<prompt>$</prompt> <userinput>cinder type-key "ThinVolume" set storagetype:provisioning=thin</userinput>
<prompt>$</prompt> <userinput>cinder type-key "DeduplicatedVolume" set storagetype:provisioning=deduplicated deduplication_support=True</userinput>
<prompt>$</prompt> <userinput>cinder type-key "CompressedVolume" set storagetype:provisioning=compressed compression_support=True</userinput></screen>
<para>In the example above, four volume types are created:
<literal>ThickVolume</literal>, <literal>ThinVolume</literal>,
<literal>DeduplicatedVolume</literal> and <literal>CompressedVolume</literal>.
For <literal>ThickVolume</literal>, <literal>storagetype:provisioning</literal>
is set to <literal>thick</literal>. Similarly for other volume types.
If <literal>storagetype:provisioning</literal> is not specified or an
invalid value, the default value <literal>thick</literal> is adopted.</para>
<para>Volume type name, such as <literal>ThickVolume</literal>, is user-defined
and can be any name. Extra spec key <literal>storagetype:provisioning</literal>
shall be the exact name listed here. Extra spec value for
<literal>storagetype:provisioning</literal> shall be
<literal>thick</literal>, <literal>thin</literal>, <literal>deduplicated</literal>
or <literal>compressed</literal>. During volume creation, if the driver finds
<literal>storagetype:provisioning</literal> in the extra spec of the volume type,
it will create the volume with the provisioning type accordingly. Otherwise, the
volume will be thick as the default.</para>
</section>
<section xml:id="emc-vnx-direct-tiering">
<title>Fully automated storage tiering support</title>
<para>VNX supports Fully automated storage tiering which requires the
FAST license activated on the VNX. The OpenStack administrator can
use the extra spec key <literal>storagetype:tiering</literal> to set
the tiering policy of a volume and use the extra spec key
<literal>fast_support=True</literal> to let Block Storage scheduler find a volume
back end which manages a VNX with FAST license activated. Here are the five
supported values for the extra spec key
<literal>storagetype:tiering</literal>:</para>
<itemizedlist>
<listitem>
<para><literal>StartHighThenAuto</literal> (Default option)</para>
</listitem>
<listitem>
<para><literal>Auto</literal></para>
</listitem>
<listitem>
<para><literal>HighestAvailable</literal></para>
</listitem>
<listitem>
<para><literal>LowestAvailable</literal></para>
</listitem>
<listitem>
<para><literal>NoMovement</literal></para>
</listitem>
</itemizedlist>
<para>Tiering policy can not be set for a deduplicated volume. The user can check
storage pool properties on VNX to know the tiering policy of a deduplicated
volume.</para>
<para>Here is an example about how to create a volume with tiering policy:</para>
<screen><prompt>$</prompt> <userinput>cinder type-create "AutoTieringVolume"</userinput>
<prompt>$</prompt> <userinput>cinder type-key "AutoTieringVolume" set storagetype:tiering=Auto fast_support=True</userinput>
<prompt>$</prompt> <userinput>cinder type-create "ThinVolumeOnLowestAvaibleTier"</userinput>
<prompt>$</prompt> <userinput>cinder type-key "CompressedVolumeOnLowestAvaibleTier" set storagetype:provisioning=thin storagetype:tiering=Auto fast_support=True</userinput></screen>
</section>
<section xml:id="emc-vnx-direct-fast-cache">
<title>FAST Cache support</title>
<para>VNX has FAST Cache feature which requires the FAST Cache license
activated on the VNX. The OpenStack administrator can use the extra
spec key <literal>fast_cache_enabled</literal> to choose whether to create
a volume on the volume back end which manages a pool with FAST Cache
enabled. The value of the extra spec key <literal>fast_cache_enabled</literal>
is either <literal>True</literal> or <literal>False</literal>. When creating
a volume, if the key <literal>fast_cache_enabled</literal> is set to
<literal>True</literal> in the volume type, the volume will be created by
a back end which manages a pool with FAST Cache enabled.</para>
</section>
<section xml:id="emc-vnx-direct-sg-autodeletion">
<title>Storage group automatic deletion</title>
<para>For volume attaching, the driver has a storage group on VNX for each
compute node hosting the vm instances that are going to consume VNX Block
Storage (using the compute node's hostname as the storage group's name).
All the volumes attached to the vm instances in a computer node will be
put into the corresponding Storage Group. If
<literal>destroy_empty_storage_group=True</literal>, the driver will
remove the empty storage group when its last volume is detached. For data
safety, it does not suggest to set the option
<literal>destroy_empty_storage_group=True</literal> unless the VNX
is exclusively managed by one Block Storage node because consistent
<literal>lock_path</literal> is required for operation synchronization for
this behavior.</para>
</section>
<section xml:id="emc-vnx-direct-storage-migration">
<title>EMC storage-assisted volume migration</title>
<para><literal>EMC VNX direct driver</literal> supports storage-assisted volume migration,
when the user starts migrating with
<literal>cinder migrate --force-host-copy False volume_id host</literal>
or <literal>cinder migrate volume_id host</literal>, cinder will try to
leverage the VNX's native volume migration functionality.</para>
<para>In the following scenarios, VNX native volume migration will
not be triggered:</para>
<itemizedlist>
<listitem>
<para>Volume migration between back ends with different
storage protocol, ex, FC and iSCSI.</para>
</listitem>
<listitem>
<para>Volume is being migrated across arrays.</para>
</listitem>
</itemizedlist>
</section>
<section xml:id="emc-vnx-direct-initiator-autoreg">
<title>Initiator auto registration</title>
<para>If <literal>initiator_auto_registration=True</literal>,
the driver will automatically register iSCSI initiators with all
working iSCSI target ports on the VNX array during volume attaching (The
driver will skip those initiators that have already been registered).</para>
<para>If the user wants to register the initiators with some specific ports
on VNX but not register with the other ports, this functionality should be
disabled.</para>
</section>
<section xml:id="emc-vnx-direct-initiator-autodereg">
<title>Initiator auto deregistration</title>
<para>Enabling storage group automatic deletion is the precondition of this
functionality. If <literal>initiator_auto_deregistration=True</literal> is set,
the driver will deregister all the iSCSI initiators of the host after its
storage group is deleted.</para>
</section>
<section xml:id="emc-vnx-direct-ro-vol">
<title>Read-only volumes</title>
<para>OpenStack supports read-only volumes. The following
command can be used to set a volume to read-only.</para>
<screen><prompt>$</prompt> <userinput
>cinder readonly-mode-update volume True</userinput></screen>
<para>After a volume is marked as read-only, the driver will forward
the information when a hypervisor is attaching the volume and the
hypervisor will have an implementation-specific way to make sure
the volume is not written.</para>
</section>
<section xml:id="emc-vnx-direct-multipool">
<title>Multiple pools support</title>
<para>Normally the user configures a storage pool for a Block Storage back end (named
as pool-based back end), so that the Block Storage back end uses only that
storage pool.</para>
<para>If <literal>storage_vnx_pool_name</literal> is not given in the
configuration file, the Block Storage back end uses all the pools on the VNX array,
and the scheduler chooses the pool to place the volume based on its capacities and
capabilities. This kind of Block Storage back end is named as
array-based back end.</para>
<para>Here is an example about configuration of array-based back end:</para>
<programlisting language="ini">san_ip = 10.10.72.41
#Directory path that contains the VNX security file. Make sure the security file is generated first
storage_vnx_security_file_dir = /etc/secfile/array1
storage_vnx_authentication_type = global
naviseccli_path = /opt/Navisphere/bin/naviseccli
default_timeout = 10
volume_driver = cinder.volume.drivers.emc.emc_cli_iscsi.EMCCLIISCSIDriver
destroy_empty_storage_group = False
volume_backend_name = vnx_41</programlisting>
<para>In this configuration, if the user wants to create a volume on
a certain storage pool, a volume type with a extra spec specified
the storage pool should be created first, then the user can use this
volume type to create the volume.</para>
<para>Here is an example about creating the volume type:</para>
<screen><prompt>$</prompt> <userinput
>cinder type-create "HighPerf"</userinput>
<prompt>$</prompt> <userinput>cinder type-key "HighPerf" set pool_name=Pool_02_SASFLASH volume_backend_name=vnx_41</userinput></screen>
</section>
<section xml:id="emc-vnx-direct-vol-num-threshold">
<title>Volume number threshold</title>
<para>In VNX, there is a limit on the maximum number of pool volumes that can be
created in the system. When the limit is reached, no more pool volumes can
be created even if there is enough remaining capacity in the storage pool. In other
words, if the scheduler dispatches a volume creation request to a back end that
has free capacity but reaches the limit, the back end will fail to create the
corresponding volume.</para>
<para>The default value of the option <literal>check_max_pool_luns_threshold</literal> is
<literal>False</literal>. When <literal>check_max_pool_luns_threshold=True</literal>,
the pool-based back end will check the limit and will report 0 free capacity to the
scheduler if the limit is reached. So the scheduler will be able to skip this kind
of pool-based back end that runs out of the pool volume number.</para>
</section>
<section xml:id="emc-vnx-direct-auto-zoning">
<title>FC SAN auto zoning</title>
<para>EMC direct driver supports FC SAN auto zoning when
ZoneManager is configured. Set <literal>zoning_mode</literal>
to <literal>fabric</literal> in back-end configuration section to
enable this feature. For ZoneManager configuration, please refer
to <xref linkend="section_fc-zoning"/>.</para>
</section>
<section xml:id="emc-vnx-direct-multibackend">
<title>Multi-backend configuration</title>
<programlisting language="ini">[DEFAULT]
enabled_backends = backendA, backendB
[backendA]
storage_vnx_pool_name = Pool_01_SAS
san_ip = 10.10.72.41
#Directory path that contains the VNX security file. Make sure the security file is generated first.
storage_vnx_security_file_dir = /etc/secfile/array1
naviseccli_path = /opt/Navisphere/bin/naviseccli
#Timeout in Minutes
default_timeout = 10
volume_driver = cinder.volume.drivers.emc.emc_cli_fc.EMCCLIFCDriver
destroy_empty_storage_group = False
initiator_auto_registration = True
[backendB]
storage_vnx_pool_name = Pool_02_SAS
san_ip = 10.10.26.101
san_login = username
san_password = password
naviseccli_path = /opt/Navisphere/bin/naviseccli
#Timeout in Minutes
default_timeout = 10
volume_driver = cinder.volume.drivers.emc.emc_cli_fc.EMCCLIFCDriver
destroy_empty_storage_group = False
initiator_auto_registration = True
[database]
max_pool_size = 20
max_overflow = 30</programlisting>
<para>For more details on multi-backend, see <link
xlink:href="http://docs.openstack.org/admin-guide-cloud/content/multi_backend.html">OpenStack
Cloud Administration Guide</link>.</para>
</section>
<section xml:id="emc-vnx-direct-volume-force-deletion">
<title>Force delete volumes in storage groups</title>
<para>Some available volumes may remain in storage groups on the VNX array due to some
OpenStack timeout issues. But the VNX array does not allow the user to delete the
volumes which are still in storage groups. The option <literal>
force_delete_lun_in_storagegroup</literal> is introduced to allow the user to delete
the available volumes in this tricky situation.</para>
<para>When <literal>force_delete_lun_in_storagegroup=True</literal> is set in the back-end
section, the driver will move the volumes out of storage groups and then delete them
if the user tries to delete the volumes that remain in storage groups on the VNX array.</para>
<para>The default value of <literal>force_delete_lun_in_storagegroup</literal> is
<literal>False</literal>.</para>
</section>
</section>