OpenStack 文件共享服务——Manila

介绍

本页介绍了为 OpenStack 建立共享文件系统服务的概念和愿景。该项目的开发名称是 Manila 。我们建议并正在实施新的 OpenStack 服务(最初基于 Cinder )。 Cinder 目前在 OpenStack 中用作规范存储配置控制平面用于块存储以及为实例存储提供持久性模型。文件共享服务原型以类似的方式提供对共享或分布式文件系统的协调访问。虽然文件共享的主要消耗将是跨 OpenStack Compute 实例,但该服务也可以作为独立功能访问,与其他 OpenStack 服务建立的模块化设计一致。设计和原型实现为多个后端提供了可扩展性(以支持供应商或文件系统特定的细微差别/功能),但旨在充分抽象以适应各种共享或分布式文件系统类型。该团队的目的是在 Juno 框架内引入 OpenStack 孵化项目的能力。

Shares Service.png

据 IDC 在其 2012 - 2016 年全球基于文件的存储预测 中称基于文件的存储仍然是一个蓬勃发展的市场,2016 年基于文件的存储解决方案的支出将达到 346 亿美元以上。在估计 2012 年出货的 27 个 Exabyte(EB)总容量中,IDC 预计近 18 个 EB 是基于文件的容量,占容量出货量的 65% 以上。从服务器虚拟化到关系或分布式数据库到协作内容创建的各种应用程序通常取决于性能,可扩展性和简单性。与基于文件的系统相关的管理,以及支持软件产品的庞大生态系统。作为领先的开放式 IaaS 功能,OpenStack 越来越多地被认为是在“即服务”模式中部署经典基础设施的一种选择,但没有特定的共享文件系统容纳代表了一个不完整的解决方。

Manila 项目全称是 File Share Service ,文件共享即服务。是 OpenStack 大帐篷模式下的子项目之一,用来提供云上的文件共享,支持 CIFS 协议和 NFS 协议。Manila 为 OpenStack 提供对共享文件系统的支持,作为对 OpenStack 现有存储特性非常必要的补充,扩展和改进了 OpenStack 访问外界共享存储的能力。

Manila 项目将共享文件系统引入 OpenStack 中。到目前为止,OpenStack 有两个主要存储项目:Cinder 和 Swift 。对于支持光纤通信和 iSCSI 协议的块存储设备,Cinder 提供块存储服务接口。

Cinder 块存储服务允许将单个卷挂载到虚拟机上,在块设备层提供高性能访问能力。但是由于在块级别协议层没有内置锁和数据同步机制,所以一个卷/LUN 只能由一个虚拟机(Nova guest)读写,而不支持并发访问。另一方面,块设备的容量往往也存在限制,使得它们很难实现在线扩容和减容。

Swift 针对大量二进制大对象提供对象存储。因为对象一般是不可变的,所以 Swift 并不适用于存储事务数据或者虚拟机。由于纠删码等数据保护手段的开销,对象存储也不适用于小对象,并且由于对象存储采用多副本等数据保护方法,也使得它非常低效。

Manila 的主要功能是为 Nova Compute 实例提供共享文件存储访问,外部存储资源可以是 NetApp 、EMC 等提供的商用硬件,也可以是 Ceph 、GlusterFS 等纯软件系统。Manila 将基于文件通信协议的外部存储系统映射给 Nova 主机和虚拟机,弥补了 OpenStack 块存储和对象存储能力的不足。由于 NAS 协议管理锁和保证并发访问需要的数据完整性,Manila 文件系统可以被多个主机和虚拟机并发访问。

Manila 有效管理文件系统实例的创建及与 Nova Compute 实例的映射关系,而不涉及数据路径。Manila 通过 API 接口、命令行和 OpenStack Horizon 显示界面集成对外提供特性。

项目

目前 Manila 项目的主导者是由各大存储厂商把持 NetApp、Mirantis、EMC、IBM 等等,项目情况的话目前版本也是跟随 OpenStack 版本发布一同发布的。

