VNX 驱动

EMC manila 驱动框架 (EMCShareDriver) 利用 EMC 存储产品为 OpenStack 提供共享文件系统。EMC manila 驱动是一个基于插件的驱动,旨在利用不同的插件来管理不同的 EMC 存储产品。

VNX 插件是管理 VNX 以提供共享文件系统的插件。包含 VNX 插件的 EMC 驱动框架在此文档中称为 VNX 驱动。

此驱动通过 XMLAPI 和文件命令行在 VNX 上执行操作。每个后端管理 VNX 的一个数据移动器 (Data Mover)。需要配置多个 manila 后端来管理多个数据移动器。

注意

Dell EMC VNX 驱动已被弃用,将在未来的版本中移除

需求

  • VNX OE for File 版本 7.1 或更高版本。

  • 具有单个存储后端的 VNX Unified、仅文件或网关系统。

  • 应在 VNX 上激活以下许可证:* CIFS * NFS * SnapSure(用于快照) * ReplicationV2(用于从快照创建共享)

支持的操作

将在 VNX 阵列上支持以下操作

  • 创建 CIFS/NFS 共享

  • 删除 CIFS/NFS 共享

  • 允许 CIFS/NFS 共享访问 * 仅支持 NFS 的 IP 访问类型。 * 仅支持 CIFS 的用户访问类型。

  • 拒绝 CIFS/NFS 共享访问

  • 创建快照

  • 删除快照

  • 从快照创建共享

虽然通用驱动程序基于附加到 Nova VM 的 Cinder 卷创建共享文件系统,但 VNX 驱动程序使用阵列上的数据移动器执行类似的操作。

VNX 上的预配置

  1. 在数据移动器上启用 Unicode

VNX 驱动程序要求在数据移动器上启用 Unicode。

警告:启用 Unicode 后,无法禁用它。如果在 VNX 上启用 Unicode 之前创建了一些文件系统,请在启用 Unicode 之前咨询存储管理员。

要检查数据移动器上的 Unicode 状态,请在 VNX 控制台上使用以下 VNX 文件命令

server_cifs <mover_name> | head 其中:mover_name = <数据移动器的名称>

检查 I18N mode 字段的值。UNICODE 模式显示为 I18N mode = UNICODE

要为数据移动器启用 Unicode

uc_config -on -mover <mover_name> 其中:mover_name = <数据移动器的名称>

有关更多信息,请参阅 [EMC 支持站点](https://support.emc.com) 上的文档 Using International Character Sets on VNX for File

  1. 在数据移动器上启用 CIFS 服务

确保要由 VNX 驱动程序管理的数据移动器上已启用 CIFS 服务。

要启动 CIFS 服务,请使用以下命令

server_setup <mover_name> -Protocol cifs -option start [=<n>] 其中:<mover_name> = <数据移动器的名称> [=<n>] = <CIFS 用户的线程数>

注意:如果数据移动器上有 1 GB 内存,则默认值为 96 个线程;但是,如果内存超过 1 GB,则默认线程数为 256。

要检查 CIFS 服务状态,请使用此命令

server_cifs <mover_name> | head 其中:<mover_name> = <数据移动器的名称>

命令输出将显示启动的 CIFS 线程数。

  1. 数据移动器上的 NTP 设置

VNX 驱动程序仅支持与关联了 Active Directory 安全服务的共享网络创建 CIFS 共享。

创建 CIFS 共享需要数据移动器上的时间与 Active Directory 域同步,以便 CIFS 服务器可以加入域。否则,使用此安全服务创建共享时域加入将失败。有一个限制,即安全服务使用的域的时间,即使对于不同的租户和不同的共享网络,也应同步。时间差异应小于 10 分钟。

建议将 NTP 服务器设置为数据移动器和安全服务中使用的域中的相同公共 NTP 服务器,以确保时间在各处同步。

检查数据移动器上的日期和时间

server_date <mover_name> 其中:mover_name = <数据移动器的名称>

设置数据移动器的 NTP 服务器

server_date <mover_name> timesvc start ntp <host> [<host> …] 其中:mover_name = <数据移动器的名称> host = <时间服务器主机的 IP 地址>

注意:主机必须运行 NTP 协议。仅允许 4 个主机条目。

  1. 配置数据移动器上的用户映射

在使用 VNX 驱动程序创建 CIFS 共享之前,必须选择将 Windows SID 映射到 UID 和 GID 的方法。EMC 建议在默认情况下在 VNX 上启用的单协议(CIFS)环境中,使用 usermapper。

要检查 usermapper 状态,请使用此命令语法

server_usermapper <movername> 其中:<movername> = <数据移动器的名称>

如果未启动 usermapper,可以使用以下命令启动 usermapper

server_usermapper <movername> -enable 其中:<movername> = <数据移动器的名称>

对于多协议环境,请参阅 [EMC 支持站点](https://support.emc.com) 上的 Configuring VNX User Mapping 以获取更多信息。

  1. 网络连接

在当前版本中,VNX 驱动程序创建的共享使用数据移动器的第一个网络设备(NIC 上的物理端口)来访问网络。

转到 Unisphere 以检查设备列表:设置 -> 网络 -> 统一系统文件设置 -> 设备。

后端配置

需要在 /etc/manila/manila.conf 中配置以下参数,用于 VNX 驱动程序

emc_share_backend = vnx emc_nas_server = <IP 地址> emc_nas_password = <密码> emc_nas_login = <用户> emc_nas_server_container = <数据移动器名称> emc_nas_pool_name = <池名称> emc_interface_ports = <逗号分隔的端口列表> share_driver = manila.share.drivers.dell_emc.driver.EMCShareDriver driver_handles_share_servers = True

  • emc_share_backend 是插件名称。对于 VNX 驱动程序,将其设置为 vnx

  • emc_nas_server 是要管理的 VNX 系统的控制台 IP 地址。

  • emc_nas_passwordemc_nas_login 字段用于向 VNX 系统提供凭据。仅支持 VNX 文件的本地用户。

  • emc_nas_server_container 字段是为共享服务提供数据移动器的名称。

  • emc_nas_pool_name 是用户想要从中创建卷的池名称。可以使用 Unisphere for VNX 创建池。

  • emc_interface_ports 是逗号分隔的列表,指定数据移动器可以用于共享服务器接口的端口(设备)。列表的成员可以是 Unix 样式的 glob 表达式(支持 Unix shell 样式的通配符)。此列表是可选的。如果没有此选项,可以使用数据移动器上的任何端口。

  • driver_handles_share_servers 必须为 True,驱动程序将从 emc_interface_ports 中配置的端口列表中选择一个端口。

需要重新启动 manila-share 服务才能使配置更改生效。

IPv6 支持

VNX 驱动程序的 IPv6 支持在 Queens 版本中推出。该功能分为两部分

  1. 驱动程序能够管理 Neutron IPv6 网络中的共享或快照。

  2. 驱动程序能够使用其 IPv6 地址连接 VNX 管理接口。

IPv6 支持的预配置

需要在 /etc/manila/manila.conf 中配置以下参数,用于 VNX 驱动程序

network_plugin_ipv6_enabled = True

  • network_plugin_ipv6_enabled 指示已启用 IPv6。

如果您想使用 IPv6 地址连接 VNX,则应使用 nas_cs 命令为 VNX 配置 IPv6 地址,并在 /etc/manila/manila.conf 中指定地址

emc_nas_server = <IPv6 地址>

快照支持

在 OpenStack 的 Mitaka 和 Newton 版本中,默认情况下为新创建的共享类型启用快照支持。从 Ocata 版本开始,必须将 snapshot_support 附加规格设置为 True,才能允许共享类型的快照。如果省略了“snapshot_support”附加规格,或者将其设置为 False,则用户将无法对该共享类型的共享创建快照。该功能分为两部分

  1. 驱动程序能够创建/删除共享的快照。

  2. 驱动程序能够从快照创建共享。

快照支持的预配置

需要使用共享类型配置以下附加规格。

  • snapshot_support = True

  • create_share_from_snapshot_support = True

对于新的共享类型,可以在创建共享类型时直接设置这些附加规格

manila type-create --snapshot_support True --create_share_from_snapshot_support True ${share_type_name} True

或者,可以使用以下命令更新已有的共享类型

manila type-key ${share_type_name} set snapshot_support=True
manila type-key ${share_type_name} set create_share_from_snapshot_support=True

对共享进行快照并从快照创建共享

首先,需要从具有附加规格(snapshot_support=True、create_share_from_snapshot_support=True)的共享类型创建共享。然后使用命令对共享进行快照

manila snapshot-create ${source_share_name} --name ${target_snapshot_name} --description " "

在从上一步创建快照后,可以使用命令从该快照创建共享。

manila create nfs 1 --name ${target_share_name} --metadata source=snapshot --description " " --snapshot-id ${source_snapshot_id}

限制

VNX 驱动程序具有以下限制

  • 仅支持 NFS 的 IP 访问类型。

  • 仅支持 CIFS 的用户访问类型。

  • 仅支持 FLAT 网络和 VLAN 网络。

  • VLAN 网络支持有限制。用于创建共享网络的不同 VLAN 中的 Neutron 子网不能具有重叠的地址空间。否则,VNX 可能无法与 VLAN 中的主机通信。要为不同的 VLAN 创建具有相同子网地址的共享,请使用不同的数据移动器。

  • “Active Directory”安全服务是唯一支持的安全服务类型,并且需要创建 CIFS 共享。

  • 每个共享网络只能配置一个安全服务。

  • “active_directory”安全服务的 Active Directory 域名即使对于不同的租户也应是唯一的。

  • 数据移动器上的时间和安全服务中使用的 Active Directory 域应同步(时间差异应小于 10 分钟)。建议在数据移动器和 Active Directory 域上使用相同的 NTP 服务器。

  • 在 VNX 上,快照存储在 SavVols 中。VNX 系统允许创建和扩展 SavVol 使用的空间,直到系统中所有 SavVol 使用的空间总和超过系统可用总空间的默认 20%。如果达到 20% 的阈值,VNX 将生成警报。继续创建快照将导致旧快照失效(并且快照数据将被放弃)。存储管理员可以手动更改限制百分比值,具体取决于存储需求。建议管理员配置 SavVol 使用情况的通知。有关更多信息,请参阅 [EMC 支持站点](https://support.emc.com) 上的 Using VNX SnapSure 文档。

  • VNX 对虚拟数据移动器 (VDM)、文件系统、共享、检查点等数量有限制。VNX 驱动程序在 VNX 上创建虚拟数据移动器 (VDM) 以作为 manila 共享服务器。同样,文件系统是从 VDM 创建、挂载并通过 CIFS 或 NFS 协议导出以作为 manila 共享的。VNX 检查点充当 manila 共享快照。有关限制和相应配置配额,请参阅 [EMC 支持站点](https://support.emc.com) 上的 NAS Support Matrix 文档。

The manila.share.drivers.dell_emc.driver Module

EMC 特定的 NAS 存储驱动程序。此驱动程序是一个可插拔的驱动程序,允许将特定的 EMC NAS 设备作为底层后端插入。使用 Manila 配置变量“share_backend_name”来指定要使用的后端插件。

class EMCShareDriver(*args, **kwargs)

Bases: ShareDriver

EMC 特定的 NAS 驱动程序。允许使用 NFS 和 CIFS NAS 存储。

allow_access(context, share, access, share_server=None)

允许访问共享。

check_for_setup_error()

检查设置错误。

create_share(context, share, share_server=None)

在调用时创建共享。

create_share_from_snapshot(context, share, snapshot, share_server=None, parent_share=None)

从快照创建共享。

create_snapshot(context, snapshot, share_server=None)

创建快照。

delete_share(context, share, share_server=None)

删除共享。

delete_snapshot(context, snapshot, share_server=None)

删除快照。

deny_access(context, share, access, share_server=None)

拒绝访问共享。

do_setup(context)

共享驱动程序启动时执行的任何初始化。

ensure_share(context, share, share_server=None)

确保共享已导出。

ensure_shares(context, shares)

确保共享已导出。

extend_share(share, new_size, share_server=None)

扩展共享。

get_backend_info(context)

获取驱动程序和阵列配置参数。

get_configured_ip_versions()

获取允许的 IP 版本。

支持的版本以列表形式返回,可能的值为:[4],[6] 或 [4, 6]

断言 ipv6_implemented = True 的驱动程序必须覆盖此方法。 如果返回的列表中包含 4,则由此驱动程序创建的共享必须具有 IPv4 导出位置。 如果列表包含 6,则由此驱动程序创建的共享必须具有 IPv6 导出位置。

驱动程序应检查其存储控制器是否实际启用了并正确配置了 IPv4/IPv6。

get_default_filter_function()

获取默认的 filter_function 字符串。

每个驱动程序都可以覆盖该方法以返回一个众所周知的默认字符串(如果可用)。

参数:

pool – 获取筛选器的池名称或 None

返回值:

get_network_allocations_number()

返回创建 VIF 的网络分配数量。

get_share_server_network_info(context, share_server, identifier, driver_options)

获取共享服务器使用的网络分配。

参数:
  • context – 当前上下文。

  • share_server – 共享服务器模型。

  • identifier – 驱动程序特定的共享服务器标识符

  • driver_options – 辅助管理共享服务器的驱动程序选项字典

返回值:

包含后端分配的 IP 地址的列表。

示例

['10.10.10.10', 'fd11::2000', '192.168.10.10']
manage_existing(share, driver_options)

管理现有的共享

manage_existing_snapshot(snapshot, driver_options)

管理现有的共享快照

manage_existing_snapshot_with_server(snapshot, driver_options, share_server=None)

管理现有的共享快照

manage_existing_with_server(share, driver_options, share_server=None)

管理现有的共享

manage_server(context, share_server, identifier, driver_options)

管理共享服务器并返回编译后的后端详细信息。

参数:
  • context – 当前上下文。

  • share_server – 共享服务器模型。

  • identifier – 驱动程序特定的共享服务器标识符

  • driver_options – 辅助管理共享服务器的驱动程序选项字典

返回值:

标识符和字典,其中包含要保存在数据库中的后端详细信息。

示例

'my_new_server_identifier',{'server_name': 'my_old_server'}
revert_to_snapshot(context, snapshot, share_access_rules, snapshot_access_rules, share_server=None)

将共享(就地)恢复到指定的快照。

不删除共享快照。 必须将共享和快照都设置为“可用”,才能尝试还原。 快照必须是由 Manila 拍摄的最新快照;API 层执行此检查,因此驱动程序无需执行此操作。

必须就地将共享恢复到快照的内容。 应用程序管理员应使应用程序静默或以其他方式准备共享文件系统内容突然更改。

参数:
  • context – 当前上下文

  • snapshot – 要还原的快照

  • share_access_rules – 受影响共享的所有访问规则的列表

  • snapshot_access_rules – 受影响快照的所有访问规则的列表

  • share_server – 可选 – 共享服务器模型或 None

shrink_share(share, new_size, share_server=None)

缩小共享。

unmanage(share)

从 Manila 管理中删除指定的共享。

不删除底层的后端共享。

对于大多数驱动程序,这不需要执行任何操作。 但是,某些驱动程序可能会使用此调用来清理与后端共享关联的任何 Manila 特定配置。

如果提供的共享无法取消管理,则引发 UnmanageInvalidShare 异常,并说明失败原因。

当使用具有 driver_handles_share_servers extra-spec 设置为 False 的共享类型取消管理共享时,将调用此方法。

unmanage_server(server_details, security_services=None)

取消管理共享服务器。

如果驱动程序支持取消管理共享服务器,则驱动程序必须覆盖此方法并成功返回。

参数:
  • server_details – 共享服务器后端详细信息。

  • security_services – 与此共享服务器配置的安全服务列表。

unmanage_snapshot(snapshot)

从 Manila 管理中删除指定的快照。

不删除底层的后端共享快照。

对于大多数驱动程序,这不需要执行任何操作。 但是,某些驱动程序可能会使用此调用来清理与后端共享快照关联的任何 Manila 特定配置。

如果提供的共享快照无法取消管理,则引发 UnmanageInvalidShareSnapshot 异常,并说明失败原因。

当正在取消管理的快照属于具有 driver_handles_share_servers extra-spec 设置为 False 的共享类型的共享时,将调用此方法。

unmanage_snapshot_with_server(snapshot, share_server=None)

从 Manila 管理中删除指定的快照。

不删除底层的后端共享快照。

对于大多数驱动程序,这不需要执行任何操作。 但是,某些驱动程序可能会使用此调用来清理与后端共享快照关联的任何 Manila 特定配置。

如果提供的共享快照无法取消管理,则引发 UnmanageInvalidShareSnapshot 异常,并说明失败原因。

当正在取消管理的快照属于具有 driver_handles_share_servers extra-spec 设置为 True 的共享类型的共享时,将调用此方法。

unmanage_with_server(share, share_server=None)

从 Manila 管理中删除指定的共享。

不删除底层的后端共享。

对于大多数驱动程序,这不需要执行任何操作。 但是,某些驱动程序可能会使用此调用来清理与后端共享关联的任何 Manila 特定配置。

如果提供的共享无法取消管理,则引发 UnmanageInvalidShare 异常,并说明失败原因。

当使用具有 driver_handles_share_servers extra-spec 设置为 True 的共享类型取消管理共享时,将调用此方法。

update_access(context, share, access_rules, add_rules, delete_rules, update_rules, share_server=None)

更新对共享的访问权限。

the manila.share.drivers.dell_emc.plugins.vnx.connection 模块

EMC Manila 驱动程序的 VNX 后端。

class VNXStorageConnection(*args, **kwargs)

基类: StorageConnection

实现 EMC Manila 驱动程序的 VNX 特定功能。

allow_access(context, share, access, share_server=None)

允许访问共享。

check_for_setup_error()

检查设置错误。

clear_access(share, share_server, white_list)
connect(emc_share_driver, context)

连接到 VNX NAS 服务器。

create_share(context, share, share_server=None)

根据使用的协议创建共享并导出它。

create_share_from_snapshot(context, share, snapshot, share_server=None, parent_share=None)

从快照创建共享 - 克隆快照。

create_snapshot(context, snapshot, share_server=None)

从共享创建快照。

delete_share(context, share, share_server=None)

删除共享。

delete_snapshot(context, snapshot, share_server=None)

删除快照。

deny_access(context, share, access, share_server=None)

拒绝访问共享。

ensure_share(context, share, share_server=None)

确保共享已导出。

extend_share(share, new_size, share_server=None)

调用以扩展共享。

get_managed_ports()
get_network_allocations_number()

返回创建 VIF 的网络分配数量。

get_pool(share)

获取共享的池名称。

setup_server(network_info, metadata=None)

使用给定的网络参数设置和配置共享服务器。

teardown_server(server_details, security_services=None)

拆除共享服务器。

update_access(context, share, access_rules, add_rules, delete_rules, share_server=None)

更新给定共享的访问规则。

update_share_stats(stats_dict)

与 EMCNASClient 通信以获取统计信息。