Pure Storage iSCSI、光纤通道和 NVMe 卷驱动程序

Pure Storage FlashArray 卷驱动程序与 OpenStack 块存储交互,并支持各种操作。

通过 PureISCSIDriver 卷驱动程序类提供对 iSCSI 存储协议的支持,通过 PureFCDriver 提供对光纤通道的支持,通过 PureNVMEDriver 提供对 NVMe-RoCE 或 NVMe-TCP 的支持。

iSCSI、光纤通道和 NVMe-RoCE 驱动程序与支持 REST API 版本 2.4 及更高版本(Purity 6.1.0 及更高版本)的 FlashArray 兼容。NVMe-TCP 驱动程序与运行 Purity 6.4.2 及更高版本的 FlashArray 兼容。某些功能可能需要较新的 Purity 版本。

限制和已知问题

如果您没有配置托管实例的节点以使用多路径,则所有网络连接都将使用阵列上的单个物理端口。除了显著限制可用带宽外,这意味着您无法获得 FlashArray 提供的可用性和非破坏性升级优势。必须使用多路径才能利用这些优势。

支持的操作

  • 创建、删除、附加、分离、重定型、克隆和扩展卷。

  • 从快照创建卷。

  • 创建、列出和删除卷快照。

  • 创建、列出、更新和删除一致性组。

  • 创建、列出和删除一致性组快照。

  • 将卷恢复到快照。

  • 管理和取消管理卷。

  • 管理和取消管理快照。

  • 获取卷统计信息。

  • 创建精简配置卷。

  • 将卷复制到远程 Pure Storage 阵列

Pure Storage 驱动程序支持 QoS,包括在 OpenStack 块存储 API cinder.api.contrib.qos_spec_manage qos specs 扩展模块中设置以下功能:

  • maxIOPS - 允许的卷的最大 IOPS 数。范围:100 - 100M

  • maxBWS - MB/s 的最大带宽限制。范围:1 - 524288 (512GB/s)

  • maxIOPS_per_GB - 基于容量允许的卷的最大 IOPS 数。

    范围:100 - 100M

  • maxBWS_per_GB - 基于容量的 MB/s 的最大带宽限制。

    范围:1 - 524288 (512GB/s)

如果为 QoS 类型提供了最大值和每 GB 值,则最大值优先。

如果基于容量计算的卷的每 GB 值大于允许的最大值,则将应用允许的最大值。

上述 qos 键必须创建并与卷类型关联。有关如何设置键值对并将它们与卷类型关联的信息,请参阅 OpenStack Client 命令列表中的 volume qos 部分。

QoS 设置不应用于卷组中的任何卷,因为这些设置在卷组级别进行控制。

配置 OpenStack 和 Purity

您需要配置 Purity 阵列和 OpenStack 集群。

注意

这些说明假定 cinder-apicinder-scheduler 服务已安装并配置在您的 OpenStack 集群中。

配置 OpenStack 块存储服务