下面是 Manila 项目的 Git 地址、wiki 地址和 IRC 地址。每周四 23 点可以参与社区的 meeting 讨论。

Manila

类型 链接地址
Source code https://github.com/openstack/manila
Bug tracker https://bugs.launchpad.net/manila
Feature tracker https://blueprints.launchpad.net/manila

Python Manila Client

类型 链接地址
Source code https://github.com/openstack/python-manilaclient
Bug tracker https://bugs.launchpad.net/python-manilaclient
Feature tracker https://blueprints.launchpad.net/python-manilaclient

Meetings

类型 链接地址
WiKi Meetings 记录 https://wiki.openstack.org/wiki/Manila/Meetings
WiKi 文档 https://wiki.openstack.org/wiki/Manila
IRC channel #openstack-manila

Manila Project Plan

  1. 建立一个项目代号(暂定名: Manila )
  2. 建立一个 github 项目(完成)
  3. 建立一个 Launchpad 项目(正在进行中)
  4. 确定要移入 Oslo 中的组件及其相关组件
  5. 删除所有特定于块的内容
  6. 将对 “cinder” 的所有引用更改为新名称
  7. 测试并稳定生成的代码
  8. 将代码集成到 stackforge 中
  9. 编写 tempest 其他自动化测试
  10. 开始处理功能增强
    • horizon 的支持
    • 配额支持
    • “volume_types” 和过滤器调度程序支持
    • 文档
    • 额外的 driver 驱动支持
    • 网络管道

共享文件系统服务简介

共享文件系统服务提供计算实例可以使用的共享文件系统。

OpenStack 共享文件系统服务( Manila )为虚拟机提供文件存储。共享文件系统服务提供了用于管理和配置文件共享的抽象。该服务还支持共享类型的管理以及共享快照(如果驱动程序支持)。

逻辑架构

Manila 的逻辑架构如下图所示

1H2522346-0

共享文件系统的总体服务是通过以下具体服务实现的:

manila-api

一个 WSGI 应用程序,用于对整个共享文件系统服务进行身份验证和路由请求。它支持 OpenStack API。

manila-data

一个独立的服务,其目的是接收请求,处理具有潜在长时间运行时间的数据操作,例如复制、共享迁移或备份。

manila-scheduler

安排并将请求路由到适当的共享服务。调度程序使用可配置的过滤器和权重来路由请求。过滤器调度器是默认的,可以对诸如容量,可用性区,共享类型和功能以及自定义过滤器进行过滤。

manila-share

管理提供共享文件系统的后端设备。Manila 共享服务通过使用共享后端驱动程序作为接口与后端设备进行通信。共享驱动程序可以以两种模式之一操作,无论是否处理共享服务器。共享服务器通过共享网络导出文件共享。如果共享文件系统服务中的共享服务器没有由驱动程序管理时,应该在共享文件系统服务的带之外处理网络需求。

可运行于有共享服务器和无共享服务器两种模式。前者需要 Manila 关注组网,使用 nova、neutron 和 cinder 服务管理共享服务器;后者则不处理任何组网问题,使用 LVM 驱动和 NFS 共享,由用户保证云主机和 NFS 服务器之间的网络连接。

Messaging queue

在共享文件系统进程之间路由信息。

共享文件系统服务包含以下组件:

Back-end storage devices

共享文件服务服务需要某种形式的后端共享文件系统提供程序,该服务是基于该服务的。 引用实现使用块存储服务( Cinder ) 和服务虚拟机( VM ) 来提供共享。 其他驱动程序用于从各种供应商解决方案中访问共享文件系统。

后端对应着一个共享文件系统实例的提供者。后端在 manila.conf 中进行定义。一个实例必然对应一个后端,而一个后端有且只有一个驱动。通过采用多个后端的方式,可以提供数据服务以保障高可用。

Users and tenants (projects)

