张秋萍
(山东省计算中心,国家超级计算济南中心,济南 250101)
OpenStack是一个开源的云计算平台项目,它的开源社区维护了几个核心服务组件,用于实现对于计算资源、存储资源、网络资源、租户/域等内容的管理,经过近十年的运行,OpenStack已可以提供大规模扩展的私有云和公有云服务,成为众多企业“上云”的首选。
Cinder作为OpenStack一个核心组件,为Open-Stack云平台提供存储服务。Cinder本身并不是存储资源,而是在云主机和存储设备之间引入了一层“逻辑存储卷”,实现统一抽象的存储接口来对接不同的存储类型,使OpenStack可以对接不同的存储类型,在用户提供的存储资源上,Cinder可实现与普通硬盘类似的“云硬盘”管理服务。
虽然Cinder可以为OpenStack平台内的用户提供存储服务,却不具备共享存储能力,无法为多用户或多主机提供同时访问同一存储盘的能力。为实现文件共享存储,OpenStack衍生出Manila子项目,该项目可以为OpenStack平台提供基于CIFS协议和NFS协议的共享文件存储服务,OpenStack平台内同一用户下的多个主机可使用CIFS协议或NFS协议其中之一访问同一块共享存储内容。不过,Manila项目仅可为Open-Stack平台提供“云上”的共享存储服务,且现有的实现中仅能支持CIFS协议或NFS协议中的一种,虽然能支持同一用户的多主机访问,却不能满足多租户的多主机同时访问,也不能满足同一用户的多主机使用不同的协议访问,为了满足这一需求,本文进行研究并结合实际生产需求,进行改进和实现。
Manila服务组件的技术架构如图1所示,与Open-Stack的其他服务一样,使用Python进行了开发,且总体技术结构也与核心组件保持了一致,组件之间通讯可通过RPC或API接口的,以插件的形式作为Open-Stack服务组件。
图1 Manila组件架构
Manila服务创建共享存储的流程如图2所示,Manila各子服务之间及和其他服务组件通讯时若需要经过网络层,使用OpenStack Neutron服务提供的网络进行通讯,基本上,用户在使用Manila服务提供的功能之前需首先创建网络(共享存储网络),并确保共享存储与访问共享存储时的云主机处于同一网络下。
图2 Manila共享存储创建流程
Manila针对底层存储资源进行抽象,可以对接CephFS、容器、HDFS、Windows文件存储、华为云存储、IBM及OpenStack的Cinder存储卷等多种存储资源或接口。Manila可支持多种底层存储资源和类型成为共享存储。当使用特定的存储资源时,首先将存储资源与OpenStack存储服务对接,创建共享存储时就会从资源池中创建对应的存储卷。不过,Manila服务不能支持将已有的存储卷或资源共享出来,即若OpenStack已经将某一块存储资源创建成为存储卷,Manila服务则不能使用该存储卷提供共享服务,提供共享服务时必须要重新分配存储卷或资源。
Manila现有的共享存储,可支持NFS或CIFS网络文件传输协议中的一种,具体来说,Manila服务为每个Manila共享存储网络提供了一台OpenStack云主机作为共享存储服务器,服务器上预先安装了NSF和CIFS服务,当用户创建共享存储时,首先指定具体的网络文件传输协议:NFS或CIFS,共享存储服务器根据用户选定的网络文件传输协议,利用NSF和CIFS服务初始化对应协议的配置。
当用户的主机需要访问共享存储时,Manila需首先为主机进行共享存储授权,如图3所示,将该主机的IP信息,通过远程调用的方式写入到共享存储服务器的配置中,并为其开通NSF或CIFS协议访问共享存储服的权限,Manila允许主机访问共享存储,实际上是允许主机访问共享存储服务器。
图3 Manila共享存储授权流程
Manila目前的技术架构和实现,为OpenStack云平台,提供了单用户下,多主机、单网络文件传输协议的文件共享存储服务。下文将展开论述基于Manila实现多租户、多协议,并将已有存储卷作为共享存储。
基于Manila服务组件实现多租户、多协议的共享存储,即在Manila原有服务的基础上,同时支持多租户使用不同的网络文件传输协议访问共享存储,同时在对接Cinder存储时,还实现了从已有的存储卷创建共享存储,将已有存储卷上的内容共享出去,而不需要每次都创建新的存储卷。多租户、多协议共享存储技术架构如图4所示。
Manila使用OpenStack的keystone认证服务作为认证中间件,如图5所示,这使得Manila在租户、认证等方面完全和其他OpenStack组件一样,当OpenStack的用户访问Manila服务时,每个用户只能访问自己创建的共享存储,因此一个Manila的共享存储无法满足多个用户的访问。
图5 Manila keystone认证体系
为使共享存储满足多个用户同时访问,平台设计独立的用户认证体系,去除Manila组件中keystone认证模块,每个用户需进行认证的同时,还可访问同一个共享存储。修改后的认证架构如图6所示。
图6 Manila独立认证体系
在第1节中描述了Manila的共享存储同一时间仅可支持一种网络文件传输协议,这是由于用户指定文件传输协议时,Manila服务会在共享存储服务器上初始化对应协议的配置。为满足多种网络文件传输协议同时访问,修改Manila组件中配置文件传输协议的部分,若用户在创建共享存储时指定多种网络文件传输协议,Manila服务会在共享存储创建后,调用命令向共享存储服务器添加两条网络文件传输协议规则:CIFS和NFS各一条;对主机进行访问授权时,也会分别对主机IP在CIFS和NFS服务配置中进行授权,允许主机通过CIFS和NFS协议访问进行挂载或连接操作。
当用户创建共享存储时Manila首先创建一块存储卷,再为存储卷配置访问规则,最终完成共享存储的初始化。但在实际应用中,从已有存储卷创建共享存储,却是非常常见的应用场景:若用户已有一块存储卷,且存储卷中存放了要共享的数据,则当前共享存储的创建和授权流程无法满足这种需求。为满足这种使用场景,平台修改Manila服务组件中初始化存储卷的内容:若用户创建共享存储时不指定存储卷,则沿用已有方式,创建一块新的数据盘并进行格式化,共享存储服务器使用新盘进行相关配置;若用户指定存储卷,则不再进行创建和格式化流程,仅提供出已有存储卷的访问接口,共享存储服务器使用已有数据盘进行相关配置,完成后续创建和配置流程,用户或主机访问此共享存储时,仍然可访问存储在数据盘上的数据。
平台采用Python作为主要开发语言,技术架构如图7所示,沿用Manila原有技术机构,平台各项服务均提供RPC和HTTP API的调用方式。调用时首先经过认证,认证通过后方可进入存储卷服务调用流程,存储卷服务中提供新建存储卷和使用原有存储卷两种方式,存储卷准备完成后,在共享存储服务器上完成网络文件传输协议配置,并将存储卷挂载到共享存储服务器上。
图7 共享存储平台技术架构
各服务功能如下:
(1)认证服务:与数据库进行交互,对HTTP API方式的访问者进行认证和鉴权。
(2)存储卷管理服务:对接底层存储资源,负责底层存储资源与存储卷的相互转换,实现对存储卷的创建、修改、删除等功能。
(3)网络文件传输协议配置服务:对已存在的存储卷,进行CIFS和NFS协议配置,在共享存储服务器中添加或删除相应的访问协议规则。
(4)挂载服务:对主机或用户进行配置,允许用户或主机访问特定的共享存储卷。
平台支持分布式多节点部署,在实际使用中可根据用户使用量水平扩展服务,平台的部署包括Open-Stack Manila组件部署、共享存储服务器运行节点部署及其他服务部署。
平台使用Ubuntu 16.04操作系统,使用apt工具安装OpenStack Manila和Neutron服务组件,底层采用CephFS存储池,共享存储服务器为Manila组件提供的Linux服务器,用户创建共享存储网络时Manila组件自动创建共享存储服务器。平台的认证、存储卷管理、网络文件传输协议配置、挂载、数据库等服务,则可根据实际需求水平扩展,同时使用HA策略实现各服务的多节点高可用,平台部署图如图8所示。
图8 共享存储平台部署架构
基于OpenStack Manila的多租户多协议共享存储平台,利用OpenStack核心组件和Manila组件的原有功能,对用户认证、多文件传输协议、存储卷管理等内容进行了修改和优化,使用多节点高可用部署,最终实现了一个高可用的共享存储平台。