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命令可以查看这些存储路径的扩展属性

glusterfs——volume管理的更多相关文章

  1. Glusterfs volume 的三种挂载方式

    在上一篇中我们介绍了Glusterfs在CentOS7上的安装,并且提到Glusterfs client端有三种:Native client,NFS,Samba, 今天我们就来一起学习下这三种方式. ...

  2. glusterfs 内存管理方式

    glusterfs中的内存管理方式: 首先来看看glusterfs的内存管理结构吧: struct mem_pool { struct list_head list; int hot_count; i ...

  3. Docker 基础知识 - 使用卷(volume)管理应用程序数据

    卷(volumes)是 Docker 容器生产和使用持久化数据的首选机制.绑定挂载(bind mounts)依赖于主机的目录结构,卷(volumes)完全由 Docker 管理.卷与绑定挂载相比有几个 ...

  4. 理解OpenShift(5):从 Docker Volume 到 OpenShift Persistent Volume

    理解OpenShift(1):网络之 Router 和 Route 理解OpenShift(2):网络之 DNS(域名服务) 理解OpenShift(3):网络之 SDN 理解OpenShift(4) ...

  5. CentOS7.5 GlusterFS 分布式文件系统集群环境搭建

    环境准备: 系统版本:CentOS Linux release 7.5.1804 (Core) glusterfs:3.6.9 userspace-rcu-master: 硬件资源: 10.200.2 ...

  6. GlusterFS分布式存储学习笔记

    分布式文件系统 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源并不直接与本地节点相连,而是分布于计算网络中的一个或者多个节点的计算机上.目前意义上的分布 ...

  7. GlusterFS分布式存储集群-2. 使用

    参考文档: Quick Start Guide:http://gluster.readthedocs.io/en/latest/Quick-Start-Guide/Quickstart/ Instal ...

  8. 附009.Kubernetes永久存储之GlusterFS独立部署

    一 前期准备 1.1 基础知识 Heketi提供了一个RESTful管理界面,可以用来管理GlusterFS卷的生命周期.Heketi会动态在集群内选择bricks构建所需的volumes,从而确保数 ...

  9. GlusterFS 存储

    GlusterFS简介: 互联网四大开源分布式文件系统分别是:MooseFS.CEPH.Lustre.GusterFS. GluterFS最早由Gluster公司开发,其目的是开发一个能为客户提供全局 ...

随机推荐

  1. HeartBeat源码安装

    只是写了安装流程,具体信息查看互联网; 环境: CentOS6.8 x86_64 min Heartbeat 3.0.6 http://hg.linux-ha.org/heartbeat-STABLE ...

  2. java基础值向上向下转型

    1.父类引用可以指向子类对象,子类引用不能指向父类对象. 2.向上转型:子类引用的对象转换为父类类型称为向上转型,把子类对象直接赋给父类引用叫upcasting,向上转型不用强制转型(类似于低精度赋给 ...

  3. MySQL的保留字查询

    ADD ALL ALTER ANALYZE AND AS ASC AUTO_INCREMENT BDB BEFORE BERKELEYDB BETWEEN BIGINT BINARY BLOB BOT ...

  4. SublimeLinter 3中使用jshint

    这货得知已久,在sublime2时期对着教程按部就班的凑合用着...不明所以. 今天无意发现SublimeLinter终于出3了,果断装之,鼓捣1个多小时,磕磕绊绊终于成功工作了.期间看了无数英文文档 ...

  5. ubuntu 禁用快捷键

    System Settings > Keyboard > Shortcuts 点击要禁用的快捷键,按键盘"Backspace"键,就可以禁用了

  6. MongoDB数据模型(一)

    原文地址 一.数据模型介绍 MongoDB中的数据有着灵活的架构.与SQL数据库不同,因为SQL数据库必须先定义表结构,然后才能向其中插入数据,而MongoDB的集合不强制任何文档结构.这个灵活性方便 ...

  7. What is Flux?

    Pluralsight - React and Flux for Angular Developers 1. An architectural concept. It a idea. 2. Not a ...

  8. osg + cuda

    #include <osg/Notify> #include <osgViewer/Viewer> #include <osgCompute/Memory> #in ...

  9. JVM问题诊断常用命令:jinfo,jmap,jstack

    1.jinfo 描述:输出给定 java 进程所有的配置信息.包括 java 系统属性和 jvm 命令行标记等. 用法: jinfo [ option ] pid jinfo [ option ] e ...

  10. OMCS开发手册(03) -- 多媒体服务器

    前面我们已经详细介绍了基于OMCS开发网络多媒体应用的客户端程序所必需掌握的内容,现在我们来看一下OMCS服务端的开发.对于使用者而言,OMCS的服务端就非常简单了,只要实现一个用户验证的接口,挂接到 ...