在这些步骤中,您将编辑 cinder.conf 文件,以配置 OpenStack 块存储服务以启用多路径并使用 Pure Storage FlashArray 作为后端存储。

  1. 安装 Pure Storage PyPI 模块。Pure Storage 驱动程序的要求是从 PyPI 安装 Pure Storage Python SDK 版本 1.47.0 或更高版本。

    $ pip install py-pure-client
    
  2. 从 Purity 获取 API 令牌。OpenStack 块存储服务配置需要来自 Purity 的 API 令牌。卷驱动程序执行的操作使用此令牌进行授权。此外,Purity 会将卷驱动程序的活动记录为由拥有此 API 令牌的用户执行的活动。

    如果您创建了一个专门用于管理 OpenStack 块存储卷的 Purity 用户帐户,请从该用户帐户复制 API 令牌。

    使用以下创建或列出命令来显示和复制 Purity API 令牌

    • 要创建新的 API 令牌

      $ pureadmin create --api-token USER
      

      以下是一个示例输出

      $ pureadmin create --api-token pureuser
      Name      API Token                             Created
      pureuser  902fdca3-7e3f-d2e4-d6a6-24c2285fe1d9  2014-08-04 14:50:30
      
    • 要列出现有的 API 令牌

      $ pureadmin list --api-token --expose USER
      

      以下是一个示例输出

      $ pureadmin list --api-token --expose pureuser
      Name      API Token                             Created
      pureuser  902fdca3-7e3f-d2e4-d6a6-24c2285fe1d9  2014-08-04 14:50:30
      
  3. 复制检索到的 API 令牌(从上面的示例中 902fdca3-7e3f-d2e4-d6a6-24c2285fe1d9)并在下一步中使用。

  4. 编辑 OpenStack 块存储服务配置文件。以下示例 /etc/cinder/cinder.conf 配置列出了使用单个 Pure Storage 阵列的典型块存储服务的相关设置

    [DEFAULT]
    enabled_backends = puredriver-1
    default_volume_type = puredriver-1
    
    [puredriver-1]
    volume_backend_name = puredriver-1
    volume_driver = PURE_VOLUME_DRIVER
    san_ip = IP_PURE_MGMT
    pure_api_token = PURE_API_TOKEN
    use_multipath_for_image_xfer = True
    

    相应地替换以下变量

    PURE_VOLUME_DRIVER

    对于 iSCSI,使用 cinder.volume.drivers.pure.PureISCSIDriver,对于光纤通道使用 cinder.volume.drivers.pure.PureFCDriver,对于 NVME 连接使用 cinder.volume.drivers.pure.PureNVMEDriver

    如果使用 NVME 驱动程序,请指定 pure_nvme_transport 值。支持的值是 rocetcp

    IP_PURE_MGMT

    Pure Storage 阵列的管理接口的 IP 地址或解析为该 IP 地址的域名。

    PURE_API_TOKEN

    卷驱动程序用于在 Pure Storage 阵列上执行卷管理的 Purity 授权令牌。

注意

卷驱动程序会根据需要自动为发起方创建 Purity 主机对象。如果通过 use_chap_auth 设置启用了 CHAP 身份验证,则必须确保没有手动创建具有将由 OpenStack 块存储服务使用的 IQN 的主机对象。驱动程序只会修改其管理的凭据的主机。

注意

如果使用 PureFCDriver,建议使用 OpenStack 块存储光纤通道区域管理器。

卷自动擦除

要启用删除卷、快照和一致性组时的自动擦除,请修改 cinder.conf 文件中的以下选项

pure_eradicate_on_delete = true

默认情况下,自动擦除已禁用,所有已删除的卷、快照和一致性组都会在删除后的 24 小时内保留在 Pure Storage 阵列上,以便恢复。

设置主机个性

主机个性确定 Purity 系统调整阵列和发起方之间的协议的方式。为了确保阵列与主机正常工作,请将个性设置为主机操作系统或虚拟内存系统的名称。有效值包括 aix、esxi、hitachi-vsp、hpux、oracle-vm-server、solaris 和 vms。如果您的系统未列为有效的宿主个性,请不要设置该选项。默认情况下,不设置主机个性。

要设置主机个性,请修改 cinder.conf 文件中的以下选项

pure_host_personality = <personality>

注意

pure_host_personality 可从 Purity REST API 版本 1.14 获取,并且仅影响新创建的主机。

SSL 证书

要启用 SSL 证书验证,请修改 cinder.conf 文件中的以下选项

driver_ssl_cert_verify = true

默认情况下,SSL 证书验证已禁用。

要指定指向 CA_Bundle 文件或包含受信任 CA 证书的目录的非默认路径

driver_ssl_cert_path = Certificate path

复制配置

将以下内容添加到后端规范,以指定另一个 Flash Array 进行复制

[puredriver-1]
replication_device = backend_id:PURE2_NAME,san_ip:IP_PURE2_MGMT,api_token:PURE2_API_TOKEN,type:REPLICATION_TYPE

