GlusterFS分布式文件系统群集
一、GlusterFS概述
1.GlusterFS简介
GlusterFS 是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。GlusterFS 借助TCP/IP或InfiniBand RDMA网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据。GlusterFS 基于可堆叠的用户空间设计,可为各种不同的数据负载提供优异的性能。
2.GlusterFS特点
扩展性和高性能
- Scale-Out 架构允许通过简单地增加资源来提高存储容量和性能,磁盘、计算和I/O资源都可以独立增加,支持10GbE和InfiniBand等高速网络互联。
- Gluster 弹性哈希(Elastic Hash)解除了GlusterFS对元数据服务器的需求,消除了单点故障和性能瓶颈,真正实现了并行化数据访问。
高可用性
GlusterFS可以对文件进行自动复制,如镜像或多次复制,从而确保数据总是可以访问,甚至是在硬件故障的情况下也能正常访问。自我修复功能能够把数据恢复到正确的状态,而且修复是以增量的方式在后台执行,几乎不会产生性能负载。GlusterFS没有设计自己的私有数据文件格式,而是采用操作系统中主流标准的磁盘文件系统(如EXT3、ZFS)来存储文件,因此数据可以使用各种标准工具进行复制和访问。
全局统一命名空间
全局统一命名空间将所有的存储资源聚集成一个单一的虚拟存储池,对用户和应用屏蔽了物理存储信息。存储资源(类死于 LVM )可以根据生产环境中的需要进行弹性扩展或收缩。在多节点场景中,全局统一命名空间还可以基于不同节点做负载均衡,大大提升了存取效率。
弹性卷管理
GlusterFS 通过将数据储存在逻辑卷中,逻辑卷从逻辑存储池进行独立逻辑划分。逻辑存储池可以在线进行增加和移除,不会导致业务中断。
基于标准协议
Gluster存储服务支持NFS,、CIFS、HTTP、FTP以及Gluster原生协议,完全与POSIX标准兼容。现有应用程序不需要作任何修改或使用专用API,就可以对Gluster中的数据进行访问。这在公有云环境中部署Gluster时非常有用,Gluster对云服务提供商专用API进行抽象,然后提供标准POSIX接口。
3.GlusterFS术语
- Brick(存储块):指可信主机池中由主机提供的用于物理1存储的专用分区,是GlusterFS 中的基本存储单元,同时也是可信存储池中服务器上对外提供的存储目录。
- Volume(逻辑卷):一个逻辑卷是一组 Brick 的集合。卷是数据存储的逻辑设备,类似于 LVM 中的逻辑卷。大部分 Gluster 管理操作是在卷上进行的。
- FUSE(Filesystem in Userspace):是一个内核模块,允许用户创建自己的文件系统,无需修改内核代码。
- VFS:内核空间对用户空间提供的访问磁盘的接口。
- Glusterd(后台管理进程):在存储群集中的每个节点上都要运行。
4.模块化堆栈式架构
GlusterFS 采用模块化、堆栈式的架构,可以根据需求配置定制化的应用环境,通过对模块进行各种组合,即可实现复杂的功能。
例如 Replicate 模块可实现RAID 1,Stripe 模块可实现 RAID 0,通过两者的组合可实现RAID 10 和 RAID 01,同时获得更高的性能及可靠性。
GlusterFS 是模块化堆栈式的架构设计,模块称为 Translator,是 GlusterFS 提供的一种强大机制,借助这种良好定义的接口可以高效简便地扩展文件系统功能。
- 服务端与客户端的设计高度模块化的同时模块接口是兼容的,同一个 translator 可同时在客户端和服务器加载。
- GlusterFS 中所有的功能都是通过 translator 实现的,其中客户端要比服务端更复杂,所以功能的重点主要集中在客户端上。
二、GlusterFS工作原理
1.GlusterFS 工作流程
GlusterFS 的工作流程如下:
- 客户端或应用程序通过 GlusterFS 的挂载点访问数据。
- Linux 系统内核通过 VFSAPI 收到请求并处理。
- VFS将数据递交给FUSE内核文件系统,并向系统注册一个实际的文件系统FUSE, 而 FUSE 文件系统则是将数据通过/dev/fuse 设备文件递交给了 GlusterFS client 端。可以 将 FUSE 文件系统理解为一个代理。
- GlusterFS client 收到数据后,client 根据配置文件对数据进行处理。
- 经过 GlusterFS client 处理后,通过网络将数据传递至远端的 GlusterFS Server,并且将数据写入服务器存储设备。
2.弹性 HASH 算法
弹性 HASH 算法是 Davies-Meyer 算法的具体实现,通过 HASH 算法可以得到一个 32 位的整数范围的 hash 值,假设逻辑卷中有 N 个存储单位 Brick,则 32 位的整数范围将被划分为 N 个连续的子空间,每个空间对应一个 Brick。当用户或应用程序访问某一个命名空间时,通过对该命名空间计算 HASH 值,根据该 HASH 值所对应的 32 位整数空间定位数据所在的 Brick。
三、GlusterFS的卷类型
GlusterFS 支持七种卷,即分布式卷、条带卷、复制卷、分布式条带卷、分布式复制卷、条带复制卷和分布式条带复制卷,这七种卷可以满足不同应用对高性能、高可用的需求。
基本卷:
- 分布式卷(Distribute volume):文件通过 HASH 算法分布到所有 Brick Server 上,这种卷是 Glusterf 的基础;以文件为单位根据 HASH 算法散列到不同的 Brick,其实只是扩大了磁盘空间,如果有一块磁盘损坏,数据也将丢失,属于文件级的 RAID 0, 不具有容错能力。
- 条带卷(Stripe volume):类似 RAID0,文件被分成数据块并以轮询的方式分布到多个 Brick Server 上,文件存储以数据块为单位,支持大文件存储,文件越大,读取效率越高。
- 复制卷(Replica volume):将文件同步到多个 Brick 上,使其具备多个文件副本,属于文件级 RAID 1,具有容错能力。因为数据分散在多个 Brick 中,所以读性能得到很大提升,但写性能下降。
- 分布式条带卷(Distribute Stripe volume):Brick Server 数量是条带数(数据块分别的 Brick 数量)的倍数,兼具分布式卷和条带卷的特点。
- 分布式复制卷(Distribute Replica volume):Brick Server数量是镜像数(数据副本数量)的倍数,兼具分布式卷和复制卷的特点。
- 条带复制卷(Distribute Replica volume):类似 RAID 10,同时具有条带卷和复制卷的特点。
- 分布式条带复制卷(Distribute Stripe Replica volume):三种基本卷的复合卷,通常用于 Map Reduce 应用。
1.分布式卷
分布式卷是 GlusterFS 的默认卷,在创建卷时,默认选项是创建分布式卷。在该模式下,文件直接存储在某个 Server 节点上。直接使用本地文件系统进行文件存储,大部分Linux命令和工具可以继续正常使用。需要通过扩展文件属性保存保存 HASH 值,目前支持的底层文件系统有ext3、ext4、ZFS、XFS等。由于使用的是本地文件系统,所以存取效率并没有提高,反而会因为网络通信的原因而有所降低;另外支持超大型文件也会有一定的难度,因为分布式卷不会对文件进行分块处理。
分布式具有以下特点:
- 文件分布在不同的服务器,不具备冗余性。
- 更容易且廉价地扩展卷的大小。
- 存在单点故障会造成数据丢失。
- 依赖底层的数据保护。
2.条带卷
Stripe 模式相当于 RAID0,在该模式下,根据偏移量将文件分成 N 块(N个条带节点),轮询地存储在每个 Brick Server 节点。节点把每个数据块都作为普通文件存入本地文件系统中,通过扩展属性记录总块数(Stripe-count)和每块的序号(Stripe-index)。在配置时指定的条带数必须等卷中 Brick 所包含的存储服务器数,在存储大文件时,性能尤为突出,但是不具备冗余性。
条带卷具有以下特点:
- 数据被分割成了更小块分布到块服务器群中的不同条带区。
- 分布减少了负载且更小的文件加速了存取的速度。
- 没有数据冗余
3.复制卷
复制模式,也称为 AFR(AutoFile Replication),相当于RAID 1,即同一文件保存一份或多份副本,每个节点上保存相同的内容和目录结构。复制模式因为要保存副本,所以磁盘利用率较低。如果多节点上的存储空间不一致,那么将按照木桶效应取最低节点的容量作为该卷的总容量。在配置复制卷时,复制数必须等于卷中的 Brick 所包含的存储服务器数,复制卷具有冗余性,即使一个节点损坏,也不影响数据的正常使用。
复制卷具有以下特点:
- 卷中所有的服务器均保存一个完整的副本。
- 卷的副本数量可由客户创建的时候决定。
- 至少有两个块服务器或更多服务器。
- 具备冗余性。
4.分布式条带卷
分布式条带卷兼顾分布式卷和条带卷的功能,主要用于大文件访问处理,创建一个分布式条带卷最少需要 4 台服务器。
5.分布式复制卷
分布式复制卷兼顾分布式卷和复制卷的功能,主要用于需要冗余的情况下。
四、GlusterFS部署
1.准备工作
1)修改主机名,做hosts文件解析
按照刚才准备工作对应的主机名,分别对四台节点服务器进行以下相同操作
[root@localhost ~]# hostnamectl set-hostname node1
[root@localhost ~]# bash
[root@node1 ~]# echo '192.168.1.100 node1
192.168.1.110 node2
192.168.1.120 node3
192.168.1.130 node4' >> /etc/hosts
2)编辑脚本进行磁盘分区,并挂载
[root@node1 ~]# vim fdisk.sh
#!bin/bash
for disk in `fdisk -l |grep -o 'sd[b-z]'| uniq |awk 'BEGIN{ORS=" "} {print $0 }'`
do
echo "n
p
w"| fdisk /dev/$disk
mkfs.xfs -i size=512 /dev/${disk}"1" &> /dev/null
mkdir -p /data/${
disk}"1" &> /dev/null
echo -e "/dev/${disk}"1" /data/${disk}"1" xfs defaults 0 0\n" >> /etc/fstab
mount -a &> /dev/null
done
[root@node1 ~]# chmod +x fdisk.sh
[root@node1 ~]# ./fdisk.sh
[root@node1 ~]# df -hT
将脚本文件用scp命令传输到另外三台 node 服务器上
[root@node1 ~]# scp -r fdisk.sh root@192.168.1.110:/root/
----------
Are you sure you want to continue connecting (yes/no)? yes
----------
root@192.168.1.110's password: #输入对方账户密码
[root@node1 ~]# scp -r fdisk.sh root@192.168.1.120:/root/
[root@node1 ~]# scp -r fdisk.sh root@192.168.1.130:/root/
分别在另外三台 node 服务器执行该脚本
[root@node2 ~]# ./fdisk.sh
[root@node3 ~]# ./fdisk.sh
[root@node4 ~]# ./fdisk.sh
3)配置yum本地源,安装环境包
- gfsrepo文件:https://pan.baidu.com/s/19P8ReLY4fdVnrfYfVD9mnA
- 提取码:7unm
四台 node 服务器操作步骤一致:
[root@node1 ~]# cd /mnt/
上传gfsrepo文件夹相关软件到此目录
把之前的yum网络源的配置文件备份一下
[root@node1 mnt]# cd /etc/yum.repos.d/
[root@node1 yum.repos.d]# mkdir backup
[root@node1 yum.repos.d]# mv CentOS-* backup/
[root@node1 yum.repos.d]# ls
backup
安装重点!!!!
如果你是CentOS7命令行,按以下步骤安装:
[root@node1 yum.repos.d]# mount /dev/cdrom /media/cdrom #挂载光盘
[root@node1 yum.repos.d]# vi GLFS.repo
[GLFS]
name=glfs
baseurl=file:///media/cdrom
enable=1
gpgcheck=0
[root@node1 yum.repos.d]# yum -y install attr psmisc #安装依赖包
[root@node1 yum.repos.d]# vim GLFS.repo #编辑本地yum源
[GLFS]
name=glfs
baseurl=file:///mnt
enable=1
gpgcheck=0
[root@node1 yum.repos.d]# yum clean all #清空yum缓存
[root@node1 yum.repos.d]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
如果你是CentOS7图形化,按以下步骤安装:
因为CentOS7图形化默认已经安装了部分依赖包,版本比yum源的版本高,所以先将这些软件包卸载,再进行安装,否者会报错
[root@node1 yum.repos.d]# vim GLFS.repo #编辑本地yum源
[GLFS]
name=glfs
baseurl=file:///mnt
enable=1
gpgcheck=0
[root@node1 yum.repos.d]# yum clean all #清空yum缓存
[root@node1 ~]# yum -y remove glusterfs-client-xlators.x86_64 glusterfs glusterfs-libs #卸载依赖包
[root@node1 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma #安装gluster
四个节点都要安装,并启动
[root@node1 ~]# systemctl start glusterd #开启glusterd
[root@node1 ~]# systemctl enable glusterd #设置开机自启
4)配置时间同步
在node1上配置:
[root@node1 ~]# sed -i '/^server/s/^/#/g' /etc/ntp.conf
[root@node1 ~]# cat <<END >>/etc/ntp.conf
> server 127.127.1.0
> fudge 127.127.1.0 stratum 8
> END
[root@node1 ~]# systemctl restart ntpd
[root@node1 ~]# systemctl enable ntpd
在另外三台 node 上配置:
[root@node2 ~]# ntpdate 192.168.1.100
[root@node3 ~]# ntpdate 192.168.1.100
[root@node4 ~]# ntpdate 192.168.1.100
5)添加节点
在任意一台 node 服务器上配置即可,下面使用的是node1
[root@node1 ~]# gluster peer probe node1
peer probe: success. Probe on localhost not needed
[root@node1 ~]# gluster peer probe node2
peer probe: success.
[root@node1 ~]# gluster peer probe node3
peer probe: success.
[root@node1 ~]# gluster peer probe node4
peer probe: success.
如果出现以下错误说明 gluster 没开启
- peer probe: failed: Probe returned with 传输端点尚未连接
6)查看群集状态
- 正常状态:State: Peer in Cluster (Connected)
- 非正常状态:Disconnected ,考虑检查hosts文件
[root@node1 ~]# gluster peer status
Number of Peers: 3
Hostname: node2
Uuid: 3956bb61-22e6-4bda-b45b-9eb8c0874598
State: Peer in Cluster (Connected)
Hostname: node3
Uuid: 79c5eb67-2d08-40fe-a375-d41c500515b2
State: Peer in Cluster (Connected)
Hostname: node4
Uuid: a5469e3b-d31b-4268-b1fb-0a461d9804a6
State: Peer in Cluster (Connected)
2.创建卷
1)创建分布式卷
[root@node1 ~]# gluster volume create dis-volume node1:/data/sde1 node2:/data/sde1 force
volume create: dis-volume: success: please start the volume to access data
[root@node1 ~]# gluster volume info dis-volume #查看分布式卷信息
Volume Name: dis-volume
Type: Distribute
Volume ID: 92e42f94-bfd0-44a9-930e-df5e078e3049
Status: Created
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: node1:/data/sde1
Brick2: node2:/data/sde1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 ~]# gluster volume start dis-volume #启动分布式卷
volume start: dis-volume: success
2)创建条带卷
[root@node1 ~]# gluster volume create stripe-volume stripe 2 node1:/data/sdd1 node2:/data/sdd1 force
volume create: stripe-volume: success: please start the volume to access data
[root@node1 ~]# gluster volume info stripe-volume
Volume Name: stripe-volume
Type: Stripe
Volume ID: 6fb98b46-5832-4ead-afd1-edcb4c68bd8c
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdd1
Brick2: node2:/data/sdd1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 ~]# gluster volume start stripe-volume
volume start: stripe-volume: success
3)创建复制卷
[root@node1 ~]# gluster volume create rep-volume replica 2 node3:/data/sdd1 node4:/data/sdd11 force
volume create: rep-volume: success: please start the volume to access data
[root@node1 ~]# gluster volume info rep-volume
Volume Name: rep-volume
Type: Replicate
Volume ID: 76b61b85-db02-43ed-872b-9ce1908dd0b3
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node3:/data/sdd1
Brick2: node4:/data/sdd11
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 ~]# gluster volume start rep-volume
volume start: rep-volume: success
4)创建分布式条带卷
[root@node1 ~]# gluster volume create dis-stripe stripe 2 node1:/data/sdb1 node2:/data/sdb1 node3:/data/sdb1 node4:/data/sdb1 force
[root@node1 ~]# gluster volume info dis-stripe
volume create: dis-stripe: success: please start the volume to access data
Volume Name: dis-stripe
Type: Distributed-Stripe
Volume ID: 866cde7f-819c-47fb-8a05-f6aea47729c8
Status: Created
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdb1
Brick2: node2:/data/sdb1
Brick3: node3:/data/sdb1
Brick4: node4:/data/sdb1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 ~]# gluster volume start dis-stripe
volume start: dis-stripe: success
5)创建分布式复制卷
[root@node1 ~]# gluster volume create dis-rep replica 2 node1:/data/sdc1 node2:/data/sdc1 node3:/data/sdc1 node4:/data/sdc1 force
volume create: dis-rep: success: please start the volume to access data
[root@node1 ~]# gluster volume info dis-rep
Volume Name: dis-rep
Type: Distributed-Replicate
Volume ID: 202a9eaa-6317-4f62-b38b-e85f860d3773
Status: Created
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdc1
Brick2: node2:/data/sdc1
Brick3: node3:/data/sdc1
Brick4: node4:/data/sdc1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 ~]# gluster volume start dis-rep
volume start: dis-rep: success
3.部署Gluster客户端
增加一台Centos7机器来担任客户机:192.168.1.1
1)安装客户端软件
根据自身机器(图形化或命令行)来进行安装,安装步骤上面有
[root@localhost mnt]# yum -y install glusterfs glusterfs-fuse
2)创建挂载目录
[root@localhost mnt]# mkdir -p /test/{
dis,stripe,rep,dis_and_stripe,dis_and_rep}
[root@localhost mnt]# ls /test/
dis dis_and_rep dis_and_stripe rep stripe
3)修改hosts文件
[root@localhost mnt]# echo '192.168.1.100 node1
192.168.1.110 node2
192.168.1.120 node3
192.168.1.130 node4' >> /etc/hosts
4)挂载 Gluster 文件系统
[root@localhost mnt]# mount -t glusterfs node1:dis-volume /test/dis
[root@localhost mnt]# mount -t glusterfs node1:stripe-volume /test/stripe/
[root@localhost mnt]# mount -t glusterfs node1:rep-volume /test/rep/
[root@localhost mnt]# mount -t glusterfs node1:dis-stripe /test/dis_and_stripe/
[root@localhost mnt]# mount -t glusterfs node1:dis-rep /test/dis_and_rep/
[root@localhost mnt]# df -hT #查看挂载
5)设置开机自动挂载
[root@localhost mnt]# vi /etc/fstab
在最下面添加:
node1:dis-volume /test/dis glusterfs defaults,_netdev 0 0
node1:stripe-volume /test/stripe glusterfs defaults,_netdev 0 0
node1:rep-volume /test/rep glusterfs defaults,_netdev 0 0
node1:dis-stripe /test/dis_and_stripe glusterfs defaults,_netdev 0 0
node1:dis-rep /test/dis_and_rep glusterfs defaults,_netdev 0 0
4.测试Gluster文件系统
还是,在客户机192.168.1.1中操作,在这里写入,后面查看后台的分布情况
1)创建测试性文件
[root@localhost mnt]# dd if=/dev/zero of=/demo1.log bs=1M count=40
[root@localhost mnt]# dd if=/dev/zero of=/demo2.log bs=1M count=40
[root@localhost mnt]# dd if=/dev/zero of=/demo3.log bs=1M count=40
[root@localhost mnt]# dd if=/dev/zero of=/demo4.log bs=1M count=40
[root@localhost mnt]# dd if=/dev/zero of=/demo5.log bs=1M count=40
[root@localhost mnt]# ll -h /demo*
2)查看文件分布
在客户机192.168.1.1中复制, 复制到刚刚的挂载目录中,因为是挂载到本地使用的,其实是放在了后端的存储服务器中
[root@localhost mnt]# cp /demo* /test/dis
[root@localhost mnt]# cp /demo* /test/stripe
[root@localhost mnt]# cp /demo* /test/rep
[root@localhost mnt]# cp /demo* /test/dis_and_stripe
[root@localhost mnt]# cp /demo* /test/dis_and_rep
到节点node1至node4节点中查看
【1】查看分布式卷文件分布
[root@node1 ~]# ll -h /data/sde1
总用量 160M
-rw-r--r-- 2 root root 40M 11月 3 03:41 demo1.log
-rw-r--r-- 2 root root 40M 11月 3 03:41 demo2.log
-rw-r--r-- 2 root root 40M 11月 3 03:41 demo3.log
-rw-r--r-- 2 root root 40M 11月 3 03:41 demo4.log
大小没有变,没有demo5.log
[root@node2 ~]# ll -h /data/sde1
总用量 40M
-rw-r--r-- 2 root root 40M 11月 3 05:01 demo5.log
在node2这里,分布式成功
【2】查看条带卷文件分布
[root@node1 ~]# ll -lh /data/sdd1
总用量 100M
-rw-r--r-- 2 root root 20M 11月 3 03:42 demo1.log
-rw-r--r-- 2 root root 20M 11月 3 03:42 demo2.log
-rw-r--r-- 2 root root 20M 11月 3 03:42 demo3.log
-rw-r--r-- 2 root root 20M 11月 3 03:42 demo4.log
-rw-r--r-- 2 root root 20M 11月 3 03:42 demo5.log
数据变小了,被分片了,还是5个
[root@node2 ~]# ll -h /data/sdd1
总用量 100M
-rw-r--r-- 2 root root 20M 11月 3 05:01 demo1.log
-rw-r--r-- 2 root root 20M 11月 3 05:02 demo2.log
-rw-r--r-- 2 root root 20M 11月 3 05:02 demo3.log
-rw-r--r-- 2 root root 20M 11月 3 05:02 demo4.log
-rw-r--r-- 2 root root 20M 11月 3 05:02 demo5.log
【3】查看复制卷文件分布
[root@node3 ~]# ll -h /data/sdd1
总用量 200M
-rw-r--r-- 2 root root 40M 11月 3 05:02 demo1.log
-rw-r--r-- 2 root root 40M 11月 3 05:02 demo2.log
-rw-r--r-- 2 root root 40M 11月 3 05:04 demo3.log
-rw-r--r-- 2 root root 40M 11月 3 05:05 demo4.log
-rw-r--r-- 2 root root 40M 11月 3 05:06 demo5.log
大小没变,没有分片,复制卷
[root@node4 ~]# ll -h /data/sdd11
总用量 200M
-rw-r--r-- 2 root root 40M 11月 3 05:02 demo1.log
-rw-r--r-- 2 root root 40M 11月 3 05:02 demo2.log
-rw-r--r-- 2 root root 40M 11月 3 05:04 demo3.log
-rw-r--r-- 2 root root 40M 11月 3 05:05 demo4.log
-rw-r--r-- 2 root root 40M 11月 3 05:06 demo5.log
大小没变,没有分片,冗余上面的
【4】查看分布式条带卷文件分布
[root@node1 ~]# ll -h /data/sdb1
总用量 80M
-rw-r--r-- 2 root root 20M 11月 3 03:48 demo1.log
-rw-r--r-- 2 root root 20M 11月 3 03:48 demo2.log
-rw-r--r-- 2 root root 20M 11月 3 03:48 demo3.log
-rw-r--r-- 2 root root 20M 11月 3 03:48 demo4.log
分片了,然后还有分布,在后面
[root@node2 ~]# ll -h /data/sdb1
总用量 80M
-rw-r--r-- 2 root root 20M 11月 3 05:08 demo1.log
-rw-r--r-- 2 root root 20M 11月 3 05:08 demo2.log
-rw-r--r-- 2 root root 20M 11月 3 05:08 demo3.log
-rw-r--r-- 2 root root 20M 11月 3 05:08 demo4.log
分片了
[root@node3 ~]# ll -h /data/sdb1
总用量 20M
-rw-r--r-- 2 root root 20M 11月 3 05:09 demo5.log
分布,并且分片
[root@node4 ~]# ll -h /data/sdb1
总用量 20M
-rw-r--r-- 2 root root 20M 11月 3 05:09 demo5.log
分布,分片
【5】查看分布式复制卷文件分布
[root@node1 ~]# ll -h /data/sdc1
总用量 160M
-rw-r--r-- 2 root root 40M 11月 3 03:49 demo1.log
-rw-r--r-- 2 root root 40M 11月 3 03:49 demo2.log
-rw-r--r-- 2 root root 40M 11月 3 03:50 demo3.log
-rw-r--r-- 2 root root 40M 11月 3 03:50 demo4.log
大小没变,5.log没有在后面,分布
[root@node2 ~]# ll -h /data/sdc1
总用量 160M
-rw-r--r-- 2 root root 40M 11月 3 05:09 demo1.log
-rw-r--r-- 2 root root 40M 11月 3 05:09 demo2.log
-rw-r--r-- 2 root root 40M 11月 3 05:09 demo3.log
-rw-r--r-- 2 root root 40M 11月 3 05:10 demo4.log
大小没变,冗余上面的1~4.log
[root@node3 ~]# ll -h /data/sdc1
总用量 40M
-rw-r--r-- 2 root root 40M 11月 3 05:11 demo5.log
分布了,5.log大小没变
[root@node4 ~]# ll -h /data/sdc1
总用量 40M
-rw-r--r-- 2 root root 40M 11月 3 05:11 demo5.log
冗余,上面5.log
3)破坏测试
挂起node2节点,在client 192.168.1.1中观察数据是否还完整
[root@localhost mnt]# ls /test/
dis dis_and_rep dis_and_stripe rep stripe
[root@localhost mnt]# ll -h /test/dis/ #测试分布式卷
总用量 160M
-rw-r--r-- 1 root root 40M 11月 3 16:06 demo1.log
-rw-r--r-- 1 root root 40M 11月 3 16:06 demo2.log
-rw-r--r-- 1 root root 40M 11月 3 16:06 demo3.log
-rw-r--r-- 1 root root 40M 11月 3 16:06 demo4.log
1~4都在node1,5.log分布卷在node2中,node2被挂起;得出分布式卷不具备冗余性
[root@localhost mnt]# ll -h /test/dis_and_rep/ #测试分布式复制卷
总用量 200M
-rw-r--r-- 1 root root 40M 11月 3 16:07 demo1.log
-rw-r--r-- 1 root root 40M 11月 3 16:07 demo2.log
-rw-r--r-- 1 root root 40M 11月 3 16:07 demo3.log
-rw-r--r-- 1 root root 40M 11月 3 16:07 demo4.log
-rw-r--r-- 1 root root 40M 11月 3 17:27 demo5.log
node2的1`4.log中的数据在node1中有备份,然后其它在node3与node4中;具有冗余性
[root@localhost mnt]# ll -h /test/dis_and_stripe/ #测试分布式条带卷
总用量 40M
-rw-r--r-- 1 root root 40M 11月 3 17:27 demo5.log
因为1~4.log被分片,一半在node2中,所以看不到;而5.log是node3~4中放着也被分片了,所以可以看到
[root@localhost mnt]# ll -h /test/rep/ #测试复制卷
总用量 200M
-rw-r--r-- 1 root root 40M 11月 3 17:26 demo1.log
-rw-r--r-- 1 root root 40M 11月 3 17:26 demo2.log
-rw-r--r-- 1 root root 40M 11月 3 17:26 demo3.log
-rw-r--r-- 1 root root 40M 11月 3 17:26 demo4.log
-rw-r--r-- 1 root root 40M 11月 3 17:26 demo5.log
因为node4复制卷中的数据,node3中有备份,所以不会丢失,有冗余性
[root@localhost mnt]# ll -h /test/stripe/ #测试条带卷
总用量 0
因为数据被分片,另一半在node2中,导致无法看到
- 可以看到除了复制卷和分布式复制卷,其他的数据都不再完整。
继续挂起 node4 节点,node2节点还是挂起状态不变
[root@localhost mnt]# ll -h /test/rep/ #测试复制卷
总用量 200M
-rw-r--r-- 1 root root 40M 11月 3 17:26 demo1.log
-rw-r--r-- 1 root root 40M 11月 3 17:26 demo2.log
-rw-r--r-- 1 root root 40M 11月 3 17:26 demo3.log
-rw-r--r-- 1 root root 40M 11月 3 17:26 demo4.log
-rw-r--r-- 1 root root 40M 11月 3 17:27 demo5.log
因为node4复制卷中的数据,node3中有备份,所以不会丢失,有冗余性
[root@localhost mnt]# ll -h /test/dis_and_stripe/ #测试分布式条带卷
总用量 0
因为node4中有5.log另一半文件,node4挂起所以5.log也不能被访问了,没有冗余性
[root@localhost mnt]# ll -h /test/dis_and_rep/ #测试分布式复制卷
总用量 200M
-rw-r--r-- 1 root root 40M 11月 3 16:07 demo1.log
-rw-r--r-- 1 root root 40M 11月 3 16:07 demo2.log
-rw-r--r-- 1 root root 40M 11月 3 16:07 demo3.log
-rw-r--r-- 1 root root 40M 11月 3 16:07 demo4.log
-rw-r--r-- 1 root root 40M 11月 3 17:27 demo5.log
虽然node2和node4都挂起了,node2的数据在node1有备份,node4的数据在node3中有备份,具有冗余性
五、其他的维护命令
将挂起的 node2 与 node4 恢复状态
1.查看GlusterFS卷
1)查看卷的列表
[root@node1 ~]# gluster volume list
dis-rep
dis-stripe
dis-volume
rep-volume
stripe-volume
2)查看所有卷的信息
[root@node1 ~]# gluster volume info
Volume Name: dis-rep #卷名称
Type: Distributed-Replicate
Volume ID: 9708e5cd-a64e-4865-971c-aac5c9b685da
Status: Started #状态:启用
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdc1 #群集节点
Brick2: node2:/data/sdc1 #群集节点
Brick3: node3:/data/sdc1 #群集节点
Brick4: node4:/data/sdc1 #群集节点
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
---------------------
3)查看卷的状态
[root@node1 ~]# gluster volume status
2.停止、删除卷
[root@node1 ~]# gluster volume stop dis-volume #停止卷
Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y
volume stop: dis-volume: success
[root@node1 ~]# gluster volume delete dis-volume #删除卷,(前提需要停止卷)
Deleting volume will erase all information about the volume. Do you want to continue? (y/n) y
volume delete: dis-volume: success
3.设置卷的访问控制
只允许 192.168.1.0 网段客户机访问 dis-stripe 卷
[root@node1 ~]# gluster volume set dis-stripe auth.allow 192.168.1.*
volume set: success