`
lancelotwjq
  • 浏览: 54688 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于卷的配置文件(Volume Spec)

 
阅读更多

Glusterfs使用了xlator模块化架构,用户可以通过编辑卷的配置文件来自定义xlator的结构。下面本人结合源码,说说从配置文件构建xlator结构的流程。

 

首先要说明的是glusterfs根据执行程序名字的不同,有三种启动方式:glusterd,  server , client, 具体可见函数glusterfsd/src/glusterfsd.c:gf_get_process_mode

 

 

static uint8_t
gf_get_process_mode (char *exec_name)
{
        char *dup_execname = NULL, *base = NULL;
        uint8_t ret = 0;

        dup_execname = gf_strdup (exec_name);
        base = basename (dup_execname);

        if (!strncmp (base, "glusterfsd", 10)) {
                ret = GF_SERVER_PROCESS;
        } else if (!strncmp (base, "glusterd", 8)) {
                ret = GF_GLUSTERD_PROCESS;
        } else {
                ret = GF_CLIENT_PROCESS;
        }

        GF_FREE (dup_execname);

        return ret;
}
 

 

 

然后请跳到glusterfsd/src/glusterfsd.c: main 函数,它是glusterfs的入口函数。

 

 之后有glusterfs_volumes_init 这样一个函数, 我们将从这个函数分析起

 

int
glusterfs_volumes_init (glusterfs_ctx_t *ctx)
{
        FILE               *fp = NULL;
        cmd_args_t         *cmd_args = NULL;
        int                 ret = 0;

        cmd_args = &ctx->cmd_args;

        if (cmd_args->sock_file) {
                ret = glusterfs_listener_init (ctx);
                if (ret)     
                        goto out;                                                                                     
        }
        //如果在启动的时候指定volfile_server(意味着启动的是client),将会返回。
        if (cmd_args->volfile_server) { 
                ret = glusterfs_mgmt_init (ctx);
                /* return, do not emancipate() yet */                                                                 
                return ret;                                                                                           
        }
       //获得cmd_args->volfile文件的fp
        fp = get_volfp (ctx);        

        if (!fp) {
                gf_log ("glusterfsd", GF_LOG_ERROR,                                                                   
                        "Cannot reach volume specification file");                                                    
                ret = -1;                                                                                             
                goto out;

       }
        //解析volfile文件,构建xlator结构
        ret = glusterfs_process_volfp (ctx, fp);
        if (ret)
                goto out;

out:
        emancipate (ctx, ret);
        return ret;
}

 

 

    下面进入glusterfs_process_volfp函数:

 

 

int
glusterfs_process_volfp (glusterfs_ctx_t *ctx, FILE *fp)                                                              
{
        glusterfs_graph_t  *graph = NULL;
        int                 ret = -1;
        xlator_t           *trav = NULL;     
       
        //glusterfs使用flex和bison为volfile发明了一种简单的编程语言
        //这个函数定义在libglusterfs/src/y.tab.c 中
        graph = glusterfs_graph_construct (fp);      
        if (!graph) {                        
                gf_log ("", GF_LOG_ERROR, "failed to construct the graph");                                           
                goto out;    
        }
        //如果有fuse xlator在volfile中,则报错返回。
        for (trav = graph->first; trav; trav = trav->next) {                                                          
                if (strcmp (trav->type, "mount/fuse") == 0) {
                        gf_log ("glusterfsd", GF_LOG_ERROR,                                                           
                                "fuse xlator cannot be specified "                                                    
                                "in volume file");                                                                    
                        goto out;
                }
        }
        
        ret = glusterfs_graph_prepare (graph, ctx);                                                                   
        if (ret) {
                glusterfs_graph_destroy (graph);                                                                      
                goto out;    
        }

        ret = glusterfs_graph_activate (graph, ctx);

        if (ret) {
                glusterfs_graph_destroy (graph);
                goto out;
        }

        gf_log_volume_file (fp);

        ret = 0;
out:
        if (fp)
                fclose (fp);

        if (ret && !ctx->active) {
                /* there is some error in setting up the first graph itself */
                cleanup_and_exit (0);
        }

        return ret;
}
 

 

 

分享到:
评论

相关推荐

    k8s部署redis所需要的配置文件

    而配置文件`redis.master.conf`和`redis.slave.conf`分别代表主节点和从节点的配置,它们是构建Redis集群的关键组成部分。 1. **创建Redis主节点** 主节点负责处理所有写操作,并将新数据广播给从节点。`redis....

    4、Kubernetes - Persistent Volume(有StatefulSet的例子)1

    PV的配置文件示例如下所示: apiVersion: v1 kind: PersistentVolume metadata: name: pv0003 spec: capacity: storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteOnce ...

    k8s下部署nginx集群部署方式(相关yaml文件的编写和说明)

    在Nginx作为反向代理或静态文件服务器时,可能需要持久化存储其配置文件或静态内容。PV可以绑定到云提供商的存储服务或者集群内的本地存储。 ```yaml apiVersion: v1 kind: PersistentVolume metadata: name: ...

    Kubernetes存储的设计与基本架构.docx

    1. **服务的基本配置文件读取、密码密钥管理等**:这些通常是配置数据的一部分,可以通过简单的Volume实现。 2. **服务的存储状态、数据存储等**:这需要使用更高级的存储方案,如PersistentVolume (PV) 和 ...

    k8s的动态卷之nfs分配器.rar

    动态卷插件就是一种解决方法,它允许系统自动为Pods分配存储资源,而无需手动预先创建PV(Persistent Volume)。"k8s的动态卷之nfs分配器.rar"这个压缩包涉及到的就是Kubernetes中的一个动态卷插件——NFS(Network ...

    k8s学习使用中的_YAML文件.zip

    YAML(Yet Another Markup Language)是一种简洁的人类可读的数据序列化语言,常用于配置文件,特别适合k8s这种需要复杂配置的系统。 首先,了解YAML的基本语法是非常必要的。YAML文件以`.yaml`或`.yml`为扩展名。...

    k8s-yml.zip

    YAML 文件是 Kubernetes 集群中用来定义资源对象的配置文件格式,如 Deployment、Service、Pod、ConfigMap 和 Secret 等。 在 Kubernetes 中,YAML 文件的结构通常包括以下几个部分: 1. **APIVersion**: 定义了...

    rook部署ceph代码修改及卸载硬盘清理脚本

    - **Rook配置文件**:Rook的部署可以通过修改YAML配置文件进行定制。例如,你可以调整Ceph的性能参数、添加或删除存储池、更改监控策略等。 - **Ceph配置**:在Rook中,Ceph的配置通常位于CephCluster CR的spec...

    GlusterFS 介绍

    配置过程中,管理员需要定义卷(Volume),并通过卷规格文件(glusterfs-volume.spec)来指定卷的类型、选项和子卷。例如,创建一个使用TCP/IP传输协议、连接至本地主机的客户端卷,以及包含性能优化和跟踪功能的更...

    dos命令教程.pdf

    DOS命令总共大约有100个,包括文本编辑、查杀病毒、配置文件、批处理等。这里将详细介绍20个常用的DOS命令。 1. dir命令 dir命令是英文单词directory(目录)的缩写,主要用来显示一个目录下的文件和子目录。功能...

    Kubernetes资源清单模板

    在Pod的`spec`中,`containers`列表包含了容器的定义,每个容器有自己的`name`、`image`(容器镜像)、`ports`(暴露的端口)和其他环境变量、卷挂载等配置。 总结来说,Kubernetes资源清单模板是理解和操作...

    k8s和kubesphere安装所需的yml文件

    7. **volume**: 描述持久化存储,如挂载的数据卷,用于存储应用数据,即使Pod被销毁也能保留。 **KubeSphere**是基于Kubernetes构建的企业级多租户容器平台,它提供了更高级别的服务和功能,如工作负载管理、服务...

    在K8s上成功部署jenkins相关scripts

    首先,我们需要准备Jenkins的部署资源定义,这通常是一个YAML文件,用于描述Jenkins主服务、持久卷(Persistent Volume, PV)和持久卷声明(Persistent Volume Claim, PVC)。PV用于存储Jenkins的数据,PVC则是应用...

    k8s-二进制yaml.zip

    在“k8s-二进制yaml.zip”这个压缩包中,我们很显然关注的是Kubernetes的YAML配置文件,这些文件是k8s集群中定义和管理对象(如Pods、Services、Deployments等)的主要方式。YAML是一种易读的数据序列化语言,特别...

    30 编写自己的存储插件:FlexVolume与CSI.pdf

    对于FlexVolume类型的PV,其YAML文件会包含flexVolume字段,其中指定了driver和fsType(文件系统类型),以及自定义的options字段,用于提供特定于存储的配置选项。在我们的例子中,options字段被用来设置NFS服务器...

    ubuntu kubernetes中使用NFS创建pv_pvc.rar

    在Ubuntu操作系统上部署Kubernetes集群并利用NFS(Network File System)来创建持久卷(PV)和持久卷声明(PVC)是云原生应用存储管理的重要环节。NFS允许Kubernetes集群中的不同Pod共享同一份存储资源,适用于数据...

    aix操作指南.doc

    - **邮件系统配置**:涉及邮件服务器的配置文件、守护进程、别名管理等。 - **邮件日志与统计**:用于记录邮件系统的操作日志和统计数据,有助于问题排查和审计。 #### 十、X Window 系统 - **启动与管理**:AIX...

    RS/6000AIX培训教材

    1. **LVM(Logical Volume Manager)**:提供逻辑卷管理,通过聚合物理磁盘空间,实现灵活的存储分配和扩展。 2. **JFS(Journal File System)**:日志文件系统,增强了文件系统的稳定性和性能,支持快速恢复和事务...

    k8s-yaml

    YAML(Yet Another Markup Language)是一种轻量级的数据序列化语言,常被用作Kubernetes配置文件的格式,因为它的易读性和简洁性。在k8s-yaml压缩包中,包含了一个名为"k8s-yaml-main"的文件,这很可能是用户的...

    使用+StatefulSet+搭建+MongoDB+集群.doc

    在 Kubernetes 中,可以通过动态卷 provisioner 自动创建 PVC (Persistent Volume Claim) 来绑定到 PV (Persistent Volume)。 2. **创建 StatefulSet**:编写 YAML 文件定义 StatefulSet,包含 MongoDB 的配置,如...

Global site tag (gtag.js) - Google Analytics