论文部分内容阅读
[摘 要]OpenStack平台上的Swift组件是为用户提供永久的,大量的,可靠的云存储服务的。相比于传统的存储技术,云存储更需要冗余性和可扩展性文章介绍了Juno版本Open-Stack平台,并在swift的概念及工作原理、对象存储与传统存储的对比、Swift应用分析的基础上,完成swift的部署安装,对该平台上的Swift组件进行了研究与测试。对核心模块Swift中最重要的组件Ring中用到的一致性哈希算法进行改进。实验结果表明,该算法能在最大程度兼顾负载均衡的同时提高存储资源的利用率,既考虑了集群中各节点的处理能力,同时也兼顾了当前负载,提高了集群系统的整体性能。
[关键词]Swift;对象存储;负载均衡;Ring
中图分类 ?TS886 文献标识码:A 文章编号:1009-914X(2018)32-0093-01
0 前言
swift是openstack项目的重要组成部分,即分布式文件系统,Swift使用标准化的服务器存储PB级的访问数据,静态的永久存储,被存 储的数据可以检索、修改。它采用对象存储(object storage)的方式,每个文件都是一个对象,在swift里存储多份(默认3份)。swift的存储集群由多个zone构成,所谓zone是指物理上独立的资源。它客户端通过与代理服务proxy服务打交道,代理服务通过http或https对外提供REST API服务。
1 openstack的swift组建的部署方案设计及实现
本次Swift组件测试是在5台服务器搭建的简易云计算平 台上进行。在进行Swift组件安装前,先要在5台服务器上安装Ubuntu14.04系统。服务器基本信息如下:ubuntu用户:swift,swift用戶home目录:/home/swift,swift工作目录:/etc/swift,网段:192.168.1.*,NFS server:192.168.1.22。实验中创建了5组存储服务,其中一台机器上挂载了公司的iscsi存储服务器,使用存储服务器的存储空间作为存储服务,搭建了如下面图1所示理想中的Swift生产环境。
2 Ring组件中的一致性哈希算法
Swift在Ring组件中使用一致性哈希算法的主要目的是当在集群中改变node数量时(增加或删除服务器),能够尽可能少地改变已经存在的key和node之间的映射关系,从而减少数据的迁移,以满足单调性。其主要是解决分布式网络中存在的热点问题,基本原理则是将物理节点和key依照同样的hash算法映射到一个值在0~232之间的圆环上。集群中物理节点之间具有异构性,各个节点的处理能力可能不尽相同,因此,Swift在一致性哈希算法中引入了权重(weight)的概念,旨在“能者多劳”。权重值的大小与物理节点的处理能力成正比,即权重越大的物理节点处理能力则越强,反之则越弱。在Ring中,物理节点的磁盘存储容量被选作权重的决定因素。
确定合适的权重值对构建性能优越且稳定的集群来说,是一个很重要的任务,因为如果权重值设定不恰当,可能会造成不可预测的影响[2]。Swift由于使用了分割的概念,单个对象的下载大小几乎是没有限制的。对于更大的对象进行分割然后上传并且会创建一个特殊的描述文件。在对象存储体系中,存储节点的CPU主要负责的工作是控制操作流程和完成地址转换,需要的计算量是比较少的。因此,基于上述分析,本文选择存储节点的磁盘存储能力、I/O负载量作为主要负载因素。
3 一致性哈希算法在Ring中的改进
本文针对集群中的网络波动情况,如存储节点的加入和退出、对象被请求频率、系统资源使用情况等做出了统计分析[1],基于一致性哈希负载均衡算法提出了多因素决定权重算法、虚节点访问次数排名算法、虚节点调整算法来对Ring组件进行改进。
首先是多因素决定权重,假设当前集群中有N台存储节点服务器,分别编号为D1、D2、......、Dn在每个存储节点服务器初次接入集群系统时,根据各节点服务器的硬件配置与总体性能来设定初始权重值W1、W2、......、WN(通常权值与硬件配置和总体性能成正比)。权值的计算取定的重要参数为磁盘存储能力(S)、I/O负载量(I)。对于同一个存储节点,取得的各参数信息所占比例不同。
Swift服务器集群系统的共享存储空间内存放一个虚节点访问的哈希表map,用于记录各个虚节点的访问情况。假设被访问对象的标识为dataId,通过Ring可以知道part=unpack_from(‘>I’,md5(dataId).digest())[0]>>self.partition_shift,获得被访问的虚节点标识part,然后再累加该虚节点被访问的次数map.put(part,map.get(part)+1);虚节点到物理存储节点的映射关系存储在数组part2node中,因此可以对每个存储节点分配的虚节点进行访问次数的升序或者倒序排列。
当集群中有新的存储节点Dn+1加入时,需要根据集群中现有存储节点的权重和Dn+1的权重对虚节点进行重新指派,如果只是把现有存储节点分配的虚节点随机地指派给Dn+1,则可能会出现过渡访问的虚节点或者极少访问的虚节点全部分配给了Dn+1的情况。而让出虚节点的原物理节点的存储能力可能得不到充分的利用。
假设在连续两个时间间隔内,系统中最大负载率的节点与最小负载率的节点之间的负载率之差大于某个阈值Rt 则启动虚节点调整算法。计算出各个节点的单位权重负载,因此便可以得出单位权重负载最大的节点Vmax和单位权重负载最小的节点Vmin根据虚节点访问次数排名算法可以得出Vmax上负载最重的虚节点,将虚节点到物理节点的映射关系调整为Pmin->Vmax和Pmax->Vmin,然后更新这两个节点的负载,从而实现负载的调整,以求达到负载均衡的目的。
4 结语
相比于传统存储,Swift对象存储技术在存储设备要求低、投入较少的情况下,实现了海量非结构化数据的有效存储,并且在保证数据高效访问性能的前提下,提供设备级别的安全性和良好的可扩展性。本文在研究了一致性哈希算法、对象存储技术及其相关开源技术的基础上,针对Ring中权重的决定因素、虚节点的访问频率以及负载的调整,对Ring组件中用到的一致性哈希算法进行改进,兼顾负载均衡的同时提高存储资源的利用率,以提升集群系统的整体性能。在云计算遍地开花风头一时无两的形势下,云存储必将成为今后存储服务的发展趋势。
参考文献
[1] Zong Z, Manzanares A, Ruan X, et al.EAD and PEBD. two energy-aware duplication scheduling algorithms for parallel tasks on homogeneous clusters[J].IEEE Transactions on Computers, 2011, 60(3):360-374.
[2] 李新,贾智平,鞠雷,等.一种面向同构集群系统的并行任务节能调度优化方法[J].计算机学报.2012,35(3):591-602.
[关键词]Swift;对象存储;负载均衡;Ring
中图分类 ?TS886 文献标识码:A 文章编号:1009-914X(2018)32-0093-01
0 前言
swift是openstack项目的重要组成部分,即分布式文件系统,Swift使用标准化的服务器存储PB级的访问数据,静态的永久存储,被存 储的数据可以检索、修改。它采用对象存储(object storage)的方式,每个文件都是一个对象,在swift里存储多份(默认3份)。swift的存储集群由多个zone构成,所谓zone是指物理上独立的资源。它客户端通过与代理服务proxy服务打交道,代理服务通过http或https对外提供REST API服务。
1 openstack的swift组建的部署方案设计及实现
本次Swift组件测试是在5台服务器搭建的简易云计算平 台上进行。在进行Swift组件安装前,先要在5台服务器上安装Ubuntu14.04系统。服务器基本信息如下:ubuntu用户:swift,swift用戶home目录:/home/swift,swift工作目录:/etc/swift,网段:192.168.1.*,NFS server:192.168.1.22。实验中创建了5组存储服务,其中一台机器上挂载了公司的iscsi存储服务器,使用存储服务器的存储空间作为存储服务,搭建了如下面图1所示理想中的Swift生产环境。
2 Ring组件中的一致性哈希算法
Swift在Ring组件中使用一致性哈希算法的主要目的是当在集群中改变node数量时(增加或删除服务器),能够尽可能少地改变已经存在的key和node之间的映射关系,从而减少数据的迁移,以满足单调性。其主要是解决分布式网络中存在的热点问题,基本原理则是将物理节点和key依照同样的hash算法映射到一个值在0~232之间的圆环上。集群中物理节点之间具有异构性,各个节点的处理能力可能不尽相同,因此,Swift在一致性哈希算法中引入了权重(weight)的概念,旨在“能者多劳”。权重值的大小与物理节点的处理能力成正比,即权重越大的物理节点处理能力则越强,反之则越弱。在Ring中,物理节点的磁盘存储容量被选作权重的决定因素。
确定合适的权重值对构建性能优越且稳定的集群来说,是一个很重要的任务,因为如果权重值设定不恰当,可能会造成不可预测的影响[2]。Swift由于使用了分割的概念,单个对象的下载大小几乎是没有限制的。对于更大的对象进行分割然后上传并且会创建一个特殊的描述文件。在对象存储体系中,存储节点的CPU主要负责的工作是控制操作流程和完成地址转换,需要的计算量是比较少的。因此,基于上述分析,本文选择存储节点的磁盘存储能力、I/O负载量作为主要负载因素。
3 一致性哈希算法在Ring中的改进
本文针对集群中的网络波动情况,如存储节点的加入和退出、对象被请求频率、系统资源使用情况等做出了统计分析[1],基于一致性哈希负载均衡算法提出了多因素决定权重算法、虚节点访问次数排名算法、虚节点调整算法来对Ring组件进行改进。
首先是多因素决定权重,假设当前集群中有N台存储节点服务器,分别编号为D1、D2、......、Dn在每个存储节点服务器初次接入集群系统时,根据各节点服务器的硬件配置与总体性能来设定初始权重值W1、W2、......、WN(通常权值与硬件配置和总体性能成正比)。权值的计算取定的重要参数为磁盘存储能力(S)、I/O负载量(I)。对于同一个存储节点,取得的各参数信息所占比例不同。
Swift服务器集群系统的共享存储空间内存放一个虚节点访问的哈希表map,用于记录各个虚节点的访问情况。假设被访问对象的标识为dataId,通过Ring可以知道part=unpack_from(‘>I’,md5(dataId).digest())[0]>>self.partition_shift,获得被访问的虚节点标识part,然后再累加该虚节点被访问的次数map.put(part,map.get(part)+1);虚节点到物理存储节点的映射关系存储在数组part2node中,因此可以对每个存储节点分配的虚节点进行访问次数的升序或者倒序排列。
当集群中有新的存储节点Dn+1加入时,需要根据集群中现有存储节点的权重和Dn+1的权重对虚节点进行重新指派,如果只是把现有存储节点分配的虚节点随机地指派给Dn+1,则可能会出现过渡访问的虚节点或者极少访问的虚节点全部分配给了Dn+1的情况。而让出虚节点的原物理节点的存储能力可能得不到充分的利用。
假设在连续两个时间间隔内,系统中最大负载率的节点与最小负载率的节点之间的负载率之差大于某个阈值Rt 则启动虚节点调整算法。计算出各个节点的单位权重负载,因此便可以得出单位权重负载最大的节点Vmax和单位权重负载最小的节点Vmin根据虚节点访问次数排名算法可以得出Vmax上负载最重的虚节点,将虚节点到物理节点的映射关系调整为Pmin->Vmax和Pmax->Vmin,然后更新这两个节点的负载,从而实现负载的调整,以求达到负载均衡的目的。
4 结语
相比于传统存储,Swift对象存储技术在存储设备要求低、投入较少的情况下,实现了海量非结构化数据的有效存储,并且在保证数据高效访问性能的前提下,提供设备级别的安全性和良好的可扩展性。本文在研究了一致性哈希算法、对象存储技术及其相关开源技术的基础上,针对Ring中权重的决定因素、虚节点的访问频率以及负载的调整,对Ring组件中用到的一致性哈希算法进行改进,兼顾负载均衡的同时提高存储资源的利用率,以提升集群系统的整体性能。在云计算遍地开花风头一时无两的形势下,云存储必将成为今后存储服务的发展趋势。
参考文献
[1] Zong Z, Manzanares A, Ruan X, et al.EAD and PEBD. two energy-aware duplication scheduling algorithms for parallel tasks on homogeneous clusters[J].IEEE Transactions on Computers, 2011, 60(3):360-374.
[2] 李新,贾智平,鞠雷,等.一种面向同构集群系统的并行任务节能调度优化方法[J].计算机学报.2012,35(3):591-602.