武汉金信润天
免费服务热线:18672341218
微信在线咨询:18672341218
武汉金信润天:027-87538126
扫一扫
关注我们
ONEStor分布式存储系统介绍
时间:2017-08-28 17:00    浏览次数:     发布者:admin    来源:未知    
0

技术特点

H3C ONEStor存储系统采用分布式设计,可以运行在通用x86服务器上,在部署该软件时,会把所有服务器的本地硬盘组织成一个虚拟存储资源池,对上层应用提供块存储功能。H3C ONEStor分布式存储软件系统具有如下特点:

领先的分布式架构

H3C ONEStor存储软件的采用全分布式的架构:分布式管理集群,分布式哈希数据分布算法,分布式无状态客户端、分布式Cache等,这种架构为存储系统的可靠性、可用性、自动运维、高性能等方面提供了有力保证。其系统架构组成如下图所示:
 
上图中,ONEStor逻辑上可分为三部分:OSD、Monitor、Client。在实际部署中,这些逻辑组件可灵活部署,也就是说既可以部署在相同的物理服务器上,也可以根据性能和可靠性等方面的考虑,部署在不同的硬件设备上。下面对每一部分作一简要说明。
OSD:Object-based Storage Device
OSD由系统部分和守护进程(OSD deamon)两部分组成。OSD系统部分可看作安装了操作系统和文件系统的计算机,其硬件部分包括处理器、内存、硬盘以及网卡等。守护进程即运行在内存中的程序。 在实际应用中,通常将每块硬盘(SSD或HDD)对应一个OSD,并将其视为OSD的硬盘部分,其余处理器、内存、网卡等在多个OSD之间进行复用。ONEStor存储集群中的用户都保存在这些OSD中。OSD deamon负责完成OSD的所有逻辑功能,包括与monitor和其他OSD(事实上是其他OSD的deamon)通信以维护更新系统状态,与其他OSD共同完成数据的存储和维护,与client通信完成各种数据对象操作等等。
Monitor:
Monitor是集群监控节点。Monitor持有cluster map信息。所谓Cluster Map,粗略的说就是关于集群本身的逻辑状态和存储策略的数据表示。 ONEStor Cluster Map包括Monitor map、osd map、pg map、crush map等,这些map构成了集群的元数据。总之,可以认为Monitor持有存储集群的一些控制信息,并且这些map信息是轻量级的,只有在集群的物理设备(如主机、硬盘)和存储策略发生变化时map信息才发生改变。
Client:
这里的Client可以看出外部系统获取存储服务的网关设备。client通过与OSD或者Monitor的交互获取cluster map,然后直接在本地进行计算,得出数据的存储位置后,便直接与对应的OSD通信,完成数据的各种操作。在此过程中,客户端可以不依赖于任何元数据服务器,不进行任何查表操作,便完成数据访问流程。这一点正是ONEStor分布式存储系统可以实现扩展性的重要保证。
客户的数据到达Client后,如何存储到OSD上,其过程大致如下图所示:
 
