GlusterFS源代码解析 —— GlusterFS 简单介绍
原文地址:http://blog.csdn.net/wangyuling1234567890/article/details/24564185
—— —— 本系列博客源代码是基于GlusterFS 3.4.3 版本号
1. Glusterfs简单介绍
GlusterFS是Scale-Out存储解决方式Gluster的核心,它是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展可以支持数PB存储容量和处理数千client。GlusterFS借助TCP/IP或InfiniBandRDMA网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据。GlusterFS基于可堆叠的用户空间设计,可为各种不同的数据负载提供优异的性能。
2. Glusterfs特点
2.1
扩展性和高性能
GlusterFS利用双重特性来提供几TB至数PB的高扩展存储解决方式。Scale-Out架构同意通过简单地添加资源来提高存储容量和性能,磁盘、计算和I/O资源都能够独立添加,支持10GbE和InfiniBand等快速网络互联。Gluster弹性哈希(ElasticHash)解除了GlusterFS对元数据server的需求,消除了单点故障和性能瓶颈,真正实现了并行化数据訪问。
2.2 高可用性
GlusterFS能够对文件进行自己主动复制,如镜像或多次复制,从而确保数据总是能够訪问,甚至是在硬件故障的情况下也能正常訪问。自我修复功能能够把数据恢复到正确的状态,并且修复是以增量的方式在后台运行,差点儿不会产生性能负载。GlusterFS没有设计自己的私有数据文件格式,而是採用操作系统中主流标准的磁盘文件系统(如EXT3、ZFS)来存储文件,因此数据能够使用各种标准工具进行复制和訪问。
2.3全局统一命名空间
全局统一命名空间将磁盘和内存资源聚集成一个单一的虚拟存储池,对上层用户和应用屏蔽了底层的物理硬件。存储资源能够依据须要在虚拟存储池中进行弹性扩展,比方扩容或收缩。当存储虚拟机映像时,存储的虚拟映像文件没有数量限制,成千虚拟机均通过单一挂载点进行数据共享。虚拟机I/O可在命名空间内的全部server上自己主动进行负载均衡,消除了SAN环境中常常发生的訪问热点和性能瓶颈问题。
2.4 弹性哈希算法
GlusterFS採用弹性哈希算法在存储池中定位数据,而不是採用集中式或分布式元数据server索引。在其它的Scale-Out存储系统中,元数据server一般会导致I/O性能瓶颈和单点故障问题。GlusterFS中,全部在Scale-Out存储配置中的存储系统都能够智能地定位随意数据分片,不须要查看索引或者向其它server查询。这样的设计机制全然并行化了数据訪问,实现了真正的线性性能扩展。
2.5 弹性卷管理
数据储存在逻辑卷中,逻辑卷能够从虚拟化的物理存储池进行独立逻辑划分而得到。存储server能够在线进行添加和移除,不会导致应用中断。逻辑卷能够在全部配置server中增长和缩减,能够在不同server迁移进行容量均衡,或者添加和移除系统,这些操作都可在线进行。文件系统配置更改也能够实时在线进行并应用,从而能够适应工作负载条件变化或在线性能调优。
2.6基于标准协议
Gluster存储服务支持NFS,CIFS, HTTP, FTP以及Gluster原生协议,全然与POSIX标准兼容。现有应用程序不须要作不论什么改动或使用专用API,就能够对Gluster中的数据进行訪问。这在公有云环境中部署Gluster时很实用,Gluster对云服务提供商专用API进行抽象,然后提供标准POSIX接口。
3. 模块化堆栈式架构简单介绍
GlusterFS採用模块化、堆栈式的架构,可通过灵活的配置支持高度定制化的应用环境,比方大文件存储、海量小文件存储、云存储、多传输协议应用等。每一个功能以模块形式实现,然后以积木方式进行简单的组合,就可以实现复杂的功能。比方,Replicate模块可实现RAID1,Stripe模块可实现RAID0,通过两者的组合可实现RAID10和RAID01,同一时候获得高性能和高可靠性。例如以下图所看到的:
每一个功能模块就是一个Xlator,不同的xlator在初始化后形成树,每一个xlator为这棵树中的节点,glusterfs要工作,就必定会涉及到节点之间的调用。
个方面,父节点调用子节点,子节点调用父节点,如当父节点向子节点发出写请求则要调用子节点的写操作,当子节点写操作完毕后,会调用父节点的写回调操作。父子节点的调用关系可用下图说明:
4. glusterfs总体工作流程
总体流程例如以下图所看到的:
1) 首先是在client, 用户通过glusterfs的mount point 来读写数据,对于用户来说,集群系统的存在对用户是全然透明的,用户感觉不到是操作本地系统还是远端的集群系统。
2) 用户的这个操作被递交给 本地linux系统的VFS来处理。
3) VFS 将数据递交给FUSE 内核文件系统:在启动glusterfs客户端曾经,须要想系统注冊一个实际的文件系统FUSE,如上图所看到的,该文件系统与ext3在同一个层次上面,ext3 是对实际的磁盘进行处理, 而fuse文件系统则是将数据通过/dev/fuse 这个设备文件递交给了glusterfsclient端。所以, 我们能够将 fuse文件系统理解为一个代理。
4) 数据被fuse 递交给Glusterfs client 后,client 对数据进行一些指定的处理(所谓的指定,是依照client配置文件据来进行的一系列处理
5. 主要模块介绍
Gluterfs总体採用堆栈式架构,模仿的函数调用栈,各个功能模块耦合度低,且非常多模块可自由结合形成不同的功能。以下主要介绍一下Glusterfs的主要模块:
5.1 DHT模块
该xlator主要实现了文件的哈希分布,将0到2的32次方依据子卷的个数平均划分若干个区间,文件到达DHT时,会依据文件名称计算所得的哈希值所在的区间,来决定该文件落在哪个子卷上。当中各个子卷的哈希区间记录在父文件夹的扩展属性中。此外,该模块还实现了数据迁移和扩容功能。
5.2 AFR模块
该xlator主要实现了文件级别的镜像冗余功能,类似raid1功能,只是不是块级别的。数据到达AFR时,会将ChangeLog加1,然后写数据,待所有子卷所有写成功后,再将ChangeLog减1。若须要修复时,依据ChangeLog推断哪个是source卷。实际的修复流程很复杂,包含meta,entry等。冗余卷没有主从之分,不论什么一个子卷都能够保证上层的读写请求,可在不影响上层应用的情况下运行修复功能。
5.3 Stripe模块
该xlator主要实现了文件的写条带,即文件到达Stripe时,会将文件按固定大小的条带写入各个子卷,类似raid0功能。在高版本号中,有两种模式:写空洞文件模式和聚合模式。该模块原理和实现都较DHT和AFR模块简单,且代码量较少,在此不再赘述。
—— —— 以上内容整理自互联网
GlusterFS源代码解析 —— GlusterFS 简单介绍的更多相关文章
- GlusterFS源代码解析 —— GlusterFS 内存分配方式
原文地址:http://blog.csdn.net/wangyuling1234567890/article/details/24564891 GlusterFS 的内存分配主要有两种方式,一种是内存 ...
- GlusterFS源代码解析 —— GlusterFS 日志
Logging.c: /* Copyright (c) 2008-2012 Red Hat, Inc. <http://www.redhat.com> This file is part ...
- Appium Android Bootstrap源代码分析之简单介绍
在上一个系列中我们分析了UiAutomator的核心源代码,对UiAutomator是怎么执行的原理有了根本的了解.今天我们会開始另外一个在安卓平台上基于UiAutomator的新起之秀--Appiu ...
- ViewResolver视图解析器简单介绍
导言:同学们有没有想过这样一个问题,就是客户端每次请求之后,Spring MVC是怎么把请求响应成一个视图的?相信很多同学清楚如何使用,却不清楚Spring MVC里面是如何返回视图,那么,今天我们就 ...
- Android 驱动(二) IIC简单介绍
一. I2C简单介绍 I2C(Inter-Integrated Circuit)总线是一种由 Philips 公司开发的两线式串行总线,用于连接微控制器及其外围设备.I2C 总线最基本的长处就是简单性 ...
- Android EventBus源代码解析 带你深入理解EventBus
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40920453,本文出自:[张鸿洋的博客] 上一篇带大家初步了解了EventBus ...
- 第一次玩博客,今天被安利了一个很方便JDBC的基于Spring框架的一个叫SimpleInsert的类,现在就来简单介绍一下
首先先对这段代码的简单介绍,我之前在需要操作JDBC的时候总是会因为经常要重新写SQL语句感到很麻烦.所以就能拿则拿不能拿的就简单地封装了一下. 首先是Insert.Spring框架的JDBC包里面的 ...
- Python的简单介绍
0. 前言 最近在从头梳理Python的相关知识,有助于以后更好地学习新知识.这篇博客,我简单介绍一下Python语言的有关内容. 1. Python介绍 Python的创始人为荷兰人吉多·范罗苏姆( ...
- Postman安装与简单介绍
Postman简介 Postman是一个 Chrome 扩展,能提供强大的 Web API HTTP 请求调试功能.Postman能够发送任何类型的http请求,支持GET/PUT/POST/DELE ...
随机推荐
- Android高手进阶——Adapter深入理解与优化
Android高手进阶--Adapter深入理解与优化 通常是针对包括多个元素的View,如ListView,GridView.ExpandableListview,的时候我们是给其设置一个Adapt ...
- Java-对象多态性
class A { public void fun1() { System.out.println("<----A------>"); } public v ...
- JDWP
JPDA(Java Platform Debugger Architecture) 是 Java 平台调试体系结构的缩写,通过 JPDA 提供的 API,开发人员可以方便灵活的搭建 Java 调试应用 ...
- Indy的评价
已经抛弃了indy,实在是不好,tcp在android下退出报错.我现在改用系统自带的httpclient.推荐RTC RTC带有一个tcp组件,不过处理方式跟indy不同,测试过,在android下 ...
- 关于__stdcall和__cdecl调用方式的理解
__stdcall和__cdecl都是函数调用约定关键字,先给出这两者的区别,然后举实例分析: __stdcall:参数由右向左压入堆栈:堆栈由函数本身清理. __cdecl:参数也是由右向左压入堆栈 ...
- c# listview导出excel文件
首先在工程中需要添加对Microsoft Excel office 11.0 object的引用 生成excel的类代码如下 using System; using System.Collection ...
- [置顶] Cocos2d-x 实例源码分析之二 小实例的主框架
这篇文章是分析第一个小实例ActionTest的源码.其实所有实例程序的结构都是一样的,只有特定方法里的代码不同,大的框架都是一样的.也就是说看完这篇文章你就可以自己开始分析其他源码了. 废话不多说, ...
- SQL视图索引
视图: 视图就相当于一个查询结果,它相对应的是表 表----真正存储数据的地方 视图---不存储数据,展示查询的结果 注意: 1.视图就是为了查询数据方便.一般不要试图向视图中插入数据,容易出错. 2 ...
- ORALCE 之LRU链与脏LRU链【转载】
今天是2013-09-09,时别n久的一篇经典文章,有被我在google发现了,再次转载一下.学习一下. 一.LRU链: 任何缓存的大小都是有限制的,并且总不如被缓存的数据多.就像Buffer cac ...
- Oschat IM 开源即时通讯项目介绍 - FengJ的个人页面 - 开源中国社区
Oschat IM 开源即时通讯项目介绍 - FengJ的个人页面 - 开源中国社区 Oschat IM 开源即时通讯项目介绍 255人收藏此文章, 我要收藏 发表于5天前(2013-08-28 ...