摘 要: 基于OpenStack本身的块存储设计,在云计算平台中实现了多节点块存储的iSCSI SAN配置,为虚拟机提供了跨网段、跨节点的独立块存储服务,并在不同节点间、虚拟机上分别对其进行测试,对学习和实际构建云平台中跨网段多节点的块存储服务有参考价值。
关键词: OpenStack;多节点块存储;iSCSI SAN
0 引言
随着云计算的不断发展,各种云计算管理平台应运而生,如Eucalyptus、OpenStack。而在各种各样的云计算管理平台中只有OpenStack是完全开源的,而开源的云计算管理平台则一致被业界和学术界认为是未来云计算发展的方向[1]。
OpenStack是由Rackspace和NASA共同开发的云计算平台,帮助服务商和企业内部实现类似于Amazon EC2和S3的云基础架构服务(Infrastructure as a Service,IaaS)。前者是NASA开发的虚拟服务器部署和业务计算模块;后者是Rackspace开发的分布式云存储模块,两者可以一起用,也可以分开单独用。OpenStack是一个开源项目,除了有Rackspace和NASA的大力支持外,后面还有包括Dell、Citrix、Cisco、Canonical这些重量级公司的贡献和支持,其发展非常之迅速[2]。
1 OpenStack块存储服务
OpenStack创建出来的实例是没有永久存储的,关闭实例后数据都会丢失,所以需要存储卷来保存每个instance的数据。这项工作由nova-volume实现,提供类似亚马逊EBS的块存储服务。
其中,nova-volume专门管理卷的创建、删除、挂载等,这些卷基于lvm管理,使用iSCSI提供服务,并通过libvirt与虚拟机交互。存储池在libvirt中分配的id标志着它成为libvirt可管理的对象,生成卷组vg(volume group,OpenStack中必须nova-volumes)就有了可划分存储卷的存储池,状态为活跃(active)状态才可以执行划分存储卷的操作,其流程如图1所示。
在单机块存储中,一个块设备指一个磁盘分区。以Linux操作系统为例,在设备目录/dev/下会看到挂载的块存储设备。再通过fdisk分区工具将磁盘分区。
但是,在当前海量数据存储和超高任务访问量的需求下,单机的块存储已经远远不能满足大数据量的要求。通过光纤通道存储(SAN)将不同种类、性能和大小的存储设备集合在一起统一向外提供服务,能够满足性能和价格方面的需求[3]。
而OpenStack云平台中只提供类似于EBS块存储的API框架,当前的实现方式是Ceph。它并没有实现对多个节点块设备的管理和实际服务的提供。
OpenStack目前作为商业应用云计算平台并不多见,而将多节点的物理存储资源在OpenStack上进行统一管理是商业应用必需的[4]。
为此本文引入光纤通道存储局域网技术(Fibre Channel Storage Area Network,FC SAN)。这是一种用可靠的小型计算机系统接口(Small Computer System Interface,SCSI)协议将存储设备与相关的服务器连接起来的高速子网。
2 iSCSI存储服务
iSCSI把SCSI命令封装在TCP包中,通过TCP/IP协议连接Initiator(发起端)与Target(目标端),利用TCP连接传送控制信息、SCSI命令、参数和数据[5]。
3 多节点块存储实现步骤
本文中实验环境为1台控制节点,3台计算节点,1台存储服务器,由于控制节点本身带块存储服务,所以将存储服务器并入OpenStack云平台中以提供多节点块存储服务。表1为各个节点基本配置参数。
3.1 准备存储服务器
由于搭建OpenStack云平台开始前须先用Ubuntu-12.04.2-server-amd64.iso做为底层操作系统,因此存储服务器在安装操作系统对硬盘进行分区时,分出15 TB的空间挂载在nova-volume上,为提供块存储服务作资源准备。
3.2 iSCSI的配置
3.2.1 开启iSCSI target服务
在Ubuntu环境下安装iSCSI target相关的软件tgt、iscsitarget、iscsitarget-source、iscsitarget-dkms。修改iSCSI target的配置文件:将ISCSITARGET_ENABLE的值改成true。
创建target,id=1,iqn=iqn.33.cinder,iqn是target在局域网内的唯一描述符。给指定的target增加一个lun,通过tid来制定target,这里将/dev/sdb添加到tid=1的target中,并使其能被initiator访问。
3.2.2 iSCSI initiator端的配置
安装open-scsi并发现iscsi target。
其显示信息为:192.168.3.3:3260 iqn.33.cinder。通过下面指令使用target:
sudo iscsiadm-m node—targetname iqn.33.cinder-p 192.168.3.3--login
执行上述操作后,使用df╞h查看控制节点磁盘信息就可以看到在本地主机上多出一个/dev/sdb。
3.3 存储卷轴的管理与操作
分区格式化后,可以看到多出来的/dev/sdb1。对其进行物理卷和卷组的创建,卷组名称为:nova-volume。通过vgdisplay可以看到卷组信息,如图2所示。
在openStack的Horizion操作平台上点击“create volume”即可对存储服务器上提供的15 TB存储资源进行管理与操作。
4 基于iSCSI的多节点存储的OpenStack云平台性能评测
针对搭建好的OpenStack云平台的存储性能研究可以分为节点测试和虚拟机测试两个方面。节点测试是对物理层面上的存储资源性能的评测指标,虚拟机测试则是确定云平台提供服务以及云存储性能研究的层次。
4.1 节点测试
本文提供存储服务采用的存储服务器为Dell的R510。此存储服务器具有最多12个硬盘,可提供超大内部存储容量,本实验为9个做raid5的2 TB硬盘,提供的可用存储容量为16 TB。
在存储节点上对其提供存储服务的存储区/dev/sdb1进行读写测试,测试结果如图3所示。
可以看到直接插在服务器上的硬盘2 s读取了17 214 MB的缓存,约合8 615.97 MB/s。在3.02 s读取了828 MB磁盘(物理读),读取速度约合274 MB/s。
回到控制节点,通过iSCSI的Initator端指令找到其提供存储服务的存储资源,并使用它。由于其存储资源大于2 TB,因此采取GPT分区的方式。分区完成后使用mkfs.ext3格式化。对其进行物理卷和卷组的创建。并对其进行相同的硬盘测试,测试结果如图4所示。
这时看到在使用其存储服务的控制节点上对其提供的存储资源的读取测试中,其2 s读取了12 268 MB的缓存,约合6 140.78 MB/s。在3.34 s中读取了334 MB磁盘(物理读),读取速度约合110.72 MB/s。
对比其本地资源的读取,其速度有明显下降。由于其存储节点与控制节点间是交换机连接的,并且处于不同的网段,因此网络是存储节点性能的一个制约因素,其速度下降值在可以接受的范围之内,不影响控制节点对其存储资源的正常使用。
在控制节点创建用以提供给虚拟机使用的物理卷轴,大小为1 TB,具体信息如图5所示。
将其挂载在虚拟机上,随后对其进行测试。
4.2 虚拟机测试
在OpenStack云平台上创建4核、8 GB内存、100 GB硬盘的虚拟机。其镜像为windows2008server。虚拟机启动后再将之前创建的1 TB的物理卷挂载在虚拟机上,对其格式化分区后如图6所示。
使用HD Tune Pro工具。分别选取512 KB、16 MB、64 MB、512 MB大小的文件对其挂载的1 TB硬盘进行读写测试,测试结果如图7所示。
从4组测试结果可以看到,不同大小文件对其挂载的1 TB的硬盘均在512 GB~8 192 GB的区间达到峰值。说明其不同大小的文件读取对其提供的存储服务在读写区间没有区别。同时其读取速度4次取平均值为读取109.6 MB/s、写入105.7 MB/s,结果如图8所示。
对比其在控制节点上对存储资源的测试,其读取速度没有变化,不受云平台本身的影响。同时对不同大小的文件的读写也没有明显的区别,足以说明此种方案的可信性。
5 结论
本文在分析OpenStack云平台其自身块存储服务基础上给出了Linux下通过iSCSI协议实现多节点存储的实现方案,在此实现的基础上研究了节点与虚拟机两方面对多节点块存储管理与应用,并给出了相应的实验测试。通过测试结果发现,在物理层上不同节点间的存储资源的使用是受其网络性能的影响,而在OpenStack本身的云平台内,其物理层的网络设置对块存储服务的影响几乎微乎其微。如果节点间网络配置不当,就会严重影响存储服务的性能;反之,就能充分发挥其基于iSCSI协议块存储的优越性。
参考文献
[1] 汪楠.基于OpenStack云平台的计算资源动态调度及管理[D].大连:大连理工大学,2013.
[2] OpenStack[EB/OL].[2014-09-16].http://openstack.org/.
[3] 张江陵,冯丹.海量信息存储[M].北京:科学出版社,2003.
[4] Marc Farley.SAN存储区域网络[M].孙功星,蒋文保,范勇,译.北京:机械工业出版社,2001.
[5] iSCSI Draft[EB/OL].(2003-01-xx)[2014-09-16]. http://www.ietf.org/int-ernet-drafts/draft-ietf-ips-iscsi-20.txt,2003-01.