GlusterFS

GlusterFS,是一个分布式文件系统,它通过 TCP/IP 或 IB(InfiniBand RDMA)网络将多个存储资源整合在一起,提供存储服务,具有很强的可扩展能力。
 

GlusterFS 工作原理

 
如上图所示。GlusterFS 的 server 端共享存储资源,client 端通过 TCP 或 IB 连接到 server,然后将 server 端的存储资源挂载到本地目录。应用(Application) 对本地目录文件的读写请求会转交给内核的 VFS,然后到 FUSE 文件系统,FUSE 将此请求转交给设备 /dev/fuse,设备 /dev/fuse 再递交给 GlusterFS 的 client 端,client 通过比对 GlusterFS client 端的配置文件,根据配置文件的定义做一些处理,最后去 server 上读取存储资源的数据,实现应用读写文件的操作。
 
从上图也可以看出,不管是 GlusterFS 和 Application 都需要经过 VFS,它是至关重要的存在。 VFS(Virtual File System,虚拟文件系统)是管理整个 Liunx 文件系统的文件系统,用户再访问文件目录的时候,不需要管这个目录用的是什么文件系统,是 ext4 还是 GlusterFS 等等,这些都是 VFS 来判断处理的,因为它不像 ext4 / GlusterFS 这种文件系统是实际存在的,所以叫虚拟文件系统。
VFS 示意图如下:
 

GlsterFS 部署

GlusterFS 部署流程:
1. GlusterFS 环境准备;
2. GlsuterFS 软件包安装,启动 GlusterFS 服务;
3. server 端创建文件系统;
4. 创建 GlusterFS volume;
5. client 端挂载 volume;
 
1. GlusterFS 环境准备
主机名
ip
硬盘
NFS
server1.local
192.168.4.141
/dev/vdb
LV:5000M lianhua, 1000M huasheng
server2.local
192.168.4.59
/dev/vdb
LV:5000M lianhua, 1000M huasheng
server3.local
192.168.4.105
/dev/vdb
LV:5000M lianhua, 1000M huasheng
client1.local
192.168.4.144
/dev/vdb
 
 
配置 hosts 文件,将主机信息写到 /etc/hosts 中,每台机器都要写:
[root@server1:/root]
# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.4.141 server1.local
192.168.4.59 server2.local
192.168.4.105 server3.local
关闭 iptables 和 SELiunx,确保 server 之间能相互访问,并且 client 能访问到 server。
 
 
2. GlusterFS 软件包安装
[root@server1:/root] wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@server1:/root] yum -y install centos-release-gluster312.noarch
[root@server1:/root] yum -y --enablerepo=centos-gluster*-test install glusterfs-server glusterfs-cli glusterfs-geo-replication
[root@server1:/root] yum -y --enablerepo=centos-gluster*-test install glusterfs-server glusterfs-cli glusterfs-geo-replication
[root@server1:/root] systemctl start glusterd.service
[root@server1:/root] systemctl enable glusterd.service
[root@server1:/root] systemctl status glusterd.service
# systemctl status glusterd.service
● glusterd.service - GlusterFS, a clustered file-system server
Loaded: loaded (/etc/systemd/system/glusterd.service; disabled; vendor preset: disabled)
Active: active (running) since Sat 2020-03-28 14:27:24 CST; 6h ago
Main PID: 4519 (glusterd)
Tasks: 188 (limit: 4915)
Memory: 324.8M [root@server1:/root] glusterfs -V
glusterfs 3.12.15
Repository revision: git://git.gluster.org/glusterfs.git
Copyright (c) 2006-2016 Red Hat, Inc. <https://www.gluster.org/>
GlusterFS comes with ABSOLUTELY NO WARRANTY.
It is licensed to you under your choice of the GNU Lesser
General Public License, version 3 or any later version (LGPLv3
or later), or the GNU General Public License, version 2 (GPLv2),
in all cases as published by the Free Software Foundation.
 
3. server 端创建文件系统
这里硬盘只有一块 vdb ,所以用 LVM 的方式创建两个 LV lianhua 和 huasheng 作为 GlusterFS 的磁盘。
<LVM 的介绍可看这里>
 
