zoukankan      html  css  js  c++  java
  • glusterfs——volume管理

    Q: 常用的命令有哪些?

    创建volume: 

    gluster volume create NAME stripe SCOUNT replica RCOUNT transport TYPE  BRICKLIST

    NAME为volume的名字;SCOUNT,RCOUNT分别为stripe,replica的个数;transport为传输类型(tcp/rdma);BRICKLIST为brick列表,具体形式为HOME:PATH

    启用volume:  gluster volume start NAME

    停用volume:  gluster volume stop NAME

    删除volume:  gluster volume delete NAME

    查看volume信息:  gluster volume info

    查看volume运行时的信息: gluster volume statedump Name

    ===========================

    Q: 创建/启用/停用/删除volume最终都干了些什么?

    (1) 创建volume能看得到的结果是: glusterd在工作目录(默认为/var/lib/glusterd)的vols目录下,创建以volume名称为名字的目录,并在这个目录下创建相关文件记录volume的相关信息;看不到的结果是glusterd程序中也记录了volume的相关信息。(2) 启用volume的结果是在指定brick的节点上启动glusterfsd和glusterfs进程(注意:如果多个brick在同一节点下,会有多个glusterfsd进程,但只有一个glusterfs进程),同时在日志文件中更新记录的volume相关信息。(3) 停用volume的结果是结束glusterfsd和glusterfs进程。(4)删除volume则是将创建volume的相关文件信息全部清除。

    ===========================

    Q: 创建volume时都会创建哪些文件?分别记录些什么信息?

    创建volume时会在glusterd工作目录(默认为/var/lib/glusterd)的vols目录下,创建以volume名字为名的目录,在这个目录下会创建这些文件:

    info文件:保存volume的复制类型,volume的brick个数,brick的详细信息,stripe个数,replica个数,传输类型,volume的唯一ID,以及内部使用的用户名密码。这些基本上都是创建volume指定的参数信息。

    node_state.info:rebalance的状态信息,由gluster volume rebalance命令触发(不完全确定)。

    rb_state:rebalane-brick的状态信息,由gluster volume-brick命令触发(不完全确定)。

    cksum:校验值

    Name-fuse.vol/trusted-Name-fuse.vol(Name为volume的名字):volume对应glusterfs的配置文件,进程启动时读取。

    Name.Host.Path.vol(Name为volume的名字,Host为brick的主机名,Path为brick的存储路径'/'转换为'-'):

    volume对应brick的glusterfsd的配置文件,进程启动时读取。

    bricks/Host:Path(Host为brick的主机名,Path为brick的存储路径'/'转换为'-'):birck的相关信息,包括brick的主机名,文件存储路径,对应glusterfsd的侦听端口,以及连接状态。

    启用volume时,会记录brick对应glusterfsd进程的pid信息到 run/HOST-PATH.pid 文件中。

    ===========================

    Q: glusterd对这些命令的处理,内部实现大概是怎样的?

    与peer节点管理一样,针对volume的操作,glusterd也维护了一个事件链表和一个状态机,以及相应的状态数组,事件处理数组。当有对volume的操作请求时,往事件链表中添加事件,并根据状态机的变化,从相应状态的事件处理数组中找到对应的事件处理函数,并完成实际的处理动作。节点管理中是根据每个peer节点的状态作为有限状态机的变化,而volume的管理则是有一个全局的变量(opinfo)记录相应的状态。

    完整的处理一次请求,大概会有这样的状态机切换:

    由于brick可能是远端的节点,因此glusterd在本地处理的同时,还会和远端节点的glusterd交互。从上面状态机的转换可看出,一个请求的处理过程可理解为事务的执行,包括上锁,提交,释放锁等,具体实现方式等同于2pc的提交。关键函数调用如下图所示。

    ===========================

    Q: 这篇文章最后提到的问题是怎么回事?

    这是因为创建volume时,在brick对应的存储目录上,增加了"trusted.glusterfs.volume-id"和"trusted.gfid"两个扩展属性,在删除volume时并未移除这两个属性,再次创建时,对brick的存储目录进行校验,发现已经有了扩展属性,因此会有brick已经是volume的一部分的提示。

    通过getfattr命令可以查看这些存储路径的扩展属性

  • 相关阅读:
    SQL 基础题。
    C# 多维数组.
    C# 泛型相关.
    C# 委托数组.
    ActiveX的数字签名
    Asp.Net Html标记替换.感谢个热心人。弄了好久.
    关于TableLayoutPanel里放入控件无法将Dock设为Fill的解决办法
    服务器×××上的MSDTC不可用解决办法
    vista home下运行asp.net2.0 程序环境配置
    麦克风的调节
  • 原文地址:https://www.cnblogs.com/langren1992/p/4895017.html
Copyright © 2011-2022 走看看