分布式存储的架构、隐患及解决方法(3)
OSD和monitor之间相互传输节点状态信息,共同得出系统的总体工作状态,并形成一个全局系统状态记录数据结构,即所谓的cluster map.这个数据结构与特定算法相配合,便实现了Ceph“无需查表,算算就好”的核心机制以及若干优秀特性. 图21 但数据的的组织方法是不同的.首先ceph的核心是一个对象存储,是以对象为最小组织单位. 1、首先文件是被映射成为一个或多个对象. 2、然后每个对象再被映射到PG(Placement Group)上,PG和对象之间是“一对多”映射关系. 3、而PG会映射到n个OSD上,n就是副本数,OSD和PG是“多对多”的关系. 由若干个monitor共同负责整个Ceph集群中所有OSD状态的发现与记录,并且共同形成cluster map的master版本,然后扩散至全体OSD以及客户端. OSD使用cluster map进行数据的维护,而客户端使用cluster map进行数据的寻址. Google三大宝之一的“GFS”是google对象存储的基础. 图22 核心不同是数据的组织架构:master服务器(即元数据服务器)保存了文件名和块的名字空间、从文件到块的映射、副本位置,由客户端来查询.是一个典型的信令和媒体分开的架构. 六、分布式存储存在的问题分布式存储一般情况下都是靠“副本”来确保数据的安全性和完整性.每块盘记录的数据内容都不一样,当某一块盘出现问题,都需要从其他不同盘内的数据块中进行快速的数据重构. 数据重构是需要时间的,如果大量盘同时故障,将会发生什么?另外,OSD的扩容,也会导致数据的迁移,也会影响存储. 分布式存储一般都采用副本的方式来确保数据的安全性.写入磁盘前不需要进行额外复杂的计算,就可以将数据写入磁盘,是最快速的方式.是一种空间换时间的方法,即想得到较好的存储性能,就采用副本的方式. 当有副本出现丢失的情况,系统就会启动数据重构.一般情况下,用于生产的分布式存储采用的是3副本.副本一般放置在不同机架、不同服务器主机的硬盘上.3副本就是放置在3台不同的服务器的硬盘上. 而每个用户的数据是由很多个副本均匀的分布在存储资源池内的所有主机上的.所以,可以认为任意一台服务器会存储着所有用户数据的某些数据副本,一台服务器出现故障,会影响所有用户. 从理论上来说,副本方式可以允许n-1台的服务器出现故障,n是副本数.比如3副本,不管这个分布式存储资源池内有几台服务器组成,就只能允许2台服务器出现故障.2台服务器出现故障,其实这个存储就很危险了. 当数据的持久化层OSD出现故障的时候,必须启动副本的恢复工作,即要在短时间内恢复完整的副本数.不同存储的结构、算法不同恢复的时间长短也不一样. 但从副本恢复所使用到的磁盘、网络等基础设备是一样的.今天我们从基础角度上来分析,看看副本的恢复到底需要多少时间和当新增加OSD节点需要多长时间,并看看因为采用了X86服务器带来的隐患. 我们在实验室内做了实验,具体了解一下:
实验一:无IO情况在,拔出一个磁盘 实验二:在存储上建立了4个360G的虚拟卷,加载少量的IO,即8K随机读写,队列深度为1,总iops为2600左右. 在拔出一个磁盘后,在15分钟后(可配,延迟15分钟是为了防止无操作、无报警等),系统开始对缺失的副本进行重构,得出结果: 图23(为了便于计算1T=1000G) 分析: 在实验分布式存储中,原来共有数据48块1T数据,拔出1块磁盘数据重构完成后,还是48T数据,即每块盘增加了(1T/47)1000=21.28GB的数据.
网络速度:(11000 )/(1260)=1.39GB/s*8=11Gb/s,也就是说在无IO的情况下,网络的总的流量是11Gb/s.其中3台服务器网络速度是2.84Gb/s,1台被拔出硬盘的服务器流量是2.57Gb/s.为了计算方便,平均每台服务器为2.75Gb/s,网络利用率是27.5%.
网络速度:(11000 )/(2460)=1.39GB/s*8=5.5Gb/s,也就是少量IO的情况下,网络的总的流量是5.5Gb/s. 平均每台服务器为是1.38Gb/s. 磁盘写入速度:21.281000/(2460)=15MB/s. 实验现象: 1、无流量压力情况下数据重构速度即每块盘最大写速度为30MB/s.但随着IO的增加,写的速度也会越来越慢. 2、虽然每个服务器接入网络是10Gb/s,但受到存储软件的控制,重构时最大网络利用率近30%. 在有IO的情况下,重构时间迅速增加.主要是为了不影响正常IO的处理,软件对副本重构的速度进行了控制. 在实际生产中,用于副本重构的网络利用率控制在5%以下,对存储正常的IO不会产生影响. 由此计算: 29.56M/(27.5%/5%)=5.37M,即在10G接入网络下,每台服务器重构流量在0.5Gb/s( 62.5MB/s)和每块磁盘读写数据在5MB/s以下,数据重构是安全的. 副本恢复的过程,实际上是从现有的磁盘中读取需要重构的副本,再根据一定的规则写入某些磁盘的过程.每块盘承担了读取副本,也承担了写入副本的职责.也就是说平均每块磁盘读2.5M,写也是2.5M. 从这个角度上看,每台服务器配置12块硬盘(60MB/s)是能产生读写能力和网络( 62.5MB/s)能力匹配.服务器接入带宽越大,可以配置的硬盘数量就越大. 小结:1、如果主机和磁盘比大于等于12: 1TB数据重构时间=10008/(0.25n) ? ? ?n: 服务器数量 比如 57台12块磁盘的2P资源池重构1T数据的最短时间=(10008)/(0.2557)=560秒. 2、如果主机和磁盘比小于12: 1TB数据重构时间=10001000/(2.5m) ? m:参与重构磁盘数量 如果1台12块盘的服务器故障,最大重构36T数据,需要最短时间是342分钟,5.7小时. 结论:服务器或参与重构的磁盘数量越多,重构的速度就越快 我们继续实验,在数据重构完成后,重新插入这块盘,我们会发现,副本又开始重构了,但这次数据是搬家,并不生成新的副本.是因为系统认为插入了新盘,数据需要均衡导致的. 分布式存储采用的是“共产主义”,扩容服务器的数量可以线性的增加存储的能力,但新扩容的磁盘并不是只接受新的副本数据,而是需要搬迁写入平均值大小的“老”副本数据. 实际上每次非正常IO的副本的写入,都伴随着其他节点副本的删除.频繁的写入、删除对磁盘的寿命有较大的影响. 我们再看看实验结果: (编辑:ASP站长网) |