在每台 server 上,将 lianhua 和 huasheng 格式化为 ext4 文件系统,然后分别挂载到 /mnt/bricks/lianhua 和 /mnt/bricks/huasheng 目录。直接 show 结果:
[root@server1:/root]
# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 ext4 40G 4.7G 33G 13% /
tmpfs tmpfs 8.9G 3.9M 8.9G 1% /tmp
/dev/mapper/server1--vol-lianhua ext4 4.6G 23M 4.3G 1% /mnt/bricks/lianhua
/dev/mapper/server1--vol-huasheng ext4 4.6G 20M 4.3G 1% /mnt/bricks/huasheng
 
4. 创建 GlusterFS volume
创建 GlusterFS volume 之前,在任意一台主机中将其它 server 主机加入到 glusterFS 主机池中:
[root@server1:/root]
# gluster peer probe server2
[root@server1:/root]
# gluster peer probe server3 [root@server1:/root]
# gluster peer status
Number of Peers: 2 Hostname: server2.local
Uuid: 72a5f725-1436-46e9-8ae3-404e30fc5eac
State: Peer in Cluster (Connected) Hostname: server3.local
Uuid: 4b2472bc-44a6-4e92-b3fa-6746c599c5d0
State: Peer in Cluster (Connected)
在任意一台主机上创建 GlusterFS volume,volume 的类型是复制式(Replicated)卷:
[root@server1:/root]
# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 ext4 40G 4.7G 33G 13% /
tmpfs tmpfs 8.9G 3.9M 8.9G 1% /tmp
/dev/mapper/server1--vol-lianhua ext4 4.6G 23M 4.3G 1% /mnt/bricks/lianhua
/dev/mapper/server1--vol-huasheng ext4 4.6G 20M 4.3G 1% /mnt/bricks/huasheng [root@server1:/root]
# gluster volume create lianhuasheng replica 3 server1:/mnt/bricks/lianhua server2:/mnt/bricks/lianhua server3:/mnt/bricks/lianhua force
volume create: lianhuasheng: success: please start the volume to access data
[root@server1:/root]
# gluster volume start lianhuasheng
[root@server1:/root]
# gluster volume info lianhuasheng Volume Name: lianhuasheng
Type: Replicate
Volume ID: 895f24cb-cf45-4cba-b50d-55422aff0909
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: server1.local:/mnt/bricks/lianhua/brick
Brick2: server2.local:/mnt/bricks/lianhua/brick
Brick3: server3.local:/mnt/bricks/lianhua/brick
Options Reconfigured:
performance.client-io-threads: off
nfs.disable: on
transport.address-family: inet
cluster.server-quorum-type: none
cluster.quorum-type: auto
cluster.quorum-reads: true
cluster.consistent-metadata: on
server.allow-insecure: on
network.ping-timeout: 42
cluster.favorite-child-policy: mtime
cluster.heal-timeout: 60
cluster.server-quorum-ratio: 51% [root@server1:/root]
# mount -t glusterfs server1:/lianhuasheng /mnt/lianhuasheng [root@server1:/root]
# df -hT
/dev/vda1 ext4 40G 4.7G 33G 13% /
tmpfs tmpfs 8.9G 3.9M 8.9G 1% /tmp
/dev/mapper/server1--vol-lianhua ext4 4.6G 23M 4.3G 1% /mnt/bricks/lianhua
/dev/mapper/server1--vol-huasheng ext4 4.6G 20M 4.3G 1% /mnt/bricks/huasheng
server1.local:/lianhuasheng fuse.glusterfs 4.6G 24M 4.2G 1% /mnt/lianhuasheng
可以发现,复制式 volume 的大小等于每个文件系统的大小,即,都是 4.6G。
 

GlusterFS volume 类型

上面创建的卷类型是复制式 Replicated 的,它的示意图如下:
存储文件到 volume 中,文件会同时放到每个 Brick 中,Brick 即是主机池中每个 server 的磁盘分区。所以,volume 的容量等于每个 server 的磁盘分区容量。
 
除了 Replicated 模式外,还有 Distributed 分布式卷,Striped 条带式卷,Distributed Striped 分布式条带卷和 Distributed Replicated 分布式复制卷模式。
 

