一、什么是GlusterFS
    glusterfs是一个横向扩展的分布式文件系统,就是把多台异构的存储服务器的存储空间整合起来给用户提供统一的命名空间。用户访问存储资源的方式有很多,可以通过NFS,SMB,HTTP协议等访问,还可以通过gluster本身提供的客户端访问。

二、典型部署拓扑图

三、概念和算法

1、Trusted Storage Pool

• 一堆存储节点的集合
• 通过一个节点“邀请”其他节点创建,这里叫probe
• 成员可以动态加入,动态删除
添加命令如下:
node1# gluster peer probe node2
删除命令如下:

node1# gluster peer detach node3

2、Bricks
• Brick是一个节点和一个导出目录的集合,e.g. node1:/brick1
• Brick是底层的RAID或磁盘经XFS或ext4文件系统格式化而来,所以继承了文件系统的限制
• 每个节点上的brick数是不限的
• 理想的状况是,一个集群的所有Brick大小都一样

3、Volumes

• Volume是brick的逻辑组合
• 创建时命名来识别
• Volume是一个可挂载的目录
• 每个节点上的brick数是不变的,e.g.mount –t glusterfs www.std.com:test /mnt/gls
• 一个节点上的不同brick可以属于不同的卷
• 支持如下种类:
a) 分布式卷
b) 条带卷
c) 复制卷
d) 分布式复制卷
e) 条带复制卷

f) 分布式条带复制卷

3.1分布式卷
• 文件分布存在不同的brick里
• 目录在每个brick里都可见
• 单个brick失效会带来数据丢失

• 无需额外元数据服务器

分布式卷内部的hash分布如下:

gluster是没有元数据服务器的,它定位文件和寻址都是通过哈希算法,这里使用的叫Davies-Meyer hash algorithm,可寻址空间为2^32次方,即0-4294967296,例如这里有四个节点,那么0-1073741824为node1的可寻址空间,1073741825-214748348为node2的可寻址空间,以此类推。访问一个文件时,通过文件名计算出一个地址,例如2142011129,属于1073741825-214748348,则将它存在node2中。

3.2 复制卷
• 同步复制所有的目录和文件
• 节点故障时保持数据高可用
• 事务性操作,保持一致性
• 有changelog
• 副本数任意定

复制卷的读写如下图所示:

3.3分布式复制卷
• 最常见的一种模式
• 读操作可以做到负载均衡

3.4 条带卷
• 文件切分成一个个的chunk,存放于不同的brick上
• 只建议在非常大的文件时使用(比硬盘大小还大)
• Brick故障会导致数据丢失,建议和复制卷同时使用
• Chunks are files with holes – this helps in maintaining offset consistency.

4、接入机制

• FUSE based Native protocol
• NFSv3
• SMB
• Libgfapi
• ReST/HTTP
• HDFS


4.1 FUSE based native access

原生客户端接入时,请求某一文件时直接定位到该文件在那一台或几台节点上,向那几台节点发出请求,完成操作,如下图所示:

4.2 NFS access

    NFS或SMB等其他协议接入就不那么简单了,首先要经过一层负载均衡服务,可能是RRDNS,还有HA服务,这些服务并不是gluster自带的,要自行部署,RRDNS就是在各个节点中找一台负载轻的把请求发过去,HA,可能用的ctdb或其他,是当它要发请求的那一台节点故障了,就把请求转移到另一台节点。总之,事先找到一台节点把请求发过去,这里是通过节点上的NFS服务器完成的请求,但是所请求的文件不一定在那台节点上,所以还要经过一步,就是在那台节点上再找这个文件在哪里,重新定位到有这个文件的节点,从而完成操作,对比原生客户端接入,可以看到这里要复杂的多,所以NFS访问性能并不理想。

4.3 libgfapi
• 提供编程接口,通过这个接口写程序访问
• 减少了上下文切换
• 通过这个接口集成了qemu, samba, NFS Ganesha
• 同步和异步的接口都提供
• 实现各种语言的绑定

4.4 libgfapi v/sFUSE-FUSE access

    gluster是用户空间的文件系统,只能通过FUSE和内核交互,所以传下来的的命令都是先由内核虚拟文件系统VFS接受,FUSE注册的一个虚拟设备/dev/fuse知道这时候来了一个请求,就接受过来,不传到底层XFS或EXT4...文件系统了,有gluster在FUSE中注册的一系列读写程序来处理,完成这个请求,这一系列读写处理就是通过网络传出去,在节点的glusterfsd接收到请求后,完成操作,再将结果通过网络回传到客户端,如下图所示:

4.5 libgfapi v/sFUSE-libgfapi access

    为什么gluster会提供api接口将应用集成到gluster内部呢,因为像外部的NFS,SMB那些,本身是不能跟gluster通信的,他们只能通过fuse,就是NFS液相FUSE传递信息,gluster也向fuse传递信息,他俩就通信了,这样很不方便,会经历内核这一层,这样一来就要消耗很多资源了,也会耗时间,而且没有必要,两个人在一起就好了是不是,fuse好多余。于是通过gluster自己封装的一个接口,将NFS,SMB什么的都集成起来,他们就在一起了,如下图所示,整个流程轻松了许多。

5、Customizable Translator Stack

Translator相当于gluster中的功能模块,一个或多个translator加在一起完成一个功能,比如说cache的设置,线程数的设置,内置NFS的相关设置等,translator之间是堆栈形式一层一层组织的,并不是无序的。

6、Ecosystem Integration(集成生态系统)

• OpenStack:这个很有名了,可以理解为一套工具让你通过他享受公有云和私有云以及其他相关的各种服务
• Samba:windows和unix之间实现资源共享
• Ganesha:一个印度人写的用户空间的NFS,这个印度人起了个难读的名字,和印度一个长着大象鼻子的智慧神一样的,叫伽内什
• oVirt:基于KVM(Kernel-based Virtual Machine) 的虚拟化存储管理软件
• qemu:也是和虚拟化相关的

• Hadoop:分布式并行计算的,是MapReduce生态圈的

• pcp:我也不知道是啥

• Proxmox:Proxmox VE (Proxmox Virtual Environment) 是一个集成OPENVZ 支持KVM应用的环境
• uWSGI:基于Python的Web项目部署方法,像php-cgi一样监听同一端口,进行统一管理和负载平衡

7、Use Cases - current

  • Unstructured data storage
  • Archival
  • Disaster Recovery
  • Virtual Machine Image Store
  • Cloud Storage for Service Providers
  • Content Cloud
  • Big Data
  • Semi-structured & Structured data

GlusterFS基础知识相关推荐

  1. 存储系统基础知识介绍

    关注「开源Linux」,选择"设为星标"回复「学习」,有我为您特别筛选的学习资料 存储系统是整个IT系统的基石,是IT技术赖以存在和发挥效能的基础平台.早先的存储形式是存储设备(通 ...

  2. 2021-7-14-超融合基础知识

    超融合基础知识 内容参考: Mars小歪,四海骄阳,钱曙光 1,什么是超融合 既然在说超融合架构,那就肯定有一般的融合架构,这其实也是目前行业内对于超融合定义争论的焦点,也就是说哪些定义为融合架构,哪 ...

  3. linux基础知识之磁盘管理及文件系统

    linux基础知识之磁盘管理及文件系统管理 磁盘管理及文件系统管理 一.磁盘硬件介绍 1. 接口类型 2. 硬盘种类 3. 磁盘命名 二.磁盘分区及文件系统介绍 1. 分区 1.1 什么是分区 1.2 ...

  4. 嵌入式Linux的OTA更新,基础知识和实现

    嵌入式Linux的OTA更新,基础知识和实现 OTA updates for Embedded Linux, Fundamentals and implementation 更新的需要 一旦嵌入式Li ...

  5. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记

    计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...

  6. 嵌入式linux编程,嵌入式Linux学习笔记 - 嵌入式Linux基础知识和开发环境的构建_Linux编程_Linux公社-Linux系统门户网站...

    注:所有内容基于友善之臂Mini2440开发板 一.嵌入式Linux开发环境的构建 嵌入式开发一般分为三个步骤: 1.编译bootloader,烧到开发板 2.编译嵌入式Linux内核,烧到开发板 3 ...

  7. 《计算机网络应用基础》模拟试卷(六),《计算机与网络应用基础知识1》模拟试卷...

    <计算机与网络应用基础知识1>模拟试卷 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 <计算机与网络应用基础知识1& ...

  8. python向量计算库教程_NumPy库入门教程:基础知识总结

    原标题:NumPy库入门教程:基础知识总结 视学算法 | 作者 知乎专栏 | 来源 numpy可以说是 Python运用于人工智能和科学计算的一个重要基础,近段时间恰好学习了numpy,pandas, ...

  9. python常用变量名_python基础知识整理

    Python Python开发 Python语言 python基础知识整理 序言:本文简单介绍python基础知识的一些重要知识点,用于总结复习,每个知识点的具体用法会在后面的博客中一一补充程序: 一 ...

最新文章

  1. LeetCode-字符串-反转字符串中的单词 II
  2. python-列表包字典-字典结构格式化-经验
  3. java复制文件夹_java实现拷贝一个文件夹,里面存在目录和文件,使用文件创建和文件流...
  4. Wireshark数据包分析之数据包信息解读
  5. uniapp 日期选择器_uniapp实现横向滚动选择日期
  6. 《云计算:原理与范式》一3.10 企业对企业集成服务
  7. java 实现根据ip重定向_从0到1用java再造tcpip协议栈:代码实现ping应用功能1
  8. markdown支持的latex
  9. python安装pygame的命令是什么_Python的pygame安装教程详解
  10. 2021年安全员-B证(广西省-2021版)考试技巧及安全员-B证(广西省-2021版)
  11. 在node发布了一个身份证验证解析包cn-idcard-parse
  12. 2.1 Java范型
  13. Java long 转成 String
  14. 外罚函数法(二):SUMT算法及其收敛性证明
  15. 通熟易懂的设计模式(一)
  16. 马云的菜鸟网络已犯了几个关键性的重大战略错误
  17. 【虹科案例】嵌入式系统的实时高速记录器——虹科高速数字化仪应用
  18. 既然知道失去才觉得美好,为什么不珍惜现在
  19. 逐鹿工具显示服务器错误连接不上怎么解决,win7系统中安装逐鹿工具箱时提示“error launching installer”错误怎么解决 Lin...
  20. 谷歌恐龙游戏HTML,谷歌浏览器自带的恐龙跑酷小游戏

热门文章

  1. 《啊哈C语言——逻辑的挑战(修订版)》学习笔记
  2. qpsk 16qam matlab,QPSK 完整清晰的描述了光通信中 ,16QAM的调制,matlab代码仿真通过 267万源代码下载- www.pudn.com...
  3. 【每日一题】6月3日德玛西亚万岁
  4. 计算机管理说文件缺失lnk,win7系统提示windows找不到文件computer management.lnk的具体解决步骤...
  5. 指针类型作用详解(一):不同指针类型的访问范围不同
  6. 关于符号用于引用与取地址的区别
  7. Mysql进行复杂查询
  8. 亲测好用的商业提案写作工具推荐
  9. Mysql连接数据库异常汇总【必收藏】
  10. nodejs 使用http进行post或get请求(携带cookie)