其中 PURE2_NAME 是远程 Pure Storage 系统的名称,IP_PURE2_MGMT 是远程阵列的管理 IP 地址,PURE2_API_TOKEN 是远程阵列的 Purity 授权令牌。

对于 type 键的 REPLICATION_TYPE 值可以是 syncasync

如果 typesync,则将在拉伸 Pod 中创建卷。这需要预配置了启用 Active Cluster 的两个阵列。您可以选择指定 uniformtruefalse,这将指示驱动程序集群中的数据路径是统一的,并且应在连接时同时连接到两者。

请注意,可以添加多个 replication_device 行以允许对多个目标设备进行复制。

要启用三站点复制,即,将一个卷同步复制到一个阵列,并异步复制到另一个阵列,则必须提供两个,且仅有两个 replication_device 行,其中一个的 typesync,另一个的 typeasync。此外,必须将参数 pure_trisync_enabled 设置为 True

只有当卷属于具有额外规范 replication_enabled 设置为 <is> True 的卷类型时,才会复制该卷。您可以选择指定 replication_type 键以指定 <in> sync<in> async<in> trisync 以选择该卷的复制类型。如果未指定,则默认值为 async

要创建一个指定复制到远程后端的卷类型,复制方式为异步复制

$ openstack volume type create ReplicationType
$ openstack volume type set --property replication_enabled='<is> True' ReplicationType
$ openstack volume type set --property replication_type='<in> async' ReplicationType

下表包含与 Pure Storage 阵列异步复制配置可用的可选配置参数。

Pure Storage 复制配置选项

选项

描述

默认值

pure_replica_interval_default

快照复制间隔(秒)。

3600

pure_replica_retention_short_term_default

在目标上保留所有快照的时间(秒)。

14400

pure_replica_retention_long_term_per_day_default

每天保留多少个快照。

3

pure_replica_retention_long_term_default

在目标上每天保留快照的时间(天)。

7

pure_replication_pg_name

用于异步复制的 Pure Protection Group 名称(如果不存在,将创建)。

cinder-group

pure_replication_pod_name

用于同步复制的 Pure Pod 名称(如果不存在,将创建)。

cinder-pod

注意

failover-host 仅受支持从主阵列到任何多个辅助阵列,但随后的 failover-host 仅受支持返回到原始主阵列。

注意

pure_replication_pg_namepure_replication_pod_name 不应在 Cinder 后端中创建卷后更改,因为这可能会在复制和故障转移中产生意外结果。

自动精简配置/超额订阅率

此功能允许驱动程序计算阵列超额订阅率(总配置/实际使用)。默认情况下,此功能已启用。

要禁用此功能并遵守硬编码的配置选项 max_over_subscription_ratio,请在 cinder.conf 文件中添加以下选项

[puredriver-1]
pure_automatic_max_oversubscription_ratio = False

注意

具有非常好的数据缩减率(压缩/数据去重/精简配置)的阵列可能会应用非常高的超额订阅率。

调度指标

卷驱动程序报告大量指标,这些指标在实施多后端环境中更精细的卷放置控制时非常有用,使用驱动程序过滤器和称重方法。

性能指标基于前 30 秒的平均值提供。

报告的指标包括但不限于

total_capacity_gb
free_capacity_gb
provisioned_capacity
total_volumes
total_snapshots
total_hosts
total_pgroups
writes_per_sec
reads_per_sec
input_per_sec
output_per_sec
usec_per_read_op
usec_per_read_op
queue_usec_per_mirrored_write_op
queue_usec_per_read_op
queue_usec_per_write_op
replication_type

注意

所有总指标都包括阵列上的非 OpenStack 管理对象。

结合 QOS 额外规范,您可以创建非常复杂的算法来管理卷放置。有关更多详细文档,请参阅其他外部文档。

配置选项

以下列出了可以在 cinder.conf 中设置的所有 Pure 驱动程序特定的配置选项

Pure 配置选项说明

配置选项 = 默认值

描述

pure_api_token = None

(字符串) REST API 授权令牌。

pure_automatic_max_oversubscription_ratio = True

