Ceph扩容时,由于其数据分布均衡的特性,会导致整个存储系统性能的下降。
二、 GFS
GFS是google的分布式文件存储系统,是专为存储海量搜索数据而设计的,2003年提出,是闭源的分布式文件系统。适用于大量的顺序读取和顺序追加,如大文件的读写。注重大文件的持续稳定带宽,而不是单次读写的延迟。
1.GFS的主要架构GFS 架构比较简单,一个 GFS 集群一般由一个 master 、多个 chunkserver 和多个 clients 组成。在 GFS 中,所有文件被切分成若干个 chunk,每个 chunk 拥有唯一不变的标识(在 chunk 创建时,由 master 负责分配),所有 chunk 都实际存储在 chunkserver 的磁盘上。为了容灾,每个 chunk 都会被复制到多个 chunkserve
2.GFS的功能模块
GFS client客户端:为应用提供API,与POSIX API类似。同时缓存从GFS master读取的元数据chunk信息; GFS master元数据服务器:管理所有文件系统的元数据,包括命令空间(目录层级)、访问控制信息、文件到chunk的映射关系,chunk的位置等。同时 master 还管理系统范围内的各种活动,包括chunk 创建、复制、数据迁移、垃圾回收等; GFS chunksever存储节点:用于所有 chunk的存储。一个文件被分割为多个大小固定的chunk(默认64M),每个chunk有全局唯一的chunk ID。
3.GFS的写入流程
Client 向 master 询问要修改的 chunk在哪个 chunkserver上,以及 该chunk 其他副本的位置信息。
Master 将Primary、secondary的相关信息返回给 client。
Client 将数据推送给 primary 和 secondary;。
当所有副本都确认收到数据后,client 发送写请求给 primary,primary 各不同 client 的操作分配序号,保证操作顺序执行。
Primary 把写请求发送到 secondary,secondary 按照 primary 分配的序号顺序执行所有操作
当 Secondary 执行完后回复 primary 执行结果。
Primary 回复 client 执行结果。
由上述可见,GFS在进行写数据时,有如下特点:
GFS在数据读写时,数据流与控制流是分开的,并通过租约机制,在跨多个副本的数据写入中, 保障顺序一致性;
Master将chunk租约发放给其中一个副本,这个副本称为主副本,由主副本确定chunk的写入顺序,此副本则遵守这个顺序,这样就保障了全局顺序一致性
Master返回客户端主副本和次副本的位置信息,客户端缓存这些信息以备将来使用,只有当主副本所在chunkserver不可用或返回租约过期了,客户端才需要再次联系Master;