GPFS Driver

GPFS 驱动程序使用 IBM 通用并行文件系统 (GPFS),由 IBM 开发的高性能集群文件系统,作为存储后端,为 manila 客户端提供文件共享。

支持的共享文件系统

  • NFS(通过 IP 访问)

支持的操作

  • 创建 NFS 共享

  • 删除 NFS 共享

  • 创建共享快照

  • 删除共享快照

  • 从共享快照创建共享

  • 允许 NFS 共享访问

    • 当前仅支持 ‘rw’ 访问级别

  • 拒绝 NFS 共享访问

需求

  • 在存储后端上安装带有服务器许可证的 GPFS,版本 >= 2.0。

  • 在存储后端服务器上安装 Kernel NFS 或 Ganesha NFS 服务器。

  • 如果使用 Ganesha NFS,则当前支持 NFS Ganesha v1.5 和 v2.0。

  • 创建一个 GPFS 集群并在集群上创建一个文件系统,该文件系统将用于创建 manila 共享。

  • 为 GPFS 文件系统启用配额 (mmchfs -Q yes)。

  • 建立 manila 宿主机与存储后端之间的网络连接。

Manila 驱动程序配置设置

需要在 manila 配置文件中设置以下参数

  • share_driver = manila.share.drivers.ibm.gpfs.GPFSShareDriver

  • gpfs_share_export_ip = <要添加到 GPFS 导出字符串的 IP>

  • 如果后端 GPFS 服务器未在 manila 主机机器上运行,则需要以下选项才能通过 SSH 连接到远程 GPFS 后端服务器

    • gpfs_ssh_login = <GPFS 服务器 SSH 登录名>

      并且需要以下设置之一才能通过 SSH 执行命令

    • gpfs_ssh_private_key = <用于登录的 GPFS 服务器 SSH 私钥的路径>

    • gpfs_ssh_password = <GPFS 服务器 SSH 登录密码>

以下配置参数是可选的

  • gpfs_mount_point_base = <导出共享所在的基目录>

  • gpfs_nfs_server_type = <KNFS|GNFS>

  • gpfs_nfs_server_list = <完全限定的 NFS 服务器名称列表>

  • gpfs_ssh_port = <ssh 端口号>

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

已知限制

  • 该驱动程序不支持分段网络多租户模型,而是使用扁平网络,租户共享网络。

  • 在使用远程 GPFS 节点和 Ganesha NFS 时,必须指定远程登录 GPFS 节点的 ‘gpfs_ssh_private_key’,并且必须在 manila 共享服务和远程 GPFS 节点之间已经设置了无密码身份验证。

The manila.share.drivers.ibm.gpfs 模块

用于共享的 GPFS 驱动程序。

配置要求

GPFS 文件系统必须启用配额 (mmchfs -Q yes)。

说明

GPFS 独立文件集用于每个共享。

TODO(nileshb):添加共享服务器创建/删除/处理的支持。

限制

在使用远程 GPFS 节点和 Ganesha NFS 时,必须指定远程登录 GPFS 节点的 ‘gpfs_ssh_private_key’,并且必须在 Manila 共享服务和远程 GPFS 节点之间已经设置了无密码身份验证。

class CESHelper(execute, config_object)

基类: NASHelperBase

Spectrum Scale CES 的 NFS 包装器

allow_access(local_path, share, access)

允许访问主机。

deny_access(local_path, share, access, force=False)

拒绝访问主机。

get_access_option(access)

根据访问级别获取访问选项字符串。

remove_export(local_path, share)

删除导出。

resync_access(local_path, share, access_rules)

重新同步给定共享的所有访问规则。

class GPFSShareDriver(*args, **kwargs)

基类: ExecuteMixin, GaneshaMixin, ShareDriver

GPFS 共享驱动程序。

执行与共享相关的命令。支持在 GPFS 集群上创建共享。

API 版本历史

1.0 - 初始版本。1.1 - 添加了 extend_share 功能。2.0 - 添加了 NFS Ganesha 的 CES 支持

check_for_setup_error()

如果未满足先决条件,则返回错误。

create_share(ctx, share, share_server=None)

创建将表示共享的 GPFS 目录。

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

用于从快照创建共享。

create_snapshot(context, snapshot, share_server=None)

创建快照。

delete_share(ctx, share, share_server=None)

删除并清理共享存储。

delete_snapshot(context, snapshot, share_server=None)

删除快照。

do_setup(context)

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

ensure_share(ctx, share, share_server=None)

确保存储已挂载和导出。

extend_share(share, new_size, share_server=None)

扩展共享文件集的配额。

get_network_allocations_number()

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

使用 Nova 进行共享服务器的驱动程序应在此处返回零 (0),就像通用驱动程序一样。因为 Nova 将处理网络资源分配。自行处理网络的驱动程序应根据自己的要求进行计算。它可以有 1 个或多个网络接口。

manage_existing(share, driver_options)

将现有共享置于 Manila 管理之下。

如果提供的共享无效,则引发 ManageInvalidShare 异常,说明失败原因。

如果提供的共享处于无法管理的状态,例如在后端上复制,则驱动程序 *必须* 引发 ManageInvalidShare 异常,并提供适当的消息。

共享具有 share_type,驱动程序可以检查该 share_type 并与引用的后端共享的属性进行比较。如果它们不兼容,则引发 ManageExistingShareTypeMismatch,说明失败原因。

当使用具有设置为 False 的 driver_handles_share_servers 额外规范的 share type 管理共享时,调用此方法。

参数:
  • share – 共享模型

  • driver_options – 管理员提供的驱动程序特定选项。

返回值:

share_update 字典,其中包含所需的键 ‘size’,该键应包含共享的大小。

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

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

class KNFSHelper(execute, config_object)

基类: NASHelperBase

Kernel NFS 命令的包装器。

allow_access(local_path, share, access, error_on_exists=True)

允许访问一个或多个虚拟机实例。

deny_access(local_path, share, access)

删除一个或多个虚拟机实例的访问权限。

get_access_option(access)

根据访问级别获取访问选项字符串。

remove_export(local_path, share)

删除导出。

resync_access(local_path, share, access_rules)

重新同步给定共享的所有访问规则。

class NASHelperBase(execute, config_object)

基类: object

与共享交互的接口。

abstract allow_access(local_path, share, access)

允许访问主机。

create_export(local_path)

构造新的导出的位置。

abstract deny_access(local_path, share, access)

拒绝访问主机。

abstract get_access_option(access)

根据访问级别获取访问选项字符串。

get_export_options(share, access, helper)

获取导出选项。

abstract remove_export(local_path, share)

删除导出。

abstract resync_access(local_path, share, access_rules)

重新同步给定共享的所有访问规则。