`
kabike
  • 浏览: 608658 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

gluster源码浅析

阅读更多
gluster的volume是由一系列的translator组成的,translator就像输入输出流的堆栈式结构一样,由一个translator调用另一个translator,每个translator在运行时作为shared-object,根据不同的文件操作调用不同的函数.

每个translator一般需要定义xlator_fops、xlator_cbks、init、fini、volume_options这几个结构体.结构体里是不同的函数指针

比较重要的是xlator_fops这个结构体,在这里,一般要定义规定好的文件操作,文件操作在xlator.h中都有严格的明确定义
比如
fop_readv_t          readv; 
fop_writev_t         writev; 
应该就是对文件内容写入和读出的操作

translator都是采用异步调用和callback的方式,上一个translator异步调用下一个translator的相应的函数,下一个translator完成后调用上一个translator的callback函数.调用和callback主要利用了两个宏,STACK_WIND和STACK_UNWIND

gluster的translator中,一般都能很容易找到文件操作和相应的回调函数,因为命名都很有规律
拿一个简单的rot 13的translator举例说明下

rot-13.c文件中定义了两个文件操作

struct xlator_fops fops = {
	.readv        = rot13_readv,
	.writev       = rot13_writev
};


即文件读取和文件写入操作

在上面可以找到
int32_t
rot13_writev_cbk (call_frame_t *frame,
                  void *cookie,
                  xlator_t *this,
                  int32_t op_ret,
                  int32_t op_errno,
                  struct iatt *prebuf,
		  struct iatt *postbuf, dict_t *xdata)
{
	STACK_UNWIND_STRICT (writev, frame, op_ret, op_errno, prebuf, postbuf,
                             xdata);
	return 0;
}

int32_t
rot13_writev (call_frame_t *frame,
              xlator_t *this,
              fd_t *fd,
              struct iovec *vector,
              int32_t count,
              off_t offset, uint32_t flags,
              struct iobref *iobref, dict_t *xdata)
{
	rot_13_private_t *priv = (rot_13_private_t *)this->private;
	if (priv->encrypt_write)
		rot13_iovec (vector, count);

	STACK_WIND (frame,
		    rot13_writev_cbk,
		    FIRST_CHILD (this),
		    FIRST_CHILD (this)->fops->writev,
		    fd, vector, count, offset, flags,
                    iobref, xdata);
	return 0;
}


rot13_writev是文件内容写入的函数指针,rot13_writev_cbk则是对应的callback
看到在rot13_writev函数中,调用宏STACK_WIND的时候,需要制定callback,当下一个translator同样的文件操作完成以后,callback就能被调用.在rot13_writev_cbk中,调用了STACK_UNWIND_STRICT这个宏来调用上层translator的callback.

在gluster源码中的xlators\cluster中的三个translator应该是我们研究的重点,尤其对于分布式文件系统来说,最重要的就是afr,即automatic file replication,自动文件复制.
通过阅读afr的源码可以看出,gluster的副本机制没有采用主从模型,而是所有节点都是主节点.在一次文件写入时,要调用afr的所有subvolume,而且要等待所有subvolume的回调.

推荐几篇好文章
http://hekafs.org/index.php/2011/11/translator-101-class-1-setting-the-stage/
http://hekafs.org/index.php/2011/11/translator-101-lesson-2-init-fini-and-private-context/
http://hekafs.org/index.php/2011/11/translator-101-lesson-3-this-time-for-real/
http://hekafs.org/index.php/2011/11/translator-101-lesson-4-debugging-a-translator/
让你更加深入了解gluster代码结构,还能自己构造translator,用GDB运行时debug gluster

分享到:
评论

相关推荐

    Gluster 3.6.2 源码包

    在“Gluster 3.6.2 源码包”中,我们可以深入理解这款系统的内部机制和工作原理。源码包提供了一个宝贵的资源,允许开发者和系统管理员对软件进行自定义配置、调试和优化。 GlusterFS的核心设计理念是通过无中心...

    gluster源码分析

    ### GlusterFS源码分析 #### 一、GlusterFS概览 GlusterFS是一种分布式文件系统,设计用于实现高性能和高扩展性。它能够支持大规模的数据存储需求,适用于多种应用场景,如云存储、大数据处理等。在进行深入的源码...

    Gluster集群搭建-安装Gluster环境

    ### Gluster集群搭建与安装Gluster环境 #### 一、GlusterFS简介 GlusterFS是一种开源的分布式文件系统,支持大规模数据存储需求。它能够将多台服务器上的磁盘空间聚合起来,形成一个统一的文件系统,提供高性能的...

    openshift-gluster

    openshift-gluster 部署 GlusterFS 容器 确定 OpenShift SDN 中将运行 GlusterFS 的机器。 在那台机器上运行这个命令 docker run --privileged -d jsafrane/kubernetes-gluster 获取运行容器的 IP 地址 docker ps...

    gluster离线安装包rpm,yum

    在提供的文件列表中,我们看到"gluster6"和"gluster7"可能是不同版本的GlusterFS RPM包,而"centos7 gluster安装部署.pdf"则很可能是一个详细的安装指南,包含了步骤和注意事项。以下是离线安装GlusterFS的基本流程...

    gluster3.2.0

    这些工具包括`gluster volume`命令、`gluster peer`命令等,方便进行集群管理和维护。 7. **多协议支持**:除了标准的POSIX接口,GlusterFS还支持NFS、SMB、iSCSI等多种协议,使它能被各种操作系统和应用无缝集成。...

    Red Hat Gluster Storage 3.2 Administration Guide

    Red Hat Gluster Storage 3.2 Administration Guide Red Hat Gluster Storage Administration Guide describes the configuration and management of Red Hat Gluster Storage for On-Premise

    Gluster集群搭建-操作Gluster集群

    ### Gluster集群搭建与操作详解 #### 一、GlusterFS概述 GlusterFS是一种开源的分布式文件系统,主要用于提供高性能、高可用性和可扩展性的数据存储解决方案。它支持多种类型的卷,包括分布式卷、复制卷、条带卷...

    多节点gluster_NFS安装配置性能对比

    标题中的“多节点gluster_NFS安装配置性能对比”指的是在多台服务器上部署并比较GlusterFS和NFS这两种分布式文件系统的安装过程、配置方法以及它们在性能上的差异。这两种技术都是为了实现大规模存储环境下的数据...

    gluster_exporter:Prometheus的Gluster导出器

    gluster_exporter 普罗米修斯的胶合板出口商安装go get github.com/ofesseler/gluster_exporter./gluster_exportergluster_exporter用法选项默认描述-h,--help -- 显示用法。 --web.listen-address :9189 侦听HTTP...

    Red_Hat_Gluster_Storage-3.5-Administration_Guide-en-US.pdf

    Hat Gluster Storage是一款开源的分布式存储解决方案,专为大规模数据处理和云计算环境设计。本运维手册详细介绍了如何配置和管理Red Hat Gluster Storage 3.5版本,是管理员进行日常维护和高级操作的重要参考资料。...

    Gluster_File_System-3.2.5-Administration_Guide-en-US.pdf

    ### Gluster File System 3.2.5 Administration Guide #### 一、简介 《Gluster File System 3.2.5 Administration Guide》是一本由Red Hat Engineering Content Services编写的指导手册,旨在帮助用户理解、配置...

    Performance in a Gluster System

    Performance in a Gluster System

    gluster文件系统结构

    ### Gluster文件系统结构:分布式存储的创新与实践 #### 引言 GlusterFS作为一款可扩展的开源集群文件系统,提供了一个全球统一的命名空间、分布式前端,并且能够轻松扩展至数百PB的存储容量。它通过利用普通硬件...

    Gluster_Hadoop_Compatible_Storage.pdf

    Glusterfs(分布式文件系统) Hadoop到结合

    Gluster_Storage-3.5-Administration_Guide-en-US

    Red Hat Gluster Storage is a software-only, scale-out storage solution that provides flexible and agile unstructured data storage for the enterprise. Red Hat Gluster Storage provides new ...

    An Introduction to Gluster Architecture

    An Introduction to Gluster Architecture

    Gluster集群搭建-补充篇

    - 使用 `gluster peer status` 和 `gluster volume info` 命令检查集群状态和卷信息。 #### 五、数据平衡 为了保证数据在各节点之间均衡分布,定期进行数据平衡是非常重要的。 **检查数据分布:** - 使用 `...

    python2-gluster-4.1.6-1.el7.x86_64.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    gluster-health-report:Gluster运行状况报告工具

    Gluster运行状况报告工具 使用此工具来分析Gluster节点的正确性或运行状况。 注意:该项目的目标不是提高Gluster的“监视”功能,而是确保在发生问题时不要错过对重要内容的分析。 如果某人没有任何其他监视设置,...

Global site tag (gtag.js) - Google Analytics