(布尔值) 根据当前总数据规约值自动确定超额订阅率。如果使用,此计算值将覆盖 max_over_subscription_ratio 配置选项。

pure_eradicate_on_delete = False

(布尔值) 启用后,在 Cinder 中删除时,所有 Pure 卷、快照和保护组都将被清除。设置为 True 后,删除后数据将无法恢复!禁用后,卷和快照将进入待清除状态,可以恢复。

pure_ghost_pod_name = cinder-ghost-pod

(字符串) Pure Ghost Pod 名称,用于重定型同步复制。

pure_host_personality = None

(字符串(选项=[‘aix’, ‘esxi’, ‘hitachi-vsp’, ‘hpux’, ‘oracle-vm-server’, ‘solaris’, ‘vms’, None])) 确定 Purity 系统调整数组和发起方之间使用的协议的方式。

pure_iscsi_cidr = 0.0.0.0/0

(字符串) FlashArray iSCSI 目标主机允许连接的 CIDR。默认允许连接到任何 IPv4 地址。此参数现在支持 IPv6 子网。当设置 pure_iscsi_cidr_list 时,将被忽略。

pure_iscsi_cidr_list = None

(字符串列表) FlashArray iSCSI 目标主机允许连接的 CIDR 逗号分隔列表。它支持 IPv4 和 IPv6 子网。此参数取代 pure_iscsi_cidr。

pure_nvme_cidr = 0.0.0.0/0

(字符串) FlashArray NVMe 目标主机允许连接的 CIDR。默认允许连接到任何 IPv4 地址。此参数现在支持 IPv6 子网。当设置 pure_nvme_cidr_list 时,将被忽略。

pure_nvme_cidr_list = None

(字符串列表) FlashArray NVMe 目标主机允许连接的 CIDR 逗号分隔列表。它支持 IPv4 和 IPv6 子网。此参数取代 pure_nvme_cidr。

pure_nvme_transport = roce

(字符串(选项=[‘roce’, ‘tcp’])) NVMe 驱动程序使用的 NVMe 传输层。

pure_replica_interval_default = 3600

(整数) 快照复制间隔,以秒为单位。

pure_replica_retention_long_term_default = 7

(整数) 在目标上保留此时间(天)的每日快照数量。

pure_replica_retention_long_term_per_day_default = 3

(整数) 保留每天多少个快照。

pure_replica_retention_short_term_default = 14400

(整数) 在目标上保留所有快照的时间(秒)。

pure_replication_pg_name = cinder-group

(字符串) 用于异步复制的 Pure 保护组名称(如果不存在,将被创建)。

pure_replication_pod_name = cinder-pod

(字符串) 用于同步复制的 Pure Pod 名称(如果不存在,将被创建)。

pure_trisync_enabled = False

(布尔值) 启用后,如果提供两个复制设备,分别对应同步和异步类型,则可以创建同步复制到一个数组,异步复制到另一个数组的卷。

pure_trisync_pg_name = cinder-trisync

(字符串) 用于 trisync 复制腿的 Pure 保护组名称,位于同步复制 Pod 内部(如果不存在,将被创建)。

Pure Storage 支持的额外规格

额外规格与 Block Storage 卷类型相关联。当用户请求特定卷类型的卷时,卷将在满足需求列表的存储后端上创建。在 Pure Storage 的情况下,这些供应商特定的额外规格可用于将特定卷类型的所有卷引入称为卷组的结构中。此外,存储服务质量限制可以应用于卷组。使用下表中的规格来配置卷组并将其与卷类型关联。使用 openstack volume type set 命令定义 Block Storage 卷类型。

Pure Storage FlashArray 的额外规格选项说明

额外规格

类型

描述

flasharray:vg_name

字符串

指定使用此卷类型的所有卷将创建的卷组的名称。

flasharray:vg_maxIOPS

字符串

卷组允许的最大 IOPS 数。范围 100 - 100M

flasharray:vg_maxBWS

字符串

卷组的最大带宽限制。范围 1024 - 524288 (512GB/s)