首先对上图中的一些名词进行简要描述:
File:此处的file是对用户或者应用而言的,指用户或者应用需要存储或者访问的文件。如果将ONEStor作为对象存储的后端,这个file也就对应于应用中的“对象”,也就是用户直接操作的“对象”。
Object:此处的object是ONEStor内部定义的“对象”。object的大小用户可以自行配置(在配置文件中设置,通常为2MB或4MB)。当上层应用向ONEStor集群存入size较大的file时,需要将file切分成统一大小的一系列 object(最后一个的大小可以不同)进行存储。为避免混淆,在本文中将尽量避免使用中文的“对象”这一名词,而直接使用file或object进行说明。
PG:(Placement Group)PG是一个逻辑概念,其作用是对object的存储进行组织和位置映射。这样便在object和osd之间提供一个中间映射层,即object->pg->osd。某个object通过算法映射到某个确定的pg,这个pg再通过某种算法映射到一组确定的osd(其个数和副本或纠删码配置有关,具体见后面章节描述)。从数量上看,一般object数量远大与pg数量,pg数量(一般比osd大两个数量级)远大于osd数量。PG的概念类似于一致性哈希算法中的虚拟节点,引入PG后,可以在总体上大大减少每个osd相关的元数据的数量。
下面对上图中的寻址流程进行简要说明。
1, File->Object映射:(ino,ono)->oid
这个映射比较简单,就是将用户要操作的file,映射为ONEStor能够处理的object。其本质就是按照配置文件定义的object大小对file进行切分,相当于RAID中的条带化过程。这种切分的好处有二:一是让大小不限的file变成size一致、可以被存储集群高效管理的object;二是让对单一file实施的串行处理变为对多个object实施的并行化处理,以提高读写性能。
对于要操作的File,Client将会从Monitor获得全局唯一的inode number,即ino。File切分后产生的object将获得唯一(在File的范围内)的object number,即ono。Ono的编号从0开始,依次累加。oid就是将ono连缀在ino之后得到的。容易看出,由于ino的全局唯一性(通过Monitor获得),oid同样具备全局唯一性。
2, Object -> PG映射
在file被映射为一个或多个object之后,就需要将每个object独立地映射到一个PG中去。这个映射过程也很简单,其计算公式是:
hash(oid) & mask -> pgid
或者更加明显的表示成:
hash(oid) mod (pgno) -> pgid
上式中,pgno表示配置的pg数量,一般为2的整数次幂。 整个计算由两步组成。首先是使用ONEStor系统指定的一个特定的哈希函数计算oid的哈希值(这个值将具备近似均匀分布的特性)。然后,将这个伪随机值对pgno取模,就得到了pgid。这样,pgid的取值范围是从0到pgno-1。由哈希函数的伪随机特性,容易想见,大量的oid将近似均匀地映射到不同的pgid上。
3, PG -> OSD映射
第三次映射就是将作为object的逻辑组织单元的PG通过CRUSH算法映射到一组OSD集合。集合中具体的OSD个数一般为数据副本的个数。比如,用户配置了3副本,那么每个pg将映射到3个osd。多副本可以大大提高数据的可靠性(具体可见后面相关章节的说明)。相比于 “object -> PG”映射过程,CRUSH算法要复杂的多。
通常情况下,一个好的分布式算法至少满足如下的要求:
1,数据的放置位置是Client计算出来的,而不是向Server查出来的
2,数据在存储体上满足概率均匀分布
3,存储体动态变化时数据重分布时引入的数据迁移量达到最优或者次优
除了这3点基本要求外,一个好的算法还应该满足:
4,可以基于指定的策略放置副本: 用于故障域隔离或其它要求
5,在存储体引入权“weight”的概念,以便对磁盘容量/速度等进行区分
CRUSH算法是ONEStor的核心算法,完全满足上面提到的5点要求,限于篇幅,此处不对算法本身进行描述。当系统中的OSD状态、数量发生变化时,cluster map亦随之变化,而这种变化将会影响到PG与OSD之间的映射,从而使数据重新再OSD之间分布。
由此可见,任何组件,只要拥有cluster map,都可以独立计算出每个object所在的位置(去中心化)。而对于cluster map,只有当删除添加设备或设备故障时,这些元数据才需要更新,更新的cluster map会及时更新给client和OSD,以便client和OSD重新计算数据的存储位置。
 
 

1. 自动化运维

自动化运维主要体现在如下几个方面:
(1)存储集群快速部署,包括批量部署、单节点增减、单磁盘增减等。
(2)设置监控报警系统,发生故障时能快速界定问题、排查故障。
(3)根据硬件能力,灵活地对集群中的节点进行灵活配置。
(4)允许用户定制数据分布策略,方便地进行故障域隔离,以及对数据存储位置进行灵活选择。
(5)在增删存储介质,或存储介质发生故障时,自动进行数据均衡。保证集群数据的高可用性。
(6)在系统平衡数据(例如系统扩容或者存储节点、磁盘发生故障)的过程中,为保证用户IO,ONEStor存储系统支持IO优先级控制和Qos保证能力。
对于(1)(2)两点,详见“ONEStor管理系统”章节,在此不再赘述。
对于(3),ONEStor系统可以根据用户需求灵活地部署Monitor节点和Client节点。一方面,这些节点既可以部署在单独的物理服务器上,也可以部署在和OSD相同的物理节点上。另一方面,Monitor和Client的节点可以根据用户的需求灵活地调整。比如为了可靠性保证,至少需要部署3个Monitor节点;为了保证对象存储网关的性能,需要部署过个RGW(Client)节点。
对于(4),用户的需求主要体现在存储策略上,比如在选用副本策略时,用户可能希望不同数据副本存储在不同机架上面的主机上;或者主副本存储在某个机架的主机上,其它副本存储在另外机架的主机上;或者主副本存储在SSD上,其它副本存储在HDD上。诸如此类等等。这些需要都可以通过配置cluster map中的rule set进行灵活地配置。
对于(5),在增删存储介质,或存储介质发生故障时,系统会及时进行检测。比如,在磁盘发生故障时,ONEStor会利用损坏数据在其他存储体上的副本进行复制,并将复制的数据保存在健康的存储体上;在增加磁盘时,同样会把其他存储体的数据安排容量比例重新分布到新磁盘,使集群的数据达到均衡。在上述过程中,完全不需要人工干预。
对于(6),我们知道,在系统扩容或者存储节点、磁盘故障过程中,为保证数据的可靠性,系统会自动进行数据平衡。为了尽快完成数据平衡,往往会沾满每个存储节点的带宽和IO能力,这样做的好处是会使平衡时间最短,坏处是此时前端用户的IO请求会得不到满足。在某些业务场景下,这时用户无法接受的。为此,ONEStor存储系统实现了IO优先级和Qos控制机制,可以对前端用户网络流量和后端存储网络流量进行控制,保证一定比例的用户IO得到满足。