Distributed 分布式卷

存储文件到 volume 中,文件会随机存放到一台 server 中的 Brick 中。所以,volume 的容量式每个 Brick 的容量之和。
 

Striped 条带式卷

存储文件到 volume 中,文件被分成数块,存放到主机池中每台 server 的 Brick 中。
 

Distributed Striped 分布式条带卷

自己看吧,不解释了,前面几种模式的排列组合。
 

Distributed Replicated 分布式复制卷

自己看吧,不解释了,前面几种模式的排列组合。
 
5. client 端挂载 volume
使用 mount 命令将 volume 挂载到 client 的 mount point:
[root@client1:/root]
# mount -t glusterfs -o acl -o rw,backupvolfile-server=server1.local server1.local:/lianhuasheng /mnt/lianhuasheng [root@client1:/root]
# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 ext4 40G 4.7G 33G 13% /
tmpfs tmpfs 8.9G 3.9M 8.9G 1% /tmp
server1.local:/lianhuasheng fuse.glusterfs 4.6G 20M 4.2G 8% /mnt/lianhuasheng
 
在 client 写个文件测试下:
[root@client1:/root]
# cd /mnt/lianhuasheng/
[root@client1:/mnt/lianhuasheng]
# ls
[root@client1:/mnt/lianhuasheng]
# touch GlusterFS.log
[root@client1:/mnt/lianhuasheng]
# ll -h
total 0K
-rw-r--r-- 1 root root 0 Mar 28 22:38 GlusterFS.log
[root@client1:/mnt/lianhuasheng]
# ssh server1.local
[root@server1:/root]
# cd /mnt/lianhuasheng/
[root@server1:/mnt/lianhuasheng]
# ll -h
-rw-r--r-- 1 root root 0 Mar 28 22:38 GlusterFS.log
 

GlusterFS 常用命令

# 查看 GlusterFS 所有 volume
gluster volume list # 删除 GlusterFS volume
gluster volume stop <volume_name>
gluster volume delete <volume_name> # 卸载主机池中的主机
gluster peer detach <node_name> # 添加主机到主机池
gluster peer probe <node_name> # 创建 volume
gluster volume create <volume_name> replica <number of replica> <server_name>:<brick_name>
 
GlusterFS 官方文档: https://docs.gluster.org/en/latest/
 
 
 
(完)

每天学五分钟 Liunx 0000 | 存储篇:GlusterFS的更多相关文章

  1. 五分钟学Java:如何才能学好Java Web里这么多的技术

    原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 系列文章介绍 本文是<五分钟学Java>系列文章的一篇 本系列文章主要围绕Java程序员必须掌握的核心技能,结合我个人三年 ...

  2. 如何从40亿整数中找到不存在的一个 webservice Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库 WPF实战案例-打印 RabbitMQ与.net core(五) topic类型 与 headers类型 的Exchange

    如何从40亿整数中找到不存在的一个 前言 给定一个最多包含40亿个随机排列的32位的顺序整数的顺序文件,找出一个不在文件中的32位整数.(在文件中至少确实一个这样的数-为什么?).在具有足够内存的情况 ...

  3. 零元学Expression Blend 4 - Chapter 42 五分钟快速完成扇形变圆形动画

    原文:零元学Expression Blend 4 - Chapter 42 五分钟快速完成扇形变圆形动画 零元学Expression Blend 4 - Chapter 42 五分钟快速完成扇形变圆形 ...

  4. 《sed的流艺术之一》-linux命令五分钟系列之二十一

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  5. GC算法精解(五分钟让你彻底明白标记/清除算法)

    GC算法精解(五分钟让你彻底明白标记/清除算法) 相信不少猿友看到标题就认为LZ是标题党了,不过既然您已经被LZ忽悠进来了,那就好好的享受一顿算法大餐吧.不过LZ丑话说前面哦,这篇文章应该能让各位彻底 ...

  6. zookeeper-架构设计与角色分工-《每日五分钟搞定大数据》

    本篇文章阅读时间5分钟左右 点击看<每日五分钟搞定大数据>完整思维导图   zookeeper作为一个分布式协调系统,很多组件都会依赖它,那么此时它的可用性就非常重要了,那么保证可用性的同 ...

  7. 「每日五分钟,玩转JVM」:线程共享区

    前言 上一篇中,我们了解了JVM中的线程独占区,这节课我们就来了解一下JVM中的线程共享区,JVM中的线程共享区是跟随JVM启动时一起创建的,包括堆(Heap)和方法区()两部分,而线程独占区的程序计 ...

  8. 五分钟搭建一个基于BERT的NER模型

    BERT 简介 BERT是2018年google 提出来的预训练的语言模型,并且它打破很多NLP领域的任务记录,其提出在nlp的领域具有重要意义.预训练的(pre-train)的语言模型通过无监督的学 ...

  9. Python专题——五分钟带你了解map、reduce和filter

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题第6篇文章,给大家介绍的是Python当中三个非常神奇的方法:map.reduce和filter. 不知道大家看到ma ...

  10. 一门能让你五分钟学会的语言-Brainfuck

    看到标题,不出意外的话,你肯定开始骂我了:**标题党,什么编程语言五分钟就能学会? 其实我本来也是不相信的,但是学过了才知道这是真的. 1.Brainfuck 看到这个小标题,不要误会,我没有骂人. ...

