目录
一、简介
二、特点
1、扩展性和高性能
2、高可用性
3、全局统一命名空间
4、弹性卷管理
5、基于标准协议
三、专业术语
四、GlusterFS构成
五、GlusterFS 的工作流程
1、工作流程
2、弹性 HASH 算法
六、GlusterFS常用分布式简介
1、分布式卷
2、条带卷(Stripe volume)
3、复制卷(Replica volume)
4、分布式条带卷(Distribute Stripe volume)
5、分布式复制卷(Distribute Replica volume)
6、条带复制卷(Stripe Replca volume)
7、分布式条带复制卷(Distribute Stripe Replicavolume)
七、GlusterFS集群
1、实验环境
2、安装GFS
3、时间同步
4、添加节点到存储信任池中 (只要在一台主机上添加其他三台节点即可,其他主机不用操作)
5、GlusterFS 卷的创建
5.1创建分布式卷
5.2、创建条带卷
5.3、创建复制卷
5.4、创建分布式条带卷
5.5、创建分布式复制卷
6、GFS客户端配置
1、安装GFS
2、创建挂载点
3、配置映射关系
4、挂载
7、测试Gluster 文件系统
八、实验总结
1、查看分布式卷文件分布
总结:分布式卷文件分布是按照哈希算法来选择存储位置的。数据没有被分片
2、查看条带卷文件分布
总结:条带卷文件分布,数据被分片50%(注意看-h显示的大小),没副本,没冗余
3、查看复制卷分布
总结:复制卷分布,数据没有被分片,有副本,有冗余
4、查看分布式条带卷分布
总结:分布式条带卷分布,数据被分片50%,没副本,没冗余(先按分布式规则进行分片,再按条带规则,分开存储)
5、查看分布式复制卷分布
总结:分布式复制卷,没有被分片,有副本,有冗余(先按分布式进行分开存储,再按复制卷进行复制)
九、破坏性测试
十、拓展基础命令
GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,并提供容错功能。它可以给大量的用户提供总体性能较高的服务。
开源的分布式文件系统;由存储服务器、客户端以及 NFS/Samba 存储网关组成。
GlusterFS是一个可扩展性的开源的分布式文件系统,它将来自多个服务器的磁盘存储资源聚合到一个全局命名空间中,供用户使用。
GlusterFS是一种全对称的开源分布式文件系统,所谓全对称是指GlusterFS采用弹性哈希算法,没有中心节点,所有节点平等。GlusterFS配置方便,稳定性好,可轻松扩展至PB级数量,数千个节点。
GlusterFS利用双重特性来提供高容量存储解决方案
Scale-Out架构允许通过简单地增加存储节点的方式来提高存储容量和性能(磁盘、计算和I/O资源都可以独立增加),支持10GbE和InfiniBand等高速网络互联
GlusterFS可以对文件进行自动复制,如镜像或多次复制,从而确保数据总是可以访问,甚至是在硬件故障的情况下也能正常访问当数据出现不一致时,自我修复功能能够把数据恢复到正确的状态,数据的修复是以增量的方式在后台执行,几乎不会产生性能负载。
GlusterFS可以支持所有的存储,因为它没有设计自己的私有数据文件格式,而是采用操作系统中主流标准的磁盘文件系统(如EXT3、XFS等)来存储文件,因此数据可以使用传统访问磁盘的方式被访问。
分布式存储中,将所有节点的命名空间整合为统一命名空间,将整个系统的所有节点的存储容量组成一个大的虛拟存储池,供前端主机访问这些节点完成数据读写操作。
GlusterFs通过将数据储存在逻辑卷中,逻辑卷从逻辑存储池进行独立逻辑划分而得到。
逻辑存储池可以在线进行增加和移除,不会导致业务中断。逻辑卷可以根据需求在线增长和缩减,并可以在多个节点中实现负载均衡。
文件系统配置也可以实时在线进行更改并应用,从而可以适应工作负载条件变化或在线性能调优。
Gluster存储服务支持NFS、CIFS、HTTP、FTP、SMB及Gluster原生协议,完全与POSIX标准(可移植操作系统接口)兼容。
现有应用程序不需要做任何修改就可以对Gluster中的数据进行访问,也可以使用专用API进行访问。
名称 |
解释 |
Brick |
最基本的存储单元,(块存储服务器)实际存储用户数据的服务器 |
Volume |
逻辑卷。本地文件系统的"分区" |
Glusterd |
(服务)是运行在存储节点的管理进程,(客户端运行的是gluster client)GFS使用过 程中整个GFS之间的交换由Gluster client 和glusterd完成 |
FUSE |
用户空间的文件系统(类别EXT4),”一个伪文件系统“。一个可加载的内核模块,和内核VFS交互进行文件系统的操作 |
VFS |
(虚拟端口)内核态的虚拟文件系统,用户是提交请求给VFS 然后VFS交给FUSH, 再交给GFS客户端,最后由客户端交给远端的存储 |
模块化堆栈式架构:模块化、堆栈式的架构,通过对模块的组合,实现复杂的功能
①API:应用程序编程接口
②模块化:每个模块可以提供不同的功能
③堆栈式:同时启用多个模块,多个功能可以组合,实现复杂的功能
1、客户端或应用程序通过 GlusterFS 的挂载点访问数据 application
2、系统内核通过 VFS API 收到请求并处理
3、VFS 将数据递交给 FUSE 内核文件系统,并向系统注册一个实际的文件系统 FUSE,而 FUSE 文件系统则是将数据通过 /dev/fuse 设备文件递交给了 GlusterFS client 端。
4、GlusterFS client 收到数据后,client 根据配置文件的配置对数据进行处理
5、经过 GlusterFS client 处理后,通过网络将数据传递至远端的GlusterFS Server,并且将数据写入到服务器存储设备上EXT3
分布式GFS存储是依靠于弹性hash算法,通过对存储内容进行hash算法的运算,可以得到32位的整数,将32位整数平均划分到 分布式服务器中,也就是每一个brick对应一段整数范围。用户根据计算得出数字找到对应的brick块。
弹性HASH算法:
弹性 HASH 算法是 Davies-Meyer 算法的具体实现,通过 HASH 算法可以得到一个 32 位的整数范围的 hash 值,假设逻辑卷中有 N 个存储单位 Brick,则 32 位的整数范围将被划分为 N 个连续的子空间,每个空间对应一个 Brick。当用户或应用程序访问某一个命名空间时,通过对该命名空间计算 HASH 值,根据该 HASH 值所对应的 32 位整数空间定位数据所在的 Brick。
弹性HASH算法的优点:保证数据平均分布在每一个Brick中,解决了对元数据服务器的依赖,进而解决了单点故障。
也看成为哈希卷,多个文件以文件为单位在多个brick上,使用哈希算法随机存储。
分布式卷具有如下特点:
① 文件分布在不同的服务器,不具备冗余性。
② 更容易和廉价地扩展卷的大小。
③ 单点故障会造成数据丢失。(类似RAID0)
④ 依赖底层的数据保护
使用场景:大量小文件
优点:读/写性能好
缺点:如果存储或服务器故障,该brick上的数据将丢失
默认卷:不指定卷类型,默认是分布式卷
brick数量没有限制
是将文件分成条带,以轮询的方式存放在多个brick上,默认条带大小128k。文件存储以数据块为单位,支持大文件存储,文件越大,读取效率越高,但是不具备冗余性
应用场景:大文件
优点:适用于大文件存储
缺点:可靠性低,brick故障会导致数据全部丢失
stripe = birck (stripe:条带个数)
条带卷特点:① 数据被分割成更小块分布到块服务器群中的不同条带区。
② 分布减少了负载且更小的文件加速了存取的速度。
③ 没有数据冗余。
是将多个文件在多个brick上复制多份,brick的数目要与需要复制的份数相等,建议brick分布在不同的服务器上。
将文件同步到多个Brick上,使其具备多个文件副本,属于文件级RAID 1,具有容错能力。因为数据分散在多个Brick中,所以读性能得到很大提升,但写性能下降。
复制卷具备冗余性,即使一个节点损坏,也不影响数据的正常使用。但因为要保存副本,所以磁盘利用率较低。
应用场景:对可靠性高和读写性能要求高的场景
优点:读写性能好
缺点:写性能差
replica = brick
复制卷特点:① 卷中所有的服务器均保存一个完整的副本。
② 卷的副本数量可由客户创建的时候决定,但复制数必须等于卷中Brick所包含的存储服务器数。
③ 至少由两个块服务器或更多服务器。
④ 具备冗余性。
是将多个文件在多个节点哈希存储,每个文件再多分条带在多个brick上存储
应用场景:读/写性能高的大量大文件场景
优点:高并发支持
缺点:没有冗余,可靠性差
brick数是stripe的倍数
是将多个文件在多个节点上哈希存储,在多个brick复制多份存储
应用场景:大量文件读和可靠性要求高的场景
优点:高可靠,读性能高
缺点:牺牲存储空间,写性能差
brick数量是replica的倍数
是将一个大文件存储的时候划分条带,并且保存多份
应用场景:超大文件,并且对可靠性要求高
优点:大文件存储,可靠性高
缺点:牺牲空间写性能差
brick数量是stripe、replica的乘积
三种卷组合
每台节点添加四块磁盘(内存4G起步)
node1节点:node1/192.168.159.68 磁盘: /dev/sdb1 挂载点: /data/sdb1
/dev/sdc1 /data/sdc1
/dev/sdd1 /data/sdd1
/dev/sde1 /data/sde1
node2节点:node2/192.168.159.11 磁盘: /dev/sdb1 挂载点: /data/sdb1
/dev/sdc1 /data/sdc1
/dev/sdd1 /data/sdd1
/dev/sde1 /data/sde1
node3节点:node3/192.168.159.13 磁盘: /dev/sdb1 挂载点: /data/sdb1
/dev/sdc1 /data/sdc1
/dev/sdd1 /data/sdd1
/dev/sde1 /data/sde1
node4节点:node4/192.168.159.10 磁盘: /dev/sdb1 挂载点: /data/sdb1
/dev/sdc1 /data/sdc1
/dev/sdd1 /data/sdd1
/dev/sde1 /data/sde1
client :192.168.159.20
2、分区
分区脚本,每个节点执行四次并挂载
vim /opt/fdisk.sh
#! /bin/bash
echo "the disks exist list:"
fdisk -l |grep '磁盘 /dev/sd[a-z]'
echo "=================================================="
PS3="chose which disk you want to create:"
select VAR in `ls /dev/sd*|grep -o 'sd[b-z]'|uniq` quit
do
case $VAR in
sda)
fdisk -l /dev/sda
break ;;
sd[b-z])
echo "n
p
w" | fdisk /dev/$VAR
#make filesystem
mkfs.xfs -i size=512 /dev/${VAR}"1" &> /dev/null
#mount the system
mkdir -p /data/${VAR}"1" &> /dev/null
echo -e "/dev/${VAR}"1" /data/${VAR}"1" xfs defaults 0 0\n" >> /etc/fstab
mount -a &> /dev/null
break ;;
quit)
break;;
*)
echo "wrong disk,please check again";;
esac
done
此处发现node3、node4的磁盘没有完全挂载上,可能是磁盘分区的时候出了问题,对没有挂载上的磁盘进行重新分区。在此种情况下,如果没有即使更正,当修改完/etc/fstab,进行自动挂载后,重启终端会导致无法正常启动。
配置映射关系
node1节点、node2节点、node3节点、node4节点配置相同
[root@node2 ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.159.14 node1
192.168.159.11 node2
192.168.159.13 node3
192.168.159.10 node4
查看结果:
1、上传安装包到opt
[root@zwb_node1 opt]# unzip gfsrepo.zip ### 解压缩
2、配置yum源
[root@node1 opt]# cd /etc/yum.repos.d/
[root@node1 yum.repos.d]# ls
CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-Media.repo
CentOS-Debuginfo.repo CentOS-Sources.repo
[root@node1 yum.repos.d]# mkdir repo.bak ## 新建repo.bak
[root@node1 yum.repos.d]# ls
CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-Media.repo repo.bak
CentOS-Debuginfo.repo CentOS-Sources.repo
[root@node1 yum.repos.d]# mv *.repo repo.bak/ ## 隐藏公共yum源文件
[root@node1 yum.repos.d]# ls
repo.bak
[root@node1 yum.repos.d]# vim gfs.repo ## 创建本地YUM源
[gfs]
name=gfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enable=1
[root@node1 yum.repos.d]# yum clean all ## 清除缓存
已加载插件:fastestmirror, langpacks
正在清理软件源: gfs
[root@node1 yum.repos.d]# yum makecache ## 重新加载
已加载插件:fastestmirror, langpacks
Determining fastest mirrors
gfs | 2.9 kB 00:00
(1/3): gfs/filelists_db | 62 kB 00:00
(2/3): gfs/other_db | 46 kB 00:00
(3/3): gfs/primary_db | 92 kB 00:00
元数据缓存已建立
[root@node1 yum.repos.d]# yum remove glusterfs-api.x86_64 glusterfs-cli.x86_64 glusterfs.x86_64 glusterfs-libs.x86_64 glusterfs-client-xlators.x86_64 glusterfs-fuse.x86_64 ##### 解除依赖关系
已加载插件:fastestmirror, langpacks
正在解决依赖关系
...................................................................................
[root@node1 yum.repos.d]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma ####### 安装glusterfs
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
正在解决依赖关系
--> 正在检查事务
---> 软件包 glusterfs.x86_64.0.3.10.2-1.el7 将被 安装
--> 正在处理依赖关系 glusterfs-libs = 3.10.2-1.el7,它被软件包 glusterfs-3.10.2-1.el7.x86_64 需要
--> 正在处理依赖关系 libglusterfs.so.0()(64bit),它被软件包 glusterfs-3.10.2-1.el7.x86_64 需要
...................................................................................
安装报错:版本过高,先解除依赖关系
yum remove glusterfs-api.x86_64 glusterfs-cli.x86_64 glusterfs.x86_64 glusterfs-libs.x86_64 glusterfs-client-xlators.x86_64 glusterfs-fuse.x86_64
重新安装
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
验证是否安装成功
[root@node1 yum.repos.d]# systemctl enable glusterd.service --now ##第二种方法,设置开机启
## 动并即刻启动
Created symlink from /etc/systemd/system/multi-user.target.wants/glusterd.service to /usr/lib/systemd/system/glusterd.service.
[root@node1 yum.repos.d]# systemctl status glusterd.service
● glusterd.service - GlusterFS, a clustered file-system server
Loaded: loaded (/usr/lib/systemd/system/glusterd.service; enabled; vendor preset: disabled)
Active: active (running) since 一 2022-10-10 15:42:17 CST; 21s ago
Process: 11466 ExecStart=/usr/sbin/glusterd -p /var/run/glusterd.pid --log-level $LOG_LEVEL $GLUSTERD_OPTIONS (code=exited, status=0/SUCCESS)
.............................................................................
[root@node1 yum.repos.d]# ntpdate ntp1.aliyun.com
10 Oct 15:43:08 ntpdate[11497]: adjust time server 120.25.115.20 offset -0.004607 sec
node1 (之前主机名为zwb_开头,由于带有下划线会出问题,四台主机名改为node1、node2、node3、node4)
[root@node1 yum.repos.d]# gluster peer status ## 查看对端节点信息
Number of Peers: 0
[root@zwb_node1 yum.repos.d]# gluster peer probe node2
peer probe: success.
[root@zwb_node1 yum.repos.d]# gluster peer probe node3
peer probe: success.
[root@zwb_node1 yum.repos.d]# gluster peer probe node4
根据规划创作如下的卷
卷名称 | 卷类型 | Brick |
dis-volume | 分布式卷 | node1(/data/sdb1)、node2(/data/sdb1) |
stripe-volume | 条带卷 | node1(/data/sdc1)、node2(/data/sdc1) |
rep-volume | 复制卷 | node3(/data/sdb1)、 node4(/data/sdb1) |
dis-stripe | 分布式条带卷 | node1 (/data/sdd1)、node2(/data/sdd1)、node3(/data/sdd1)、node4(/data/sdd1) |
dis-rep | 分布式复制卷 | node1(/data/sde1)、node2(/data/sde1)、node3(/data/sde1)、node4(/data/sde1) |
[root@node1 ~]# gluster volume create dis-volume node1:/data/sdb1 node2:/data/sdb1 force
##利用node1和node2上的两块磁盘创建;dis-vol为磁盘名;force表示强制
volume create: dis-vol: success: please start the volume to access data
[root@node1 ~]# gluster volume list ## 查看卷的列表
dis-volume
[root@node1 ~]# gluster volume start dis-vol ## 启动卷
volume start: dis-volume: success
[root@node1 ~]# gluster volume info ## 查看卷的信息
Volume Name: dis-volume
Type: Distribute
Volume ID: a231c7eb-d4fb-4a71-9c7f-4b3633a5f388
Status: Started
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdb1
Brick2: node2:/data/sdb1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 ~]# gluster volume create stripe-volume stripe 2 node1:/data/sdc1 node2:/data/sdc1 force
## #指定类型为stripe,数值为2,且后面跟了2个Brick server,所以创建的是条带卷
volume create: stripe-volume: success: please start the volume to access data
[root@node1 ~]# gluster volume list ## 查看列表
dis-volume
stripe-volume
[root@node1 ~]# gluster volume start stripe-volume ## 启动该条带卷
volume start: stripe-volume: success
[root@node1 ~]# gluster volume info stripe-volume ## 查看该条带卷信息
Volume Name: stripe-volume
Type: Stripe
Volume ID: 524c8429-88b1-42b9-b906-2f6b95c51699
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdc1
Brick2: node2:/data/sdc1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 ~]# gluster volume create rep-volume replica 2 node3:/data/sdb1 node4:/data/sdb1 force
### 指定类型为replica, 数值为2,且后面跟了2个Brick Server, 所以创建的是复制卷
volume create: rep-volume: success: please start the volume to access data
[root@node1 ~]# gluster volume list ## 查看列表
dis-volume
rep-volume
stripe-volume
[root@node1 ~]# gluster volume start rep-volume ## 开启该卷
volume start: rep-volume: success
[root@node1 ~]# gluster volume info rep-volume ## 查看该卷信息
Volume Name: rep-volume
Type: Replicate
Volume ID: f1a099fc-28df-406f-a210-dd017534e9a2
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node3:/data/sdb1
Brick2: node4:/data/sdb1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 ~]# gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 force
### 指定类型为stripe, 数值为2,而且后面跟了4个Brick Server,是2的两倍,所以创建的是分布式条带卷
volume create: dis-stripe: success: please start the volume to access data
[root@node1 ~]# gluster volume list ## 查看列表
dis-stripe
dis-volume
rep-volume
stripe-volume
[root@node1 ~]# gluster volume start dis-stripe ## 开启该卷
volume start: dis-stripe: success
[root@node1 ~]# gluster volume info dis-stripe ## 查看该卷详细信息
Volume Name: dis-stripe
Type: Distributed-Stripe
Volume ID: 8e3c7130-1580-4198-ad57-8cb3119c9b7d
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdd1
Brick2: node2:/data/sdd1
Brick3: node3:/data/sdd1
Brick4: node4:/data/sdd1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 ~]# gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force
## 指定类型为replica, 数值为2,而且后面跟了4个Brick Server, 是2的两倍,所以创建的是分布式复制卷
volume create: dis-rep: success: please start the volume to access data
[root@node1 ~]# gluster volume start dis-rep ## 开启该卷
volume start: dis-rep: success
[root@node1 ~]# gluster volume list ## 查看列表
dis-rep
dis-stripe
dis-volume
rep-volume
stripe-volume
[root@node1 ~]# gluster volume info dis-rep ## 查看该卷详细信息
Volume Name: dis-rep
Type: Distributed-Replicate
Volume ID: e36628ee-453d-495b-8cad-a66f6d48e377
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/data/sde1
Brick2: node2:/data/sde1
Brick3: node3:/data/sde1
Brick4: node4:/data/sde1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@zwb_client opt]# cd /etc/yum.repos.d/
[root@zwb_client yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentO
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo
[root@zwb_client yum.repos.d]# mkdir repo.bak
[root@zwb_client yum.repos.d]# mv *.repo repo.bak/
[root@zwb_client yum.repos.d]# ls
repo.bak
[root@zwb_client yum.repos.d]# vim gfs.repo ## 配置本地yum源
[gfs]
name=gfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
~
## 包安装包放到opt目录下
[root@zwb_client opt]# unzip gfsrepo.zip
[root@zwb_client yum.repos.d]# yum clean all
已加载插件:fastestmirror, langpacks
正在清理软件源: gfs
Cleaning up list of fastest mirrors
[root@zwb_client yum.repos.d]# yum makecache
已加载插件:fastestmirror, langpacks
Determining fastest mirrors
gfs | 2.9 kB 00:00:00
(1/3): gfs/filelists_db | 62 kB 00:00:00
(2/3): gfs/other_db | 46 kB 00:00:00
(3/3): gfs/primary_db | 92 kB 00:00:00
元数据缓存已建立
yum remove glusterfs-api.x86_64 glusterfs-cli.x86_64 glusterfs.x86_64 glusterfs-libs.x86_64 glusterfs-client-xlators.x86_64 glusterfs-fuse.x86_64
### 解除依赖环境
yum -y install glusterfs glusterfs-fuse glusterfs-server glusterfs-rdma
### 安装 gfs
[root@zwb_client opt]# systemctl enable glusterd.service --now ## 开启
Created symlink from /etc/systemd/system/multi-user.target.wants/glusterd.service to /usr/lib/systemd/system/glusterd.service.
[root@zwb_client opt]# mkdir -p /test/{dis,stripe,rep,dis_stripe,dis_rep}
[root@zwb_client opt]# ls /test/
dis dis_rep dis_stripe rep stripe
[root@zwb_client opt]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.159.68 node1
192.168.159.11 node2
192.168.159.13 node3
192.168.159.10 node4
临时挂载
mount.glusterfs node1:dis-volume /test/dis
mount.glusterfs node1:stripe-volume /test/stripe
mount.glusterfs node1:rep-volume /test/rep
mount.glusterfs node1:dis-stripe /test/dis_stripe
mount.glusterfs node1:dis-rep /test/dis_rep
df -Th
还可修改/etc/fstab进行永久挂载
[root@zwb_client ~]# mount.glusterfs node1:dis-volume /test/dis
[root@zwb_client ~]# mount.glusterfs node1:stripe-volume /test/stripe
[root@zwb_client ~]# mount.glusterfs node1:rep-volume /test/rep
[root@zwb_client ~]# mount.glusterfs node1:dis-stripe /test/dis_stripe
[root@zwb_client ~]# mount.glusterfs node1:dis-rep /test/dis_rep
[root@zwb_client ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sda3 xfs 15G 6.5G 8.6G 43% /
devtmpfs devtmpfs 895M 0 895M 0% /dev
tmpfs tmpfs 910M 0 910M 0% /dev/shm
tmpfs tmpfs 910M 11M 900M 2% /run
tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sdc1 xfs 8.0G 33M 8.0G 1% /data/sdc1
/dev/sdb1 xfs 8.0G 33M 8.0G 1% /data/sdb1
/dev/sda1 xfs 1014M 174M 841M 18% /boot
tmpfs tmpfs 182M 12K 182M 1% /run/user/42
tmpfs tmpfs 182M 0 182M 0% /run/user/0
node1:dis-volume fuse.glusterfs 8.0G 65M 8.0G 1% /test/dis
node1:stripe-volume fuse.glusterfs 8.0G 65M 8.0G 1% /test/stripe
node1:rep-volume fuse.glusterfs 4.0G 33M 4.0G 1% /test/rep
node1:dis-stripe fuse.glusterfs 16G 130M 16G 1% /test/dis_stripe
node1:dis-rep fuse.glusterfs 8.0G 65M 8.0G 1% /test/dis_rep
①、往卷中写入文件,在client端操作
[root@zwb_client ~]# dd if=/dev/zero of=/opt/demo1.log bs=1M count=20
记录了20+0 的读入
记录了20+0 的写出
20971520字节(21 MB)已复制,0.00895775 秒,2.3 GB/秒
[root@zwb_client ~]# dd if=/dev/zero of=/opt/demo2.log bs=1M count=20
记录了20+0 的读入
记录了20+0 的写出
20971520字节(21 MB)已复制,0.0249951 秒,839 MB/秒
[root@zwb_client ~]# dd if=/dev/zero of=/opt/demo3.log bs=1M count=20
记录了20+0 的读入
记录了20+0 的写出
20971520字节(21 MB)已复制,0.0540095 秒,388 MB/秒
[root@zwb_client ~]# dd if=/dev/zero of=/opt/demo4.log bs=1M count=20
记录了20+0 的读入
记录了20+0 的写出
20971520字节(21 MB)已复制,0.0539137 秒,389 MB/秒
[root@zwb_client ~]# dd if=/dev/zero of=/opt/demo5.log bs=1M count=20
记录了20+0 的读入
记录了20+0 的写出
20971520字节(21 MB)已复制,0.0572268 秒,366 MB/秒
[root@zwb_client ~]# ll /opt/
总用量 337624
-rw-r--r-- 1 root root 10783080 9月 1 11:48 apache-tomcat-9.0.16.tar.gz
-rw-r--r-- 1 root root 20971520 10月 10 23:14 demo1.log
-rw-r--r-- 1 root root 20971520 10月 10 23:15 demo2.log
-rw-r--r-- 1 root root 20971520 10月 10 23:15 demo3.log
-rw-r--r-- 1 root root 20971520 10月 10 23:15 demo4.log
-rw-r--r-- 1 root root 20971520 10月 10 23:15 demo5.log
②、把生成的demo{1-5}.log的五个文件存放到每个卷中
[root@zwb_client opt]# cp demo* /test/dis
[root@zwb_client opt]# cp demo* /test/stripe/
[root@zwb_client opt]# cp demo* /test/rep/
[root@zwb_client opt]# cp demo* /test/dis_stripe/
[root@zwb_client opt]# cp demo* /test/dis_rep/
③、查看复制情况
[root@zwb_client opt]# cd /test/
[root@zwb_client test]# ls *
dis:
demo1.log demo2.log demo3.log demo4.log demo5.log
dis_rep:
demo1.log demo2.log demo3.log demo4.log demo5.log
dis_stripe:
demo1.log demo2.log demo3.log demo4.log demo5.log
rep:
demo1.log demo2.log demo3.log demo4.log demo5.log
stripe:
demo1.log demo2.log demo3.log demo4.log demo5.log
node1节点
[root@node1 data]# ll -h /data/sdb1
总用量 80M
-rw-r--r-- 2 root root 20M 10月 10 23:23 demo1.log
-rw-r--r-- 2 root root 20M 10月 10 23:23 demo2.log
-rw-r--r-- 2 root root 20M 10月 10 23:23 demo3.log
-rw-r--r-- 2 root root 20M 10月 10 23:23 demo4.log
node2节点
[root@node2 ~]# ll -h /data/sdb1
总用量 20M
-rw-r--r--. 2 root root 20M 10月 10 23:23 demo5.log
node1节点
[root@node1 data]# ll -h /data/sdc1
总用量 50M ### 数据被分片50%(注意看-h显示的大小),没副本,没冗余
-rw-r--r-- 2 root root 10M 10月 10 23:23 demo1.log
-rw-r--r-- 2 root root 10M 10月 10 23:23 demo2.log
-rw-r--r-- 2 root root 10M 10月 10 23:23 demo3.log
-rw-r--r-- 2 root root 10M 10月 10 23:23 demo4.log
-rw-r--r-- 2 root root 10M 10月 10 23:23 demo5.log
node2节点
[root@node2 ~]# ll -h /data/sdc1
总用量 50M ### 数据被分片50%(注意看-h显示的大小),没副本,没冗余
-rw-r--r--. 2 root root 10M 10月 10 23:23 demo1.log
-rw-r--r--. 2 root root 10M 10月 10 23:23 demo2.log
-rw-r--r--. 2 root root 10M 10月 10 23:23 demo3.log
-rw-r--r--. 2 root root 10M 10月 10 23:23 demo4.log
-rw-r--r--. 2 root root 10M 10月 10 23:23 demo5.log
node3节点
[root@node3 ~]# ll -h /data/sdb1
总用量 100M ## 数据没有被分片,有副本,有冗余
-rw-r--r-- 2 root root 20M 10月 10 23:23 demo1.log
-rw-r--r-- 2 root root 20M 10月 10 23:23 demo2.log
-rw-r--r-- 2 root root 20M 10月 10 23:23 demo3.log
-rw-r--r-- 2 root root 20M 10月 10 23:23 demo4.log
-rw-r--r-- 2 root root 20M 10月 10 23:23 demo5.log
node4节点
[root@node4 ~]# ll -h /data/sdb1
总用量 100M ## 数据没有被分片,有副本,有冗余
-rw-r--r-- 2 root root 20M 10月 10 23:23 demo1.log
-rw-r--r-- 2 root root 20M 10月 10 23:23 demo2.log
-rw-r--r-- 2 root root 20M 10月 10 23:23 demo3.log
-rw-r--r-- 2 root root 20M 10月 10 23:23 demo4.log
-rw-r--r-- 2 root root 20M 10月 10 23:23 demo5.log
node1节点
[root@node1 data]# ll -h /data/sdd1
总用量 40M
-rw-r--r-- 2 root root 10M 10月 10 23:23 demo1.log
-rw-r--r-- 2 root root 10M 10月 10 23:23 demo2.log
-rw-r--r-- 2 root root 10M 10月 10 23:23 demo3.log
-rw-r--r-- 2 root root 10M 10月 10 23:23 demo4.log
node2节点
[root@node2 ~]# ll -h /data/sdd1
总用量 40M
-rw-r--r--. 2 root root 10M 10月 10 23:23 demo1.log
-rw-r--r--. 2 root root 10M 10月 10 23:23 demo2.log
-rw-r--r--. 2 root root 10M 10月 10 23:23 demo3.log
-rw-r--r--. 2 root root 10M 10月 10 23:23 demo4.log
node3节点
[root@node3 ~]# ll -h /data/sdd1
总用量 10M
-rw-r--r-- 2 root root 10M 10月 10 23:23 demo5.log
node4节点
[root@node4 ~]# ll -h /data/sdd1
总用量 10M
-rw-r--r-- 2 root root 10M 10月 10 23:23 demo5.log
node1节点
[root@node1 data]# ll -h /data/sde1
总用量 80M
-rw-r--r-- 2 root root 20M 10月 10 23:24 demo1.log
-rw-r--r-- 2 root root 20M 10月 10 23:24 demo2.log
-rw-r--r-- 2 root root 20M 10月 10 23:24 demo3.log
-rw-r--r-- 2 root root 20M 10月 10 23:24 demo4.log
node2节点
[root@node2 ~]# ll -h /data/sde1
总用量 80M
-rw-r--r--. 2 root root 20M 10月 10 23:24 demo1.log
-rw-r--r--. 2 root root 20M 10月 10 23:24 demo2.log
-rw-r--r--. 2 root root 20M 10月 10 23:24 demo3.log
-rw-r--r--. 2 root root 20M 10月 10 23:24 demo4.log
node3节点
[root@node3 ~]# ll -h /data/sde1
总用量 20M
-rw-r--r-- 2 root root 20M 10月 10 23:24 demo5.log
node4节点
[root@node4 ~]# ll -h /data/sde1
总用量 20M
-rw-r--r-- 2 root root 20M 10月 10 23:24 demo5.log
模拟node2节点宕机(挂起或者关机),再client端上查看几个卷是否正常
宕机方法:
在client端进行查看
[root@zwb_client test]# ls
dis dis_rep dis_stripe rep stripe
[root@zwb_client test]# ll -h dis ## 分布式卷
总用量 80M
-rw-r--r-- 1 root root 20M 10月 10 23:23 demo1.log
-rw-r--r-- 1 root root 20M 10月 10 23:23 demo2.log
-rw-r--r-- 1 root root 20M 10月 10 23:23 demo3.log
-rw-r--r-- 1 root root 20M 10月 10 23:23 demo4.log
[root@zwb_client test]# ll -h dis_rep ## 分布式复制卷
总用量 100M
-rw-r--r-- 1 root root 20M 10月 10 23:24 demo1.log
-rw-r--r-- 1 root root 20M 10月 10 23:24 demo2.log
-rw-r--r-- 1 root root 20M 10月 10 23:24 demo3.log
-rw-r--r-- 1 root root 20M 10月 10 23:24 demo4.log
-rw-r--r-- 1 root root 20M 10月 10 23:24 demo5.log
[root@zwb_client test]# ll -h dis_stripe/ ## 分布式条带卷
总用量 20M
-rw-r--r-- 1 root root 20M 10月 10 23:23 demo5.log
[root@zwb_client test]# ll -h rep/ ## 复制卷
总用量 100M
-rw-r--r-- 1 root root 20M 10月 10 23:23 demo1.log
-rw-r--r-- 1 root root 20M 10月 10 23:23 demo2.log
-rw-r--r-- 1 root root 20M 10月 10 23:23 demo3.log
-rw-r--r-- 1 root root 20M 10月 10 23:23 demo4.log
-rw-r--r-- 1 root root 20M 10月 10 23:23 demo5.log
[root@zwb_client test]# ll -h stripe/ ## 条带卷
总用量 0
①、查看所有GlusterFs卷
gluster volume list
②、查看所有卷的信息
gluster volume info
③、查看所有卷的状态
gluster volume status
④、停止一个卷
gluster volume stop dis-stripe
⑤、删除一个卷
注意:删除卷时,需要先停止卷,且信任池中不能有主机处于宕机状态,否则删除不成功gluster volume delete dis-stripe
⑥、设置卷的访问控制
1、仅拒绝gluster volume set dis-rep auth.allow 192.168.100.250
2、仅允许gluster volume set dis-rep auth.allow 192.168.100.*
设置192.168.100.0网段的所有IP地址都能访问dis-rep( 分布式复制卷)