Manila的逻辑架构如图12-5所示。
图12-5 Manila的逻辑架构
Manila包含如下关键组件:
1)接口(Manila-API):通过WSGI应用提供稳定的REST API。
2)客户端(Manila-client):命令行接口,通过Manila-api与Manila交互。
3)调度器(Manila-scheduler):将请求调度、路由到合适的Manila-share。
4)共享文件系统实例(Manila-share):负责与后端存储子系统进行通信并管理。
5)认证管理(Auth manager):负责用户、项目和角色的管理。
6)SQL数据库(SQL database):Manila采用基于SQL的中央数据库,数据库由各Manila、share共享。
Manila为OpenStack提供对共享文件系统的支持,所以Manila系统中有和NAS相似的概念和术语。
Manila主要概念如下:
1.共享文件系统实例(Share)
一个共享文件系统实例对应一个指定了访问协议、空间大小和可访问列表的存储。共享文件系统实例是Manila提供的基础原语单元。文件系统实例可被多个虚拟机并发访问,访问协议主要为NFS和CIFS。所有实例均由一个后端提供。某些实例会与共享网络(Share Networks)、共享服务器(Share Server)相关联。
2.快照
快照是共享文件系统实例在某一时刻的只读镜像。快照可用于创建新的实例。只有当所有相关联的快照被删除时,共享文件系统实例才能被删除。
3.共享类型(Share Type)
共享类型是一个由管理员定义的“服务类型”,它包括一个租户可见的描述和一组租户不可见的键值对列表。Manila调度器利用此键值对信息进行调度决策。
4.额外规格(Extra Spec)
额外规格即共享类型中的一组键值对。额外规格由Manila和后端驱动定义。
5.共享网络(Share Network)
共享网络描述与文件系统实例相关的网络实现,告知Manila一组共享文件系统实例使用的安全和网络配置。一个共享网络包括安全服务(Security Service)和涉及的网络及子网(Network/Subnet)。共享网络是一个面向多租户定义的对象,Manila通过共享网络支持多租户,网络多租户通过标准特性如VLAN和VXLAN实现。一个共享文件系统实例只能属于一个共享网络。
6.安全服务
安全服务指LDAP、Active Directory、Kerberos等用户安全服务。安全服务包含Manila创建一个服务器加入指定安全域必需的所有信息。一个共享文件系统实例可以被关联到多个安全服务。
7.后端(Backend)
后端对应着一个共享文件系统实例的提供者。后端在manila.conf中进行定义。一个实例必然对应一个后端,而一个后端有且只有一个驱动。通过采用多个后端的方式,可以提供数据服务以保障高可用。
8.共享驱动(Share Driver)
共享驱动的概念很明确。共享驱动是后端文件共享服务的具体实现,如Clustered ONTAP、EMC VNX、GlusterFS等。
9.共享访问规则(Share Access Rule)
Manila通过共享访问规则定义哪些客户端可以访问共享文件系统实例。目前Manila支持的访问控制类型包括IP地址、用户名和SSL认证。
Manila用户首先创建一个共享网络,之后创建共享文件系统实例。和Cinder一样,Manila用户可以配置多个后端。Manila为每一个租户分配一个共享服务器。
Manila管理员可以创建一个唯一的共享类型,厂商驱动将后端能力上报给Manila调度器,匹配并记录到键值对。事实上,和Cinder一样,不同厂商可以通过驱动暴露更多的差异化能力,例如去重、压缩等。对于每个共享文件系统实例请求,Manila调度器根据键值对的存储容量和能力信息决策部署策略。Manila采用FilterScheduler智能调度文件系统实例,Filter Scheduler使得云系统管理员可以基于预设的参数过滤后端,从而管理大规模共享存储。
Manila提供共享文件系统服务示例如图12-6所示。
图12-6 Manila提供共享文件系统服务
Manila提供完整的共享文件系统实例生命周期管理,包括:
1)创建、删除实例;
2)列出所有实例;
3)获得实例细节信息;
4)生成实例快照;
5)修改实例访问信息;
6)挂载和卸载文件系统实例。
Manila的部署并不仅限于传统存储阵列,目前很多供应商正积极开展基于CEPH和GlusterFS开源存储平台的开发。其中包括支持传统NAS(NFS/SMB)以外的协议,例如在KVM Hypervisor内设备驱动采用原生Ceph协议。用户空间(User Space)实现NFS服务器的开源项目NFS-Ganesha也可用于抽象底层NFS服务器硬件,当然这会在数据路径上引入延迟和更多的复杂性。Manila也支持采用其自身提供的通用驱动,用户可以直接采用通用驱动,而不需要引入外设存储阵列。
Manila的通用驱动思路,是通过Nova创建一台服务器虚拟机(Service VM),通过Cinder创建一个卷,并挂载到服务器虚拟机上,如图12-7所示。服务器虚拟机格式化Volume,将其作为共享目录,对外提供NFS/CIFS共享服务。
图12-7 Manila通用驱动原理图
Manila通用驱动具体实现如下:
Manila为每个共享网络创建一个Nova计算实例。Nova计算实例通过Cinder的Volume来提供NFS/CIFS共享服务,通过Neturon连接到现有网络及子网。创建Nova实例所必需的Nova的Flavor、Glance的镜像、SSH Keypair均通过Manila进行配置。Manila则通过SSH对Nova实例进行配置。