容器云在使用分布式存储时,HDFS、CEPH、GFS、GPFS、Swift等分布式存储哪种更好?
公司在进行容器云技术选型,想了解相应的分布式存储如何匹配,HDFS、CEPH、GFS、GPFS、Swift等分布式存储,采用哪种更好,主要场景是容器存储应用日志、配置文件、非结构化数据文件等。
问题来自@yin986 某保险软件架构设计师,下文来自twt社区众多同行实践经验分享。
日志文件随着时间会是个很大的量,所以建议考虑统一的日志中心存储处理,可以用es等,备份到hdfs。
配置文件在量上通常不是个问题,可以考虑配置中心统一管理,无需额外存储。
非结构化数据通常是大量的文件,可以采用传统nas或分布式对象存储,当然资金充裕可以采购好的存储,存储性能很重要,根据业务重要程度选择不同的存储。
容器存储的持久化,对于有状态数据的容器使用场景来说至关重要。因此,在技术选型的时候,需要明确存储的具体需求。存储按照数据类型来分,可以分为块存储,对象存储,文件存储。我们传统的环境中,使用最多的还是块存储和文件存储。随着IT的更新换代,现在对于对象存储(非结构化数据)的需求日益旺盛,对象存储在对一些Key-Value型数据的存储有着天然的优势,再加上其分布式,副本/纠删码等可以匹配传统存储的特性,日益成为温数据/冷数据存储的不二之选。
HDFS/CEPH/GFS/GPFS/Swift这类分布式存储,按照存储的类型来区分,HDFS/GPFS/GFS属于文件存储,CEPH属于统一存储–即块/对象/文件统一体,Swift属于对象存储-目前属于OpenStack下面的一个子项目。
1)HDFS
Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。
HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以实现流的形式访问(streaming access)文件系统中的数据。
2)GFS
GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,并提供容错功能。它可以给大量的用户提供总体性能较高的服务。
3)GPFS
GPFS(General Parallel File System ,GPFS) 是 IBM 公司第一个共享文件系统,起源于 IBM SP 系统上使用的虚拟共享磁盘技术( VSD )。作为这项技术的核心, GPFS 是一个并行的磁盘文件系统,它保证在资源组内的 所有节点可以并行访问整个文件系统;而且针对此文件系统的服务操作,可以同时安全地在 使用此文件系统的多个节点上实现。GPFS 允许客户共享文件,而这些文件可能分布在不同节点的不同硬盘上;它提供了许多标准的 UNIX 文件系统接口,允许应用不需修改或者重新编辑就可以在其上运行。
4)CEPH
Ceph是一个可靠地、自动重均衡、自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储、块设备存储和文件系统服务。在虚拟化领域里,比较常用到的是Ceph的块设备存储,比如在OpenStack项目里,Ceph的块设备存储可以对接OpenStack的cinder后端存储、Glance的镜像存储和虚拟机的数据存储,比较直观的是Ceph集群可以提供一个raw格式的块存储来作为虚拟机实例的硬盘。
Ceph相比其它存储的优势点在于它不单单是存储,同时还充分利用了存储节点上的计算能力,在存储每一个数据时,都会通过计算得出该数据存储的位置,尽量将数据分布均衡,同时由于Ceph的良好设计,采用了CRUSH算法、HASH环等方法,使得它不存在传统的单点故障的问题,且随着规模的扩大性能并不会受到影响。
5)Swift
Swift 最初是由 Rackspace 公司开发的高可用分布式对象存储服务,并于 2010 年贡献给 OpenStack 开源社区作为其最初的核心子项目之一,为其 Nova 子项目提供虚机镜像存储服务。Swift 构筑在比较便宜的标准硬件存储基础设施之上,无需采用 RAID(磁盘冗余阵列),通过在软件层面引入一致性散列技术和数据冗余性,牺牲一定程度的数据一致性来达到高可用性和可伸缩性,支持多租户模式、容器和对象读写操作,适合解决互联网的应用场景下非结构化数据存储问题。
1)Ceph的特点
Ceph支持对象存储、块存储和文件存储服务,故称为统一存储。
采用CRUSH算法,数据分布均衡,并行度高,不需要维护固定的元数据结构。
数据具有强一致,确保所有副本写入完成才返回确认,适合读多写少场景。
去中心化,MDS之间地位相同,无固定的中心节点。
Ceph存在一些缺点:
去中心化的分布式解决方案,需要提前做好规划设计,对技术团队的要求能力比较高。
Ceph扩容时,由于其数据分布均衡的特性,会导致整个存储系统性能的下降。
2)GFS特点
适合大文件场景的应用,特别是针对GB级别的大文件,适用于数据访问延时不敏感的搜索类业务。
中心化架构,只有1个master处于active状态。
缓存和预取,通过在client端缓存元数据,尽量减少与master的交互,通过文件的预读取来提升并发性能。
高可靠性,master需要持久化的数据会通过操作日志与checkpoint的方式存放多份,故障后master会自动切换重启。
3)HDFS的特点(vs GFS)
分块更大,每个数据块默认128MB;
不支持并发,同一时刻只允许一个写入者或追加者;
过程一致性,写入数据的传输顺序与最终写入顺序一致;
Master HA,2.X版本支持两个NameNode,(分别处于Active和Standby状态),故障切换时间一般几十秒到数分钟。
HDFS适合的应用场景:
适用于大文件、大数据处理,处理数据达到 GB、TB、甚至PB级别的数据。
适合流式文件访问,一次写入,多次读取。
文件一旦写入不能修改,只能追加。
HDFS不适合的场景:
低延时数据访问。
小文件存储。
并发写入、文件随机修改。
4)Swift特点
原生的对象存储,不支持实时的文件读写、编辑功能。
完全对称架构,无主节点,无单点故障,易于大规模扩展,性能容量线性增长。
数据实现最终一致性,不需要所有副本写入即可返回,读取数据时需要进行数据副本的校验。
是OpenStack的子项目之一,适合云环境的部署。
Swift的对象存储与Ceph提供的对象存储区别:客户端在访问对象存储系统服务时,Swift要求客户端必须访问Swift网关才能获得数据。而Ceph可以在每个存储节点上的OSD(对象存储设备)获取数据信息; 在数据一致性方面,Swift的数据是最终一致,而Ceph是始终跨集群强一致性)
5)Lustre特点
支持数万个客户端系统,支持PB级存储容量,单个文件最大支持320TB容量。
支持RDMA网络,大文件读写分片优化,多个OSS能获得更高的聚合带宽。
缺少副本机制,存在单点故障。如果一个客户端或节点发生故障,存储在该节点上的数据在重新启动前将不可访问。
适用高性能计算HPC领域,适用于大文件连续读写。
几种主流分布式存储技术的特点比较如下: