Gluster添加自定义简单xlator的步骤

1、状况说明:

已有的gluster集群由三台机器组成,分别为:     
gfsmaster 172.29.41.205     
gfsslave1  172.29.41.204   
gfsslave2  172.29.41.203 

用于测试gluster挂载的客户端     
gfsclient     172.29.41.206       
挂载目录为 /opt/gfsmount      


glusterfs源码目录:/root/Gluster/gluster  

gluster volume信息:

2、编写自定义代码和Makefile文件

test.c:

#ifndef _CONFIG_H
#define _CONFIG_H
#include "config.h"
#include "xlator.h"
#endif

#include <fnmatch.h>
#include <errno.h>
#include "glusterfs.h"
#include "xlator.h"
#include <stdarg.h>
#include "defaults.h"
#include "logging.h"

int test_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
                     int32_t op_ret, int32_t op_errno,
                     inode_t *inode, struct iatt *buf,
                     dict_t *xdata, struct iatt *postparent)
{
        STACK_UNWIND_STRICT (lookup, frame, op_ret, op_errno, inode, buf, xdata,
                             postparent);
        return 0;
}


static int test_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)
{
    gf_log(this->name, GF_LOG_ERROR, "in test translator lookup");
    STACK_WIND (frame, test_lookup_cbk, 
            FIRST_CHILD(this), FIRST_CHILD(this)->fops->lookup, 
            loc, xdata);
    return 0;
}

static int test_stat (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)
{
    gf_log(this->name, GF_LOG_ERROR, "in test translator stat");
    return 0;
}

int
reconfigure (xlator_t *this, dict_t *options)
{
        return 0;
}


int
init (xlator_t *this)
{
        struct ios_conf    *conf = NULL;
        int                 ret = -1;

    gf_log (this->name, GF_LOG_ERROR, "test translator loaded");
        if (!this)
                return -1;

        if (!this->children) {
                gf_log (this->name, GF_LOG_ERROR,
                        "test translator requires atleast one subvolume");
                return -1;
        }

        if (!this->parents) {
              gf_log (this->name, GF_LOG_ERROR, "dangling volume. check volfile ");
        }

        conf = this->private;

        this->private = conf;
        ret = 0;
        return ret;
}


void
fini (xlator_t *this)
{
        struct ios_conf *conf = NULL;

        if (!this)
                return;

        conf = this->private;

        if (!conf)
                return;
        this->private = NULL;

        GF_FREE(conf);
        gf_log (this->name, GF_LOG_ERROR, "test translator unloaded");
        return;
}

int
notify (xlator_t *this, int32_t event, void *data, ...)
{
    default_notify (this, event, data);
        return 0;
}

struct xlator_fops fops = {
        .stat        = test_stat,
        .lookup      = test_lookup,
};

struct xlator_cbks cbks = {
};

struct volume_options options[] = {
 };

MakeFile:

Add translator into glusterfs volume file
#Author Steven Liu
#E-mail lingjiujianke@gmail.com
#Blog: http://blog.fs-linux.org

TARGET  = test.so
OBJECTS = test.o

GLUSTERFS_SRC   = /root/Gluster/glusterfs
GLUSTERFS_LIB   = /usr/local/lib
HOST_OS = HF_LINUX_HOST_OS


CFLAGS  = -fPIC -Wall -O0 -g \
          -DHAVE_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -D$(HOST_OS) \
          -I$(GLUSTERFS_SRC) -I$(GLUSTERFS_SRC)/libglusterfs/src \
          -I$(GLUSTERFS_SRC)/contrib/uuid

LDFLAGS = -shared -nostartfiles -L$(GLUSTERFS_LIB) -lglusterfs -lpthread

$(TARGET): $(OBJECTS)
    $(CC) $(OBJECTS) $(LDFLAGS) -o $(TARGET)


clean:
    rm -rf $(TARGET) $(OBJECTS)

3、编译出so文件 并放在所有机器的/usr/local/lib/glusterfs/xlator/debug/(具体根据不同版本路径有所不同)下面

4、修改volfile

vi /var/lib/glusterd/vols/testvol/testvol-fuse.vol

在结尾处修改如下:

volume testvol-test
    type debug/test
    subvolumes testvol-md-cache
end-volume

volume testvol
    type debug/io-stats
    option count-fop-hits off
    option latency-measurement off
    subvolumes testvol-test
end-volume

然后在每个服务器中都更新这个文件

5、在三台gluster服务器中重启glusterfsd进程

ps -ef | grep glusterfsd
kill -9 ****

6、客户端挂载测试

可以看出test xlator成功生效!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值