11月19日晚,陈迪豪在StuQ做了基于 OpenStack 的 NAS 服务的分享。陈迪豪在2012年就加入小米,陆续参与了米聊、基础架构以及智能家居的开发,并且第一次参与Hadoop和HBase开源社区的开发。加入UnitedStack后参与OpenStack存储和容器的研发工作,直接负责Glance、Cinder、Manila、Trove和Docker等项目。
本次课程将介绍基于OpenStack的NAS服务。包括OpenStack、NAS、NFS、CIFS还有Manila,其实这些都并不复杂,让我跟随他来一次“惊心动魄”的存储学习之旅。
上面提到的都是OpenStack的存储项目,我们知道OpenStack是可以提供对象存储、块设备存储、数据库和缓存服务、还有NAS存储等。那么今天我们就要解答两个问题,什么是OpenStack?什么是NAS服务?
OpenStack是什么?请看下面的图。
OpenStack是在应用程序和硬件中间的抽象层,你可以把一个服务器集群看作一个无限扩容的资源池,根据用户的需要分配计算、存储和网络资源。
目前OpenStack已经实现了AWS大部分基础功能,搭建好OpenStack后,你可以像使用物理机一样申请虚拟机,而且这个虚拟机是可以动态加内存和CPU的。
你也可以挂载云硬盘,并且动态调整云硬盘的容量大小。或者创建虚拟路由器和虚拟网络,在云上组织计算集群的网络拓扑。
除此之外,OpenStack还实现了认证服务、计费服务、负载均衡服务、调度服务、对象存储服务、数据库服务、大数据服务还有容器服务等等。
现在越来越多企业将应用迁移到AWS或者自研的云平台上,其实OpenStack公有云或私有云都能满足这样的需求,下面都是经过严肃生产环境验证的OpenStack项目。
OK,相信大家对OpenStack和云计算都有一定的了解。总结一下,云计算就是为多租户提供灵活、弹性、高可用、易扩容、高性能的计算、存储和网络服务。
那么我们在说存储服务的时候,除了数据库、缓存、对象存储、块设备存储,其实还有DAS、NAS和SAN。
前面几个大家都比较熟悉了,我们重点来聊聊什么是DAS、NAS和SAN。
请大家记住下面这个图。
DAS全称Direct Attached Storage,其实就是服务器直接连接存储设备,我们个人电脑通过数据线连接硬盘也属于DAS。DAS支持的协议主要包括SCSI和FC,SCSI不用过多介绍,因为这是目前最常见的解法,而FC(Fibre Channel)是专门为光纤优化的,还支持热插拔、远程连接、多设备连接等特性。
我们看到DAS提供的接口就是块设备,可以理解就是一块硬盘或者RAID,用户需要格式化成文件系统才能使用。
NAS全称Network Attached Storage,就是基于网络的存储服务,这里的网络一般是以太网。当存储通过网络交付后,局域网内多个应用都能通过网络挂载存储服务,而主流NAS服务都支持CIFS协议和NFS协议。
我们看到NAS的文件系统是在服务端配置的,因此提供的是文件系统服务,客户端直接mount就可以使用而不需要格式化。不要忘了今天我们的重点就是介绍如何在OpenStack上实现NAS服务。
最后SAN全称Storage Area Network,是整合存储和网络提供的高可用、高性能存储服务。和DAS一样,SAN提供的是块设备接口,但所有的数据都是通过网络保存到远端,其中支持的主流协议包括基于光纤的FC,还有基于以太网的iSCSI和FCoE等。我们基于Ceph提供的统一存储也被称为Server SAN,但不是今天分享的重点。
重点是,搭建一个NAS究竟有多难?
下面是OpenStack的NAS服务Manila的架构图。
看起来不简单,里面涉及认证服务、消息队列、关系型数据库,而且Manila的组件就包括manila-api、manila-scheduler和manila-share。但是想简单搭一个也可以,很多Linux初学者都搭过Samba服务器,一行命令即可。
那为什么上面的项目架构如此复杂呢?是因为基于OpenStack平台,我们可以实现一个架构灵活、存储资源高度可定制化的NAS服务。
首先介绍一下Manila项目,这是OpenStack上的文件共享服务,所谓文件共享就是提供一个支持多客户端并发读写的共享文件系统服务,也就是NAS。前面提到NAS对外提供文件系统存储,用户使用Manila直接mount服务地址即可,不需要格式化块设备,并且同样支持主流的CIFS协议和NFS协议。
Manila是一个多租户的服务,利用Keystone认证服务租户之前的资源互相隔离,也就是说用户A创建的文件共享实例不会被用户B看到或者攻击。Manila还基于Neutron虚拟化网络提供网络隔离,保证用户A创建的文件共享实例只允许在A的内网中访问。并且文件共享实例是通过Nova虚拟机服务进行资源隔离的,拥有比容器有更好的隔离性。
因此Manila是借助Keystone、Nova、Neutron这些成熟服务搭建起来的,本身的代码逻辑并不复杂,并且通过Driver的方式,允许像NetApp这样的商业存储厂商直接复用Manila的API。我们来重温一下Manila的架构图。
其中把manila-api、manila-scheduler和manila-share解耦让部署更加灵活,例如我们可以在多个控制节点部署多套manila-api,这样就能保证Manila服务的高可用了。
说了这么多,大家可能对Manila服务的使用还不太了解,我们通过图示一步一步带大家使用这个基于OpenStack的NAS服务吧,使用步骤如下(多图预警)。
好的,请大家回来,虽然操作步骤看着有点多,实际上都可以通过Web界面或API操作,虚拟机直接mount文件系统即可用。
如果大家对为什么私有网络要绑路由器存在疑惑,可以阅读我们对Manila网络的分析文章,作为本次分享的拓展内容http://www.jianshu.com/p/d04f829e3330
至于Manila的实现原理也很简单,社区制作的Ubuntu镜像已经安装Samba服务器,通过Glance上传镜像,用户创建文件共享实例时通过Nova创建虚拟机,调用Cinder来创建云硬盘,然后基于Neutron绑定网络和虚拟路由器,完成NAS服务的初始化工作。
Manila的支持两种网络架构,在我们环境中Manila服务的虚拟机只有一块网卡,因此通过路由器与用户的私有网络打通,架构图如下。
由于我们的虚拟机目前只有一块网卡,因此需要连接路由器,如果Manila虚拟机支持多块网卡,不需要绑定路由器也是可以的。
至此,我们已经介绍了基于OpenStack的NAS服务的使用和实现原理,想了解更多细节就需要深入源码学习,或者与更多人交流。如果大家都上面的使用步骤有疑惑,可以在ustack.com公有云上体验,也可以直接观看教程视频https://www.ustack.com/uos/milestones/
近期我们对NAS服务也有积极的尝试,例如在SAN上层分装NAS服务,类似中高端商业存储的做法。
还有完善Manila代码实现CephFS的Driver,这样就可以利用分布式统一存储Ceph的优势提供高可用、高性能的NAS服务了,当然这是后话了。
最后总结一下,基于OpenStack的NAS服务是由开源项目Manila实现的,OpenStack是目前最流行的云计算平台,得益于成熟的Nova、Cinder、Glance等组件,Manila项目实现了可靠、稳定的NAS存储服务。
那么今天针对基于OpenStack的NAS服务分享已经结束,非常感谢大家。
Q&A
1、cinder中也有文件共享功能,一个卷挂载给多个虚机使用。这个和现在的这个项目有那些区别?多谢。
回答:Cinder能够提供共享盘这样的块设备服务,但用户使用块设备时需要格式化文件系统才能使用,并且传统的Ext3/Ext4文件系统是不支持多个客户端同时读写的,而NAS服务可以支持并且保证多个客户端同时读写时数据不会损坏。
2、请问open stack可以搭建在一台服务器上吗?一台服务器虚拟出三台虚拟机组成最小的openstack平台?
回答:OpenStack是可以搭建在一台服务器上,可以使用devstack、packstack或fuel工具安装单机版,也可以在三台虚拟机中搭建小规模的OpenStack,但由于单机故障的风险,仅建议在测试环境使用。
3、FC san存储多路径原理?
回答:FC SAN的实现原理因存储厂商而定,我们使用Ceph实现的Server SAN是基于以太网,与FC SAN差异较大,因此这个问题我不好评论。
4、我想下载openstack,哪里可以下到完整版?貌似官网不行啊。
回答:如果想下载OpenStack,在Github有所有OpenStack项目的源代码,地址是 https://github.com/openstack
5、提问:层数多的情况下,跨节点的容器之间的访问路径过长,如果中间某个环节出故障,它是怎么恢复的?
回答:基于OpenStack的NAS服务是通过虚拟机提供兼容CIFS和NFS协议的存储服务,客户端与虚拟机服务器直接相连,不存在中间的转发服务,因此不存在这个问题。
6、其中提到devstack,我就是下载了这个,也可以用它安装多机的吗?
回答:使用devstack可以安装单机版OpenStack,目前不支持安装多机环境,如果希望安装多节点OpenStack,建议使用Packstack、Fuel或RDO工具。
7、manina 是否有容器的计划 把存储服务放在vm里,总会有性能损耗?
回答:把存储服务放在vm中,确实存在性能损耗,容器作为轻量化的虚拟化技术可以减少性能损耗。在上个月的OpenStack Summit大会上,Manila项目组也讨论过使用容器取代vm提供存储服务,但由于OpenStack上的Magnum、Kuryr项目尚未成熟,因此暂时还没有实现将存储服务放在容器的计划。
最后非常感谢大家的参与!