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. 【笔记整理】使用Session会话保持

    import requests if __name__ == '__main__': # Session对象实现了客户端和服务器端的每次会话保持功能. session = requests.Sessi ...

  2. 算法2:Hanoi塔

    汉诺(Hanoi)塔 一.背景介绍 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了 ...

  3. 牛客刷Java记录第四天

    第一题,单选题 class Car extends Vehicle { public static void main (String[] args) { new Car(). run(); } pr ...

  4. Python——CSS(层叠样式表,Cascading Style Sheets)、选择器(Selectors)

    CSS(层叠样式表,Cascading Style Sheets)是一种用于描述文档样式和布局的样式表语言.它可以与HTML结合使用,用于控制网页的外观和格式.以下是CSS的主要特点和一些基本概念: ...

  5. 技本功|Hive优化之建表配置参数调优(一)

    简介: Hive是大数据领域常用的组件之一,主要用于大数据离线数仓的运算,关于Hive的性能调优在日常工作和面试中是经常涉及的一个点,因此掌握一些Hive调优是必不可少的一项技能.影响Hive效率的主 ...

  6. 面试题:Java中的引用类型有哪几种?特点是什么?

    Java中引用类型及特点 强 引用: 最普通的引用 Object o = new Object() 软 引用: 垃圾回收器, 内存不够的时候回收 (缓存) 弱 引用: 垃圾回收器看见就会回收 (防止内 ...

  7. flutter去除隐藏标题栏

    使用 SystemChrome 类来控制系统 UI 元素的显示和隐藏 import 'package:flutter/material.dart'; import 'package:flutter/s ...

  8. 第四部分_Shell脚本数组和其他变量

    数组定义 ㈠ 数组分类 普通数组:只能使用整数作为数组索引(元素的下标) 关联数组:可以使用字符串作为数组索引(元素的下标) ㈡ 普通数组定义 可以切片 一次赋予一个值 #数组名[索引下标]=值 ar ...

  9. 案例解析关于ArkUI框架中ForEach的潜在陷阱与性能优化

    本文分享自华为云社区<深入解析ForEach的潜在陷阱与性能优化:错误用法与性能下降的案例分析>,作者:柠檬味拥抱 . 在ArkUI框架中,ForEach接口是基于数组类型数据进行循环渲染 ...

  10. 三大基础方案和AI出海计划重磅发布!加速盘古大模型生态发展

    本文分享自华为云社区<三大基础方案和AI出海计划重磅发布!加速盘古大模型生态发展>,作者: 华为云头条. 近日,以"开放同飞,共赢行业AI新时代"为主题的华为云盘古大模 ...