共享文件系统服务可以被许多不同的云计算消费者或客户(共享系统上的租户) 使用基于角色的访问任务。 角色控制了允许用户执行的操作。 在默认配置中,大多数操作不需要特定的角色,除非他们只限于管理员,但是这可以由维护规则的适当的 policy.json 文件中的系统管理员来配置。 用户管理特定股份的权限受到租户的限制。 通过 IP 或用户访问规则,可以保证访客登录和使用的权限。 用于控制可用硬件资源的资源消耗的配额是每个租户。

对租户而言,配额管制可以限制:

  • 可以创建的共享数量
  • 可供分享的千兆字节数
  • 可以创建的共享快照数量
  • 可以为共享快照提供的千兆字节数
  • 可以创建的共享网络的数量
  • 可以创建的共享组的数量
  • 可以创建的共享组快照的数量

您可以使用共享文件系统 CLI 修改默认配额值,因此配额设置的限制是由管理员用户编辑的。

Shares, snapshots, and share networks

共享文件系统服务提供的基本资源包括共享实例、快照和共享网络:

Shares

共享实例是一个指定了协议、大小和可访问列表的存储单元,是 Manila 提供的基础原语单元。 所有的共享实例都存在于后端, 一些共享实例与共享网络和共享服务器相关联。 文件系统实例可被多个虚拟机并发访问,支持的主要协议是 NFS 和 CIFS,但也支持其他协议。

Snapshots

快照是一个共享实例在某一时刻的只读镜像。快照只能用于创建新的共享实例(包含快照数据)。只有在所有相关快照被删除时,共享实例才能被删除。

Share networks

共享网络描述与文件系统实例相关的网络实现,告知 Manila 一组共享文件系统实例使用的安全和网络配置。一个共享网络包括安全服务( Security Service )和涉及的网络及子网( Network/Subnet )。共享网络是一个面向多租户定义的对象,Manila 通过共享网络支持多租户,网络多租户通过标准特性如 VLAN 和 VXLAN 实现。一个共享文件系统实例只能属于一个共享网络。

Share Type

共享类型是一个由管理员定义的“服务类型”,它包括一个租户可见的描述和一组租户不可见的键值对列表。Manila 调度器利用此键值对信息进行调度决策。

Extra Spec

额外规格即共享类型中的一组键值对。额外规格由 Manila 和后端驱动定义。

安全服务

安全服务指 LDAP、Active Directory、Kerberos 等用户安全服务。安全服务包含 Manila 创建一个服务器加入指定安全域必需的所有信息。一个共享文件系统实例可以被关联到多个安全服务。

Share Drivers

共享驱动的概念很明确。共享驱动是后端文件共享服务的具体实现,如 Clustered ONTAP、EMC VNX、GlusterFS 等。

Generic Share Driver

  • Manila 为每个共享网络创建一个 Nova 计算实例
  • Nova 计算实例通过 Cinder 的 Volume 来提供 NFS/CIFS 共享服务
  • 通过 Neturon 连接到现有网络及子网
  • 创建 Nova 实例所必需的 Nova 的 Flavor 、Glance 的镜像、SSH Keypair 均通过 Manila 进行配置
  • Manila 则通过 SSH 对 Nova 实例进行配置

1535077586076

Share Access Rule

Manila 通过共享访问规则定义哪些客户端可以访问共享文件系统实例。目前 Manila 支持的访问控制类型包括 IP 地址、用户名和 SSL 认证。

实例生命周期管理

Manila 提供完整的共享文件系统实例生命周期管理,包括:

  1. 创建、删除实例;
  2. 列出所有实例;
  3. 获得实例细节信息;
  4. 生成实例快照;
  5. 修改实例访问信息;
  6. 挂载和卸载文件系统实例。

使用场景

以下是 Manila 的部分关键使用场景:

  1. 替代自主开发(home-grown)的 NAS 部署工具。
  2. 支持传统企业应用。
  3. 按需的开发和构建环境。
  4. 通过 REST API 或命令与现有自动化框架集成。
  5. 支持云原生工作负载,如 DBaaS。
  6. 支持大数据,例如通过 Manila 的 HDFS 原生驱动插件。

  7. 提供安全的跨租户文件共享。

  8. 混合云间共享文件系统。

参考链接