随机推荐

  1. Harbor私有镜像仓库搭建

    为什么选择Harbor 你可能会问既然我们已经有了 Docker 镜像仓库为什么还需要 Harbor 呢?嗯,Harbor 是 Docker 镜像仓库的企业级扩展,用途更广泛.这些新的企业级功能包括: ...

  2. Linux SNMP监控配置

    1, 安装SNMP服务 [root@zlm log]# yum -y install net-snmp net-snmp-utils 2, 编辑SNMP配置文件[root@zlm log]# vim ...

  3. 如何用axios加后端数据库传值给前端

    小杰笔记: 如何用axios : 第一步:编写数据库实体类 @Data @AllArgsConstructor @NoArgsConstructor public class User { priva ...

  4. 8、Flutter Paddiing组件

    Padding组件处理容器与子元素之间的间距. class MyApp extends StatelessWidget { const MyApp({super.key}); @override Wi ...

  5. 数仓性能调优:row_number() over(p)-rn=1性能瓶颈发现和改写套路

    本文分享自华为云社区<GaussDB(DWS)性能调优:row_number() over(p)-rn=1性能瓶颈发现和改写套路>,作者:Zawami . 1.改写场景 本套路应用于子查询 ...

  6. 带你聚焦GaussDB(DWS)存储时游标使用

    摘要:游标是一种数据处理方法,提供了在查询结果集中进行逐行遍历浏览数据的方法,也可以将游标当做上下文区域的句柄或者指针,借助游标对指定位置的数据进行查询与处理. 本文分享自华为云社区<Gauss ...

  7. 助力企业数据飞轮转起来!火山引擎云原生数仓ByteHouse全面大促中

    用数据驱动业务提升,早已成为各类企业打破增长瓶颈,推动转型升级的一致共识.在大环境持续推动数字化转型的政策扶持下,企业仍然需要一个可借鉴的成熟经验模式,来彻底理解和实践数据驱动到底应该"怎么 ...

  8. 看火山引擎DataLeap如何做好电商治理(一):挑战与痛点

    现在人们的日常生活中,网购已经成为人们生活中不可或缺的购物形式.根据中国电子商会发布的<中国社交电商行业发展白皮书(2022)>的数据显示,2022年社交电商市场交易规模达到28542.8 ...

  9. MySQL java new dat() 后插入数据库的时间不一致

    别用时间字段,做为关联字段,代码里的时间和插到数据库中有误差 MySQL java new dat() 后插入数据库的时间不一致,代码里new 的时间插到数据库中不一致

  10. Excel 查找替换 -- 快速填充

    单元格匹配,这样就不会把 70 的 0 替换成 7零 了 Ctrl + E 快速填充 一列变多行 快速填充 1. 快速拆分数据 一列数据中包含了姓名和手机号码,这时你需要进行数据拆分,快速填充可以实现 ...