分布式存储存在的问题
分布式存储一般情况下都是靠“副本”来确保数据的安全性和完整性。每块盘记录的数据内容都不一样,当某一块盘出现问题,都需要从其他不同盘内的数据块中进行快速的数据重构。
数据重构是需要时间的,如果大量盘同时故障,将会发生什么?另外,OSD的扩容,也会导致数据的迁移,也会影响存储。
分布式存储一般都采用副本的方式来确保数据的安全性。写入磁盘前不需要进行额外复杂的计算,就可以将数据写入磁盘,是最快速的方式。是一种空间换时间的方法,即想得到较好的存储性能,就采用副本的方式。
当有副本出现丢失的情况,系统就会启动数据重构。一般情况下,用于生产的分布式存储采用的是3副本。副本一般放置在不同机架、不同服务器主机的硬盘上。3副本就是放置在3台不同的服务器的硬盘上。
而每个用户的数据是由很多个副本均匀的分布在存储资源池内的所有主机上的。所以,可以认为任意一台服务器会存储着所有用户数据的某些数据副本,一台服务器出现故障,会影响所有用户。
从理论上来说,副本方式可以允许n-1台的服务器出现故障,n是副本数。比如3副本,不管这个分布式存储资源池内有几台服务器组成,就只能允许2台服务器出现故障。2台服务器出现故障,其实这个存储就很危险了。
当数据的持久化层OSD出现故障的时候,必须启动副本的恢复工作,即要在短时间内恢复完整的副本数。不同存储的结构、算法不同恢复的时间长短也不一样。
但从副本恢复所使用到的磁盘、网络等基础设备是一样的。今天我们从基础角度上来分析,看看副本的恢复到底需要多少时间和当新增加OSD节点需要多长时间,并看看因为采用了X86服务器带来的隐患。
我们在实验室内做了实验,具体了解一下:
试验环境:2台万兆交换机、4台X86服务器(12块3T 7200转 SATA盘+1块1.2G PCIeSSD)。包括所有副本在内,每块磁盘有1T数据,共有48T数据。
实验一:无IO情况在,拔出一个磁盘
实验二:在存储上建立了4个360G的虚拟卷,加载少量的IO,即8K随机读写,队列深度为1,总iops为2600左右。
在拔出一个磁盘后,在15分钟后(可配,延迟15分钟是为了防止无操作、无报警等),系统开始对缺失的副本进行重构,得出结果:
图23(为了便于计算1T=1000G)
分析:
在实验分布式存储中,原来共有数据48块1T数据,拔出1块磁盘数据重构