2.线性扩展能力

所谓线性扩展能力,主要体现在两个方面:一个是集群部署规模可以线性扩展,另一个方面,随集群规模的扩展,其性能要能够线性或近似线性扩展。
在规模上,传统存储之所以在扩展能力上受限,一个很重要的原因就是一般其采用集中式控制,并且在控制节点存储大量的元数据信息,从而使控制节点容易成为系统的瓶颈。对于ONEStor系统,如上一章节所述,Client节点通过cluster map,可以直接计算出数据的存储位置,从而对OSD进行直接读写,完全是分布式并行的;而其元数据,也就是cluster map,是轻量级数据,而且其更新的频率相对而言也是较低的。这种架构就在理论上保证了ONEStor具备线性扩展能力。当然,除了集群架构和元数据的设计之外,ONEStor在缓存设计,节点数据迁移方式等方面同样满足线性扩展的要求,具体见后面章节描述。理论上,存储集群的最大节点数量并没有限制;实践中,已经有超过一百个节点的部署应用。
在性能上,由“领先的分布式架构”章节可知,Client端的读写数据最终会被CRUSH算法打散,以概率均匀的方式分布到各OSD上,从而集群整体的IO和Throughput能力是各节点能力的总和。换句话说,也就是集群的性能随节点数量的增加而线性增加。
在实际部署中,ONEStor存储集群可以支持数百PB级别的存储容量规模,用户可以根据自己的存储情况和业务使用情况不断向集群中添加存储节点进行扩容,扩容过程中不需要中断用户业务。

3.高可靠性

(1)多副本机制
对存储系统来说,可靠性(Reliability)一般指其对存储的数据无差错地保存能力,一般以在一段时间内的不出错的概率来表示,比如AMAZON 宣称,其S3服务在一年的时间内其数据可靠性最高可以达到11个9,即99.99999999%。
为了对数据存储获得高可靠性,常用的方法就是多副本技术,即把用户的数据在存储体中存放多份,比如典型的3副本。在这种情况下,只有在3份数据全部丢失,用户的数据才会真正丢失。在ONEStor系统中,数据的多副本分布示意图如下图所示。

 
上图中,一方面,用户数据(为简便计,用数字序号表示)的不同副本放置到多个不同的磁盘,具体放置到哪些磁盘由数据放置算法决定;另一方面,同一个磁盘会承载多个用户的数据。在商业存储系统中,如果某个磁盘发生了损坏,系统为保证副本个数,会将损坏磁盘所包含的用户数据利用其它磁盘的数据副本复制到其它可用磁盘(可能不止一个,不同系统有不同算法)。当然,复制是需要时间的,不同的系统在不同条件下有不同时间,其差异可能从数分钟到数十小时,为后面的讨论方便起见,这个时间我们简记为Tr。
对上面的例子来说,存储系统的数据可靠性等同于系统中持有的三个副本数据同时丢失。这里所谓的同时并不是指数据所在的磁盘确切地在相同的时间损坏,而是指在Tr时间段内,三个副本所在的磁盘同时损坏。示意图如下图所示:
 
我们知道,对一般的电子元件来说,其寿命一般符合指数分布。实践表明,磁盘的寿命同样满足此规律。为了提高存储系统的可靠性,一个重要的方法就是想办法减小Tr时间,也就是说,在某个磁盘发生损坏时,要在尽量短的时间内将其上的数据恢复到其它磁盘。
由前面的描述我们知道,在ONEStor系统中,对一个确定的object,会映射到一个确定的PG,这个PG又会映射到一组(对3副本来说,就是3个)确定的OSD。上述步骤中的每一个映射都是伪随机的。如果从磁盘的角度观察,我们会看到对于一个确定的OSD,它一般包含若干个PG(一般在100这个数量级,并且每个PG中包含着若干的object),对着其中的每个PG而言,都会存在2个另外的OSD,含有相同的PG。如果我们把具有相同PG的OSD称为“关联”关系的话,那么对于一个特定的OSD,可能系统中会存在几十到上百个OSD与其存在关联关系,当然,这个前提是存储系统中首先要有这么多的OSD。
这样,当某个OSD失效时,首先ONEStor会侦测到这个OSD故障,并更新cluster map。此时,失效OSD存在关联关系的每一个OSD会重新计算出一个新OSD来代替这个失效的OSD,并在新的OSD上写入一份新的副本。由CRUSH算法的伪随机性不难想象,不同的关联OSD计算出的新的OSD很可能是不同的。换句话说,当一个OSD损坏时,其上的数据并不是全部简单地拷贝到某一个新的OSD上,而是在系统中由众多的OSD共同承担,每个OSD将其中的一部分数据恢复到新的OSD上。打个通俗的比喻就是“一人有难,八方支援”。在这样的分布式并行数据恢复机制下,会比传统的单一节点恢复节省几十到上百倍的时间,从而在系统的可靠性上得到极大的提升。
对于ONEStor系统,理论计算和模拟实验表明,在典型的3副本机制下,在不少于30个磁盘的系统中,数据在一年内的可靠性可以达到11个9的水平。
除了数据的可靠性,其Monitor节点也是分布式部署的,同样不存在单点故障问题。这样在ONEStor系统中,不论是数据还是元数据,都不存在单点故障,并达到极高的可靠性。
(2)数据一致性
所谓一致性,粗略地说, 就是分布式系统通过副本控制协议,使得从系统外部读取系统内部各个副本的数据在一定的约束条件下相同。依据一致性的强弱条件不同,副本一致性可以分成若干级别,如强一致性、单调一致性、会话一致性、最终一致性等。
在ONEStor系统中,一方面要保证元数据的一致性;另一方面要保证用户数据的一致性。
元数据的一致性,是指多个Monitor之间关于这个集群的cluster map要保持一致性。因为不论client还是OSD,都要依据cluster map来定位和分布数据,故而元数据的一致性是必须的。为了达到此点,ONEStor的Monitor之间采用了Paxos和Lease机制来保证元数据的一致性问题。Paxos和Lease机制,都有公开的文献讨论,在此不再赘述。
对于用户数据的一致性,ONEStor系统保证数据的强一致性,所谓强一致性,就是任何用户或节点都可以读到最近一次成功更新的副本数据。强一致性是程度要求最高的一致性。
ONEStor系统实现了用户数据的强一致性。
其基本原理如下:
假定文件以3副本写入到ONEStor集群中,则寻址过程中每个object将被映射到3个不同的OSD(注意,这3个OSD是有顺序的,其顺序由CRUSH算法决定),这3个OSD依次称为Pirmary OSD,Secondary OSD,Tertiary OSD。对于其中的某个object,其写入流程如下: 

在Client本地计算出三个OSD后,将直接和Primary OSD通信,发起写入操作(步骤1)。Primary OSD收到请求后,分别向Secondary OSD和Tertiary OSD发起写入操作(步骤2、3)。当Secondary OSD和Tertiary OSD各自完成写入操作后,将分别向Primary OSD发送确认信息(步骤4、5)。当Primary OSD收到其他两个OSD的写入确认后,并自己也完成数据写入,则向client确认object写入操作完成(步骤6)。
 

4.良好的性能

对用户来说,存储系统的性能体现在两个方面:一个是从Client角度看,Client可以从系统获得的性能;一个是从存储集群的角度看,存储集群的供给能力。
首先,从client角度看,比如利用集群的块存储RBD。此时,LUN(也就是RBD块)会根据CRUSH算法伪随机地分散在集群的所有磁盘。这个分布是通过集群自动完成,无需手动配置。由于每个LUN可以使用整个集群的磁盘性能,因此整个集群能够提供更高的性能。在ONEStor集群中,LUN默认划分大小是4M(可配置)object,比如一个1GB大小的LUN,会被划分成256个object,这些object分散在不同的OSD上。这样在读写LUN时,就会充分利用集群的整体性能,提升IOPS和Throughput。
 
 
存储集群的性能取决于两方面:一方面是单节点的能力,另一方面是系统的扩展能力。如前所述,ONEStor系统的性能可以随节点的规模而线性扩展,所以对第二点来说,已经达到了最大化。对于单节点的能力,ONEStor在系统设计和硬件配置方便实现了足够的灵活性,从而可以表现出良好的性能。
对传统的HDD来说,受寻道能力的限制,单盘的随机读写能力一般不超过200IOPS。SSD的出现,使得在IOPS上的能力相比于HDD有了大幅的提升,一般可以提升2个数量级以上,从在在当前对IOPS有较高需求的应用(如数据库、VDI等)中得到了广泛使用。另一方面,当前SSD在容量、价格、使用寿命等方面和HDD相比还有一定的差距,所以针对不同的场景和需求,一个良好的存储系统应该可以进行灵活的配置。具体来说:
ONEStor系统支持的硬盘类型包括:全HDD、SSD+HDD混合组网、全SSD。
在SSD+HDD混合组网模式下,ONEStor系统既可以将SSD作为Cache使用,也可以将SSD和HDD放到不同的pool,做分层存储使用。
在混合模式下,既可以发挥SSD 的IOPS和Throughput的优势,又可以发挥HDD的容量和价格优势,是目前广泛采用的存储架构。

5.统一的存储业务

从存储系统的业务供给能力角度看,不同的存储系统可以提供所谓的块存储(FC SAN/IP SAN)、文件存储(NAS)、对象存储等不同类型。假如用户有多重应用,就需要购买不同的存储系统。ONEStor基于Ceph开发,因为Ceph本身提供了块、对象、文件等多种不同的接口,故而ONEStor也可以对用户提供不同的存储接口。其基本架构图如下:
 
如上图所示,ONEStor系统的软件逻辑分层:
l 底层存储服务集群,这一层是一个对象存储系统,RADOS采用C++开发。
l 库函数接口 :这一层的功能是对底层存储服务进行抽象和封装,并向上层提供API(包括C和C++、Java、Python、Ruby和PHP的支持。
l 高层应用接口 : 这一层包括了三个部分:对象服务、块设备服务、文件服务等三部分
l 应用层 :这一层就是不同场景下对于ONEStor各个应用接口的各种应用方式。
从用户的角度,一个存储集群就可以满足用户不同的存储应用。

应用组网

在实际案例中,H3C ONEStor既可以和计算虚拟化进行超融合方案组网部署,也可以部署独立集群提供IP SAN进行组网。
在超融合组网中,H3C CAS计算虚拟化系统和ONEStor分布式存储系统融合部署,以统一集群的形式对外提供服务。具体组网如下图所示:
                                                 典型组网一:超融合部署组网
 
提供独立IP SAN存储服务组网图如下:
 
                                                  典型组网二: 独立IP SAN部署组网

XX客户项目分布式存储方案组网(根据客户实际组网编写)

 
1. ONEStor存储业务网络(CAS存储网络):承载CAS与ONEStor数据交互、ONEStor MON管理集群、OSD前端心跳报文;重要程度非常高,需独立组网,带宽万兆,建议双链路冗余;
2. ONEStor存储后端网络:承载数据副本复制、硬盘或节点故障时数据重构、ONEStor OSD后端心跳,流量大且可能有较高的突发,需独立组网,带宽万兆,建议双链路作冗余;
3. CAS业务网络:承载业务访问数据,需要独立组网,与CAS管理网络、CAS存储内网分离,根据业务情况带宽可为千兆或万兆,建议双链路作冗余;
4. CAS管理网络:承载主机及虚拟机软件管理报文(包括HA、集群心跳等报文)、迁移数据;重要程度非常高,需独立组网,带宽千兆,建议双链路冗余;
 

硬件配置(此部分按实际项目情况写,内容供参考)

设备 硬件配置 台数 备注
虚拟化及存储节点 R390,E2650,8块10k 900G SAS,64GB内存,2*10G双端口光模块(sfp+),2GB FBWC 16 2块SAS形成RAID1做系统盘,其余6块做存储数据盘。2个10G捆绑做存储业务网,2个10G网口连接内网交换机做存储集群内网。管理节点和业务节点共用。
存储内网交换机 LS-6300-42QF 1 集群内网专用,采用私有IP地址即可

相关推荐
武汉分公司地址:湖北省武汉市洪山区虎泉街凯乐桂园A座9层(虎泉地铁站A出口右手边)
咨询报名电话:18672341218(微信同号)   武汉金信润天:027-87538126   
教学就业监督电话:027-87538125    网站地图   备案号:鄂ICP备15010789号-2
姓名
手机
电话咨询 在线咨询 QQ客服