持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
本文根据阅读文档及实验观察整理,个人理解,定有谬误,仅作参考。
理解gluster集群
Glusterfs是一个开源分布式文件系统,具有强大的横向扩展能力,可支持PB存储容量和数千客户端,通过网络互联组成一个并行的网络文件系统,具有可扩展性,高性能,高可用性等特点。
gluster集群架构
Gluster是Client/Server架构。服务器典型的布置在存储卷上,每一台服务器运行一个名为glusterfsd 的守护进程,将本地文件系统作为卷进行输出。Gluster的客户端进程通过TCP/IP,InfiniBand或SDP一类客户协议连接到服务器,将远端卷组成一个大的所谓折叠式翻译器。最终的卷通过一种叫做FUSE的用户空间文件机制机载到客户机。有大量文件应用的I/O同样可以用libglusterfs 客户端库来直接连接服务器并内在的运行翻译器,而无需经过文件系统以及FUSE.大多数GlusterFS功能被实现为翻译器
- 多个部署了gluster服务的服务器在一个可信网络中组成可信存储池,他们是对等的,无中心的。
- 可信存储池提供brick,它是server节点的一个目录或一个文件系统,用于组成voume(卷)。
- 卷是brick的逻辑组合,在客户端服务器挂载为type为glusterfs文件系统,提供分布式存储服务。
glusterfs文件系统IO流程
参考 www.cnblogs.com/chaozhu/p/6…
Glusterfs基于内核的fuse模块,fuse模块除了创建fuse文件系统外,还提供了一个字符设备(/dev/fuse),通过这个字符设备,Glusterfs可以读取请求,并发送响应,并且可以发送notify消息。
- 蓝线表示请求通过系统调用到VFS,然后经由Fuse封装为一个req并发送到等待队列,然后唤醒在该等待队列上阻塞的Glusterfs读进程,读取请求
- 绿虚线表示Glusterfsd进程读取请求后,处理请求的过程
- 红虚线表示Glusterfs处理完请求后,封装响应消息并将消息发送到/dev/fuse下,并唤醒相应的请求进程(请求进程在将请求发送后,一直阻塞,直到该请求收到响应并处理完成)
请求进程被唤醒后,将Glusterfs封装的响应信息返回给用户。
gluster集群数据同步与恢复机制
参考 www.cnblogs.com/kevingrace/…
gluster的vloume包括三种方式: distribute 集群中随机分配一个brick,只有一个副本 replicate 以文件或目录为单位分布在N个server的brick上,数据的修改是同步的。通过扩展属性记录文件的状态,单个副本丢失不影响数据可用性。 disprese 它将原始文件的编码片段存储到每个砖块中,只需要片段的一个子集来恢复原始文件。
gluster集群数据定位问题
gluster集群是去中心化的,数据定位不依赖元数据库服务器,而是文件名hash,并且其在父目录的扩展属性中保存了定位信息,这样在新增节点时,旧的文件定位不需要做额外的改动,同时也导致了旧节点的数据和负载会高于新加入的节点,gluster通过补偿机制来平衡新加入节点的集群负载,另一个问题,如果一个文件路径很深,那么需要很多次的交互才能获得文件定位,从而产生效率问题。这种定位方式也使得海量小文件的读写效率不高。