GlusterFS原理及如何配置使用
文章目录
- 一、GlusterFS概述
- 1.1 GlusterFS简介
- 1.2 特点
- 扩展性和高性能
- 高可用性
- 全局统一命名空间
- 弹性卷管理
- 基于标准协议
- 1.3 GlusterFS相关术语
- 1.4 模块化堆栈式架构
- 二、GlusterFS工作原理
- 2.1 弹性hash算法
- 2.2 GlusterFS工作流程
- 三、GlusterFS的卷类型
- 3.1 分布式卷
- 3.2 条带卷
- 3.3 复制卷
- 3.4 分布式条带卷
- 3.5 分布式复制卷
- 四、部署GlusterFS卷
- 4.1 实验环境
- 4.2 实验过程
- 4.3 不同类型的卷的建立
- 4.3.1 分布式卷
- 4.3.2 条带卷
- 4.3.3 复制卷
- 4.3.4 分布式条带卷
- 4.3.5 分布式复制卷
- 4.4 创建并挂载卷
- 4.5 检查并测试
- 4.6 破坏实验
- 4.7 Glusterfs访问控制
一、GlusterFS概述
1.1 GlusterFS简介
- Glusterfs是一个开源的分布式文件系统,是Scale存储的核心,能够处理千数量级的客户端.在传统的解决 方案中Glusterfs能够灵活的结合物理的,虚拟的和云资源去体现高可用和企业级的性能存储.
- Glusterfs通过TCP/IP或InfiniBand RDMA网络链接将客户端的存储资块源聚集在一起,使用单一的全局命名空间来管理数据,磁盘和内存资源.
- Glusterfs基于堆叠的用户空间设计,可以为不同的工作负载提供高优的性能.
1.2 特点
扩展性和高性能
GlusterFS利用双重特性来提供几TB至数PB的高扩展存储解决方案。Scale-Out架构允许通过简单地增加资源来提高存储容量和性能,磁盘、计算和I/O资源都可以独立增加,支持10GbE和InfiniBand等高速网络互联。Gluster弹性哈希(Elastic Hash)解除了GlusterFS对元数据服务器的需求,消除了单点故障和性能瓶颈,真正实现了并行化数据访问。
高可用性
GlusterFS可以对文件进行自动复制,如镜像或多次复制,从而确保数据总是可以访问,甚至是在硬件故障的情况下也能正常访问。自我修复功能能够把数据恢复到正确的状态,而且修复是以增量的方式在后台执行,几乎不会产生性能负载。GlusterFS没有设计自己的私有数据文件格式,而是采用操作系统中主流标准的磁盘文件系统(如EXT3、ZFS)来存储文件,因此数据可以使用各种标准工具进行复制和访问。
全局统一命名空间
全局统一命名空间将磁盘和内存资源聚集成一个单一的虚拟存储池,对上层用户和应用屏蔽了底层的物理硬件。存储资源可以根据需要在虚拟存储池中进行弹性扩展,比如扩容或收缩。当存储虚拟机映像时,存储的虚拟映像文件没有数量限制,成千虚拟机均通过单一挂载点进行数据共享。虚拟机I/O可在命名空间内的所有服务器上自动进行负载均衡,消除了SAN环境中经常发生的访问热点和性能瓶颈问题。
弹性卷管理
数据储存在逻辑卷中,逻辑卷可以从虚拟化的物理存储池进行独立逻辑划分而得到。存储服务器可以在线进行增加和移除,不会导致应用中断。逻辑卷可以在所有配置服务器中增长和缩减,可以在不同服务器迁移进行容量均衡,或者增加和移除系统,这些操作都可在线进行。文件系统配置更改也可以实时在线进行并应用,从而可以适应工作负载条件变化或在线性能调优。
基于标准协议
Gluster存储服务支持NFS, CIFS, HTTP, FTP以及Gluster原生协议,完全与POSIX标准兼容。现有应用程序不需要作任何修改或使用专用API,就可以对Gluster中的数据进行访问。这在公有云环境中部署Gluster时非常有用,Gluster对云服务提供商专用API进行抽象,然后提供标准POSIX接口。
1.3 GlusterFS相关术语
Brick
GFS中的存储单元,通过是一个受信存储池中的服务器的一个导出目录。可以通过主机名和目录名来标识,如’SERVER:EXPORT’Volume
一组bricks的逻辑集合(卷)FUST
Filesystem Userspace是一个可加载的内核模块,其支持非特权用户创建自己的文件系统而不需要修改内核代码。通过在用户空间运行文件系统的代码通过FUSE代码与内核进行桥接。VFS
虚拟文件系统Glusterd
Gluster management daemon,要在trusted storage pool中所有的服务器上运行。Node
一个拥有若干brick的设备Client
挂载了GFS卷的设备RDMA
远程直接内存访问,支持不通过双方的OS进行直接内存访问。RRDNS
round robin DNS是一种通过DNS轮转返回不同的设备以进行负载均衡的方法Self-heal
用于后台运行检测复本卷中文件和目录的不一致性并解决这些不一致。Split-brain
脑裂Volfile
glusterfs进程的配置文件,通常位于/var/lib/glusterd/vols/volname
1.4 模块化堆栈式架构
- 模块化、堆栈式的架构
- 通过对模块的组合,实现复杂的功能
GlusterFS采用模块化、堆栈式的架构,可通过灵活的配置支持高度定制化的应用环境,比如大文件存储、海量小文件存储、云存储、多传输协议应用等。每个功能以模块形式实现,然后以积木方式进行简单的组合,即可实现复杂的功能。比如,Replicate模块可实现RAID1,Stripe模块可实现RAID0,通过两者的组合可实现RAID10和RAID01,同时获得高性能和高可靠性。如下图所示
二、GlusterFS工作原理
2.1 弹性hash算法
- 通过hash算法得到一个32位的整数
- 划分为N个连续的子空间,每个空间对应一个Brick
- 弹性hash算法的优点
保证数据平均分布在每一个Brick中
解决了对元数据服务器的依赖,进而解决了单点故障以及访问瓶颈
2.2 GlusterFS工作流程
- 客户端或应用程序通过GlusterFS的挂载点访问数据,对于用户来说,集群系统的存在对用户是完全透明的,用户感觉不到是操作本地系统还是远端的集群系统。
- 用户的这个操作被递交给 本地linux系统的VFS来处理。
- VFS将数据递交给FUSE内核文件系统, fuse文件系统则是将数据通过/dev/fuse设备文件递交给了GlusterFS client端,所以, 我们可以将 fuse文件系统理解为一个代理。
- GlusterFS client 收到数据后,client根据配置文件的配置对数据进行处理
- 通过网络将数据传递至远端的GlusterFS Server,并且将数据写入到服务器存储设备上
三、GlusterFS的卷类型
3.1 分布式卷
没有对文件进行分块处理
通过扩展文件属性保存hash值
支持的底层文件系统有ext4、zfs、xfs等
特点
文件分布在不同的服务器,不具备冗余性
可以灵活的扩展卷的大小
单点故障会造成数据丢失
依赖底层的数据保护创建分布式卷
创建一个名为dis-vol的分布式卷,文件将根据hash分布在node1:/data/sdb node2:/data/sdb中gluster volume create dis-vol node1:/data/sdb node2:/data/sdb force
3.2 条带卷
根据偏移量将文件分成N块(N个条带节点),轮询的存储在每个Brick Server节点
存储大文件时,性能尤为突出
不具备冗余性,类似Raid0
特点
数据被分割成更小块分布到块服务器中的不同条带区
分布减少了负载且更小的文件加速了存取的速度
没有数据冗余创建条带卷
创建了一个名为stripe-vol的条带卷,文件将被分块轮询的存储在node1:/data/sdc node2:/data/sdc中gluster volume create stripe-vol stripe 2 transport tcp node1:/data/sdc node2:/data/sdc(transport不指明时默认是RDMA)
3.3 复制卷
同一个文件保存一份或多份副本
因为要保存副本,所以磁盘利用率较低
若多个节点上的存储空间不一致,将按照木桶效应取最低节点的容量作为该卷的总容量
特点
卷中所有的服务器均保存一个完整的副本
卷的副本数量可由客户创建的时候决定
至少有两个块服务器或更多服务器
具备冗余性创建复制卷
创建名为rep-vol的复制卷,文件将同时存储两个副本,分别在node3:/data/sdb node4:/data/sdb两个Brick中gluster volume create rep-vol replica 2 node3:/data/sdb node4:/data/sdb force
3.4 分布式条带卷
兼顾分布式卷和条带卷的功能
主要用于大文件访问处理
最少需要4台服务器
创建分布式条带卷
创建了名为dis-stripe的分布式条带卷,配置分布式的条带卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍)gluster volume create dis-stripe stripe 2 node1:/data/sdd node2:/data/sdd node3:/data/sdd node4:/data/sdd force
3.5 分布式复制卷
兼顾分布式卷和复制卷的功能
用于需要冗余的情况
创建分布式复制卷
创建名为dis-rep的分布式条带卷,配置分布式复制卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍)gluster volume create dis-rep replica 2 node1:/data/sde node2:/data/sde node3:/data/sde node4:/data/sde force
四、部署GlusterFS卷
4.1 实验环境
主机名 | IP |
---|---|
node1 | 192.168.10.11 |
node2 | 192.168.10.12 |
node3 | 192.168.10.13 |
node4 | 192.168.10.14 |
4.2 实验过程
glusterfs软件的安装
首先需要提前准备好gfs的安装包,里面包括各种rpm包文件
然后将文件夹导入客户机中形成目录,对应目录我们去设置yum安装的repo本地源。
vi /etc/yum.repo.d/gfs.repo[glfs]name=glfsbaseurl=file:///root/gfsrepo # 对应文件所在的位置gpgcheck=0enable=1yum clean allyum makecacheyum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdmasystemctl start glusterd.service systemctl enable glusterd.service systemctl status glusterd.service
时间同步
ntpdate ntp1.aliyun.comcrontab -e*/30 * * * * /usr/sbin/ntpdate ntp1.aliyun.comcrontab -l
构建存储池(任意选取一个节点)
gluster peer probe node2gluster peer probe node3gluster peer probe node4gluster peer status # 查看状态(任意一台都可以)
创建卷
格式化并挂载使用
fdisk -lmkfs.ext4 /dev/sdbmkfs.ext4 /dev/sdcmkfs.ext4 /dev/sddmkfs.ext4 /dev/sdemkdir {/b1,/c1,/d1,/e1}mount /dev/sdb /b1mount /dev/sdc /c1mount /dev/sdd /d1mount /dev/sde /e1
查看挂载状态
df -Th
4.3 不同类型的卷的建立
4.3.1 分布式卷
[root@server1 ~]# gluster volume create dis-vol node1:/b1 node2:/b1 force # 创建卷
volume create: dis-vol: success: please start the volume to access data
[root@server1 ~]# gluster volume info dis-vol # 查看卷的信息Volume Name: dis-vol
Type: Distribute
Volume ID: a5b68dc2-992c-4b61-b481-396c7f4173c9
Status: Created
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: node1:/b1
Brick2: node2:/b1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@server1 ~]# gluster volume start dis-vol # 开启卷
volume start: dis-vol: success
[root@server1 ~]# gluster volume status dis-vol
Status of volume: dis-vol
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick node1:/b1 49152 0 Y 11517
Brick node2:/b1 49152 0 Y 11619Task Status of Volume dis-vol
------------------------------------------------------------------------------
There are no active volume tasks
其中显示online为Y即为在线表示分布式卷建立并开启成功。
4.3.2 条带卷
[root@server1 ~]# gluster volume create stripe-vol stripe 2 node1:/c1 node2:/c2 force # 创建条带卷
volume create: stripe-vol: success: please start the volume to access data
[root@server1 ~]# gluster volume info stripe-vol # 查看条带卷信息Volume Name: stripe-vol
Type: Stripe
Volume ID: 04b86e2c-947f-41cf-ab60-831a433eb1b5
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node1:/c1
Brick2: node2:/c2
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@server1 ~]# gluster volume start stripe-vol # 启动条带卷
volume start: stripe-vol: success
[root@server1 ~]# gluster volume status stripe-vol # 查看条带卷状态
4.3.3 复制卷
[root@server1 ~]# gluster volume create rep-vol replica 2 node3:/b1 node4:/b1 force
[root@server1 ~]# gluster volume info rep-vol
[root@server1 ~]# gluster volume start rep-vol
volume start: rep-vol: success
[root@server1 ~]# gluster volume status rep-vol
Status of volume: rep-vol
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick node3:/b1 49152 0 Y 12545
Brick node4:/b1 49152 0 Y 12623
Self-heal Daemon on localhost N/A N/A Y 12525
Self-heal Daemon on node4 N/A N/A Y 12643
Self-heal Daemon on node3 N/A N/A Y 12565
Self-heal Daemon on node2 N/A N/A Y 12608Task Status of Volume rep-vol
------------------------------------------------------------------------------
There are no active volume tasks
4.3.4 分布式条带卷
[root@server1 ~]# gluster volume create dis-stripe stripe 2 node1:/d1 node2:/d1 node3:/d1 node4:/d1 force
volume create: dis-stripe: success: please start the volume to access data
[root@server1 ~]# gluster volume info dis-stripeVolume Name: dis-stripe
Type: Distributed-Stripe
Volume ID: 3c17897c-e749-4cdd-990f-801fe5e6b59f
Status: Created
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/d1
Brick2: node2:/d1
Brick3: node3:/d1
Brick4: node4:/d1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@server1 ~]# gluster volume start dis-stripe
volume start: dis-stripe: success
[root@server1 ~]# gluster volume status dis-stripe
Status of volume: dis-stripe
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick node1:/d1 49154 0 Y 12595
Brick node2:/d1 49154 0 Y 12659
Brick node3:/d1 49153 0 Y 12608
Brick node4:/d1 49153 0 Y 12693Task Status of Volume dis-stripe
------------------------------------------------------------------------------
There are no active volume tasks
4.3.5 分布式复制卷
[root@server1 ~]# gluster volume create dis-repl replica 2 node1:/e1 node2:/e1 node3:/e1 node4:/e1 force
volume create: dis-repl: success: please start the volume to access data
[root@server1 ~]# gluster volume info dis-replVolume Name: dis-repl
Type: Distributed-Replicate
Volume ID: c0d1b3e6-0d89-4d3b-9b45-8e2a78764427
Status: Created
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/e1
Brick2: node2:/e1
Brick3: node3:/e1
Brick4: node4:/e1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@server1 ~]# gluster volume start dis-replgluster volume start dis-repl
[root@server1 ~]# gluster volume status dis-repl
Status of volume: dis-repl
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick node1:/e1 49155 0 Y 12674
Brick node2:/e1 49155 0 Y 12726
Brick node3:/e1 49154 0 Y 12676
Brick node4:/e1 49154 0 Y 12754
Self-heal Daemon on localhost N/A N/A Y 12694
Self-heal Daemon on node3 N/A N/A Y 12696
Self-heal Daemon on node4 N/A N/A Y 12774
Self-heal Daemon on node2 N/A N/A Y 12746Task Status of Volume dis-repl
------------------------------------------------------------------------------
There are no active volume tasks
4.4 创建并挂载卷
[root@server1 ~]# gluster volume list
dis-repl
dis-stripe
dis-vol
rep-vol
stripe-vol
[root@client ~]# mkdir /dis-repl
[root@client ~]# mkdir /dis-stripe
[root@client ~]# mkdir /dis-vol
[root@client ~]# mkdir /rep-vol
[root@client ~]# mkdir /stripe-vol
[root@client ~]# mount.glusterfs node1:dis-repl /dis-repl
[root@client ~]# mount.glusterfs node1:dis-stripe /dis-stripe
[root@client ~]# mount.glusterfs node1:dis-vol /dis-vol
[root@client ~]# mount.glusterfs node1:rep-vol /rep-vol
[root@client ~]# mount.glusterfs node1:stripe-vol /stripe-vol
[root@client ~]# df -Th
[root@client ~]# dd if=/dev/zero of=/demo1.log bs=40M count=1
[root@client ~]# dd if=/dev/zero of=/demo2.log bs=40M count=1
[root@client ~]# dd if=/dev/zero of=/demo3.log bs=40M count=1
[root@client ~]# dd if=/dev/zero of=/demo4.log bs=40M count=1
[root@client ~]# dd if=/dev/zero of=/demo5.log bs=40M count=1
[root@client /]# cp demo* /dis-repl
[root@client /]# cp demo* /dis-stripe
[root@client /]# cp demo* /dis-vol
[root@client /]# cp demo* /rep-vol
[root@client /]# cp demo* /stripe-vol
4.5 检查并测试
以分布式复制卷为例:
我们查看客户机上面的dis-repl目录,发现
4.6 破坏实验
总结:复制卷、分布式复制卷的数据完整,条带卷数据全部丢失,分布式卷丢失一部分
4.7 Glusterfs访问控制
删除某个卷:
[root@server1 e1]# gluster volume stop dis-vol
Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y
volume stop: dis-vol: success
[root@server1 e1]# gluster volume delete dis-vol
Deleting volume will erase all information about the volume. Do you want to continue? (y/n) y
volume delete: dis-vol: success
在客户端使用df -Th查看挂载的时候发现该卷不见了。
#仅拒绝某个用户,查看该客户的挂载发现丢失
[root@server1 e1]# gluster volume set rep-vol auth.reject 192.168.10.15
volume set: success# 仅允许某个用户
[root@server1 e1]# gluster volume set dis-repl auth.allow 192.168.10.15
volume set: success
GlusterFS原理及如何配置使用相关推荐
- Nginx 反向代理工作原理简介与配置详解
Nginx 反向代理工作原理简介与配置详解 测试环境 CentOS 6.8-x86_64 nginx-1.10.0 下载地址:http://nginx.org/en/download.html 安装 ...
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建
为什么80%的码农都做不了架构师?>>> kafka入门:简介.使用场景.设计原理.主要配置及集群搭建(转) 问题导读: 1.zookeeper在kafka的作用是什么? 2. ...
- 使用LVS实现负载均衡原理及安装配置详解
使用LVS实现负载均衡原理及安装配置详解 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均 ...
- SpringBoot核心原理:自动配置、事件驱动、Condition
点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/l6108003/article/ details/106966386 前言 SpringBoot是Spring的包装,通过自动 ...
- Nginx 教程(一)-- 工作原理及安装配置
Nginx简介 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在一个BSD-like协议下发行,由俄罗斯人IgorSysoev开发,共俄罗斯大型的搜索 ...
- Apollo架构体系、Apollo运行原理、Apollo配置中心简单介绍(一)
笔者在工作中遇到如下问题,随着程序功能越多,配置文件不断增加,一些功能的开关.服务器地址.接口地址.不同环境的一些配置文件不同,这些在每次发布不同环境.更新项目时都比较繁琐,后来学习微服务时接触到了S ...
- AVB源码学习(一):AVB2.0工作原理及编译配置
参考资料 感谢前辈的blog,安全相关的资料可太少了,很详细很卓越 https://blog.csdn.net/jackone12347/article/details/116241676 前言 在这 ...
- android AVB2.0(一)工作原理及编译配置
android AVB2.0介绍,本篇主要介绍AVB2.0的概述和工作原理.配置和编译. 有关AVB2.0的其他子系统的介绍,请查看android AVB2.0学习总结 一.AVB2.0概述 什么是A ...
- mysql安装原理_全面解读MySQL主从复制,从原理到安装配置
为什么需要主从复制? 1.在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了 ...
最新文章
- android native堆内存泄露,Android Native内存泄露检测
- AngularJS学习笔记之一: AngularJS入门
- JS 监控页面刷新,关闭 事件的方法(转载)
- 软件质量保证与测试笔记——江湖救急版
- 搞不定 NodeJS 内存泄漏?先从了解垃圾回收开始
- PHPCMS的产品筛选功能
- 原生Django常用API 参数
- day09 python之函数进阶
- python生成wifi字典_用Python自带的itertools生成穷举字典
- PAT L1 049 天梯赛座位分配
- 晶振负载电容计算公式和说明
- C Library User 手册(25)
- hbase数据库scan操作_HBase scan命令详解
- 如何评价知乎?中文版Quora的商业化道路为何如此曲折?
- 人肝源间充质样干细胞的肝源性潜能及肝再生效应
- JavaScript---网络编程(9-2)--DHTML技术演示(2-2)-表格加强
- 【C语言】位段(详解)
- IEC60079-11 附录3电气间隙和爬电距离的计算
- 2020年7月最新阿里云服务器优惠卷哪里领?
- 自动化测试框架-数据驱动(1)