- GlusterFS简介
- GlusterFS的卷类型
- 实操
- 一、配置GFS节点服务器
- 1.首先编写一个文件系统格式化、挂载的脚本,给每台服务器新增磁盘格式化
- 2.每台节点都设置主机名,方便管理,并设置好映射关系(4个节点都做)
- 3.搭建yum源,因为版本原因,建议不直接用线网源,找到对应版本安装(4个节点都做)
- 4.安装gluster服务器,并设时间同步(4个节点都做)
- 添加另外三台到存储信任池(只需要在其中一个节点做即可,另外三个自动匹配)
- 5.制作分布式卷
- 6.创建条带卷
- 7.创建复制卷
- 8.创建分布式条带卷
- 9.创建分布式复制卷
- 10.查看卷列表
- 11.其他操作:
- 二、客户端挂载测试
- 1.安装相关软件包并做主机映射
- 2.创建挂载目录并挂载
- 3.查看挂载信息
- 三、测试各类型卷
- 1.在客户机创建5个测试文件,每个大小为40M
- 2.分别拷贝到5个不同的挂载点中
- 3.查看验证
GlusterFS简介
- 开源的分布式文件系统
- 由存储服务器、客户端以及NFS/Samba存储网关组成
- 无元数据服务器
-
GlusterFS 特点:
♢ 扩展性和高性能;
♢ 高可用性;
♢ 全局统一命名空间;
♢ 弹性卷管理;
♢ 基于标准协议
-
模块化堆栈架构:**
♢ 模块化,堆栈式结构;
♢通过对模块的组合,实现复杂的功能;
-
CentOS6.0以下使用的是EXT4文件系统,CentOS7.0使用的是xfs格式
-
RDMA协议的优势是去中心化,没有唯一的管理master,每台服务器协同管理
- GFS的工作流程:
(1)客户端或应用程序通过GlusterFS的挂载点访问数据
(2)VFS将文件递交给FUSE内核文件系统,fuse文件系统则是将数据通过/dev/fuse设备文件递交给了GlusterFS client端
(3)GlusterFS client 收到数据后,client根据配置文件的配置对数据进行处理
(4) 通过网络将数据传递至远端的GlusterFS server,并且将数据写入到服务器存储设备上
- 弹性 HASH 算法:
♦ 通过 HASH 算法得到一个32位的整数;
♦ 划分为 N 个连接的子空间,每个空间对应一个 Brick(块节点);
弹性 HASH 算法的优点:
♦ 保证数据平均分布在每一个 Brick 中;
♦ 解决了对元数据服务器的依赖,进而解决了单点故障以及服访问瓶颈。
弹性HASH算法会将文件分配到各个节点存储中,用户访问文件时,通过计算文件的HASH值,得到对应的brick存储空间,组合起来获得完整的文件
GlusterFS的卷类型
- 分布式卷
- 条带卷
- 复制卷
- 分布式条带卷
- 分布式复制卷
- 条带复制卷
- 分布式条带复制卷
1.分布式卷
- 没有对文件进行分块处理
- 通过扩展文件属性保存HASH值
- 支持的底层文件系统有EXT3、EXT4、ZFS、xFS等
分布式卷的特点
- 文件分布在不同的服务器,不具备冗余性- 更容易和廉价地扩展卷的大小
- 单点故障会造成数据丢失
- 依赖底层的数据保护
创建分布式卷的命令格式:
gluster volume create 卷名 节点1@文件系统 节点2@文件系统 ……
2.条带卷
- 根据偏移量将文件分为 N 块(N个条带节点),轮询的存储在每个 Brick (2)Server 节点;
- 存储大文件时,性能尤为突出;
- 不具备冗余性,类似 raid0
条带卷的特点:
(1)数据被分割成更小块分布到块服务器群中的不同条带区;(2)分布减少了负载且更小的文件加速了存取的速度;
(3)没有数据冗余
创建条带卷的命令格式:
gluster volume create 卷名 stripe 条带数 节点1@文件系统 节点2@文件系统 ……
3. 复制卷:
(1)同一个文件保存一份或多分副本;
(2)复制模式因为要保存副本,所以磁盘利用率较低;
(3)多个节点上的存储空间不一致,那么将安装木桶效应取最低节点的容量(4)作为该卷的总容量
复制卷的特点:
(1)卷中所有的服务器均保存一个完整的副本;(2)卷的副本数量可由客户创建的时候决定;
(3)至少由两个块服务器或更多服务器;
(4)具备容灾冗余性。
创建复制卷的命令格式:
gluster volume create 卷名 replica 2 transport tcp 节点1@文件系统 节点2@文件系统 ……
4.分布式条带卷:
(1)兼顾分布式和条带卷的功能;
(2)主要用于大文件访问处理;
(3)至少最少需要 4 台服务器。
创建分布式条带卷命令格式:
gluster volume create 卷名 stripe 2 transport tcp 节点1@文件系统 节点2@文件系统 节点3@文件系统 节点4@文件系统 …………
注意,创建分布式条带卷,服务器数目是条带数的倍数(至少两倍)
5.分布式复制卷:
(1)兼顾分布式卷和复制卷的功能;
(2)用于需要冗余的情况下
创建分布式复制卷的命令格式:
gluster volume create 卷名 replica 2 transport tcp 节点1@文件系统 节点2@文件系统 节点3@文件系统 节点4@文件系统 ……
注意,创建分布式条带卷,服务器数目是条带数的倍数(至少两倍)
实操
一、配置GFS节点服务器
1.首先编写一个文件系统格式化、挂载的脚本,给每台服务器新增磁盘格式化
#!/bin/bash
for V in $(ls /dev/sd[b-z])
do
echo -e "n\np\n\n\n\nw\n" |fdisk $V
mkfs.xfs -i size=512 ${V}1 &>/dev/null
sleep 1
M=$(echo "$V" |awk -F "/" '{print $3}')
mkdir -p /data/${M}1 &>/dev/null
echo -e "${V}1 /data/${M}1 xfs defaults 0 0\n" >>/etc/fstab
mount -a &>/dev/null
done
2.每台节点都设置主机名,方便管理,并设置好映射关系(4个节点都做)
[root@localhost ~]# hostnamectl set-hostname node1
[root@localhost ~]# su
[root@node1 ~]# vi /etc/hosts ##设置主机映射关系
192.168.10.50 node1
192.168.10.20 node2
192.168.10.80 node3
192.168.10.90 node4
[root@node1 ~]# scp /etc/hosts 192.168.10.20:/etc/hosts ##将hosts文件拷贝到其他节点直接用
root@192.168.10.20's password:
hosts 100% 238 153.7KB/s 00:00
[root@node1 ~]# scp /etc/hosts 192.168.10.80:/etc/hosts
root@192.168.10.80's password:
hosts 100% 238 121.3KB/s 00:00
[root@node1 ~]# scp /etc/hosts 192.168.10.90:/etc/hosts
root@192.168.10.90's password:
hosts 100% 238 125.2KB/s 00:00 、
3.搭建yum源,因为版本原因,建议不直接用线网源,找到对应版本安装(4个节点都做)
[root@node1 ~]# cd /etc/yum.repos.d/
[root@node1 yum.repos.d]# mv C* backup/
[root@node1 yum.repos.d]# ls
backup GLFS.repo
[root@node1 yum.repos.d]# vi GLFS.repo
[GLFS]
name=glfs
baseurl=http://mirror.centos.org/centos/$releasever/storage/$basearch/gluster-3.12/
gpgcheck=0
enabled=1
4.安装gluster服务器,并设时间同步(4个节点都做)
[root@node1 ~]# yum -y install glusterfs glusterfs-fuse glusterfs-rdma
[root@node1 ~]# yum install glusterfs-server
[root@node2 ~]# systemctl enable glusterd
[root@node2 ~]# systemctl start glusterd
[root@node2 ~]# systemctl status glusterd
● glusterd.service - GlusterFS, a clustered file-system server
Loaded: loaded (/usr/lib/systemd/system/glusterd.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2020-10-25 16:45:14 CST; 27s ago
Docs: man:glusterd(8)
Process: 20851 ExecStart=/usr/sbin/glusterd -p /var/run/glusterd.pid --log-level $LOG_LEVEL $GLUSTERD_OPTIONS (code=exited,
……省略部分
[root@node1 ~]# ntpdate ntp1.aliyun.com
添加另外三台到存储信任池(只需要在其中一个节点做即可,另外三个自动匹配)
##########这里以node1为例#####################
[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.
[root@node1 ~]# gluster peer status ##查看分布式存储邻居状态,会显示其他三个节点
Number of Peers: 3 ##邻居数为3
Hostname: node2
Uuid: e2fa0219-8f8f-4646-b705-2b530a675448
State: Peer in Cluster (Connected)
Hostname: node3
Uuid: 7cd3220e-1fd8-480f-9687-ac1ff84b9ce7
State: Peer in Cluster (Connected)
Hostname: node4
Uuid: b36bcf1d-b224-48da-bd40-b2721adb55d4
State: Peer in Cluster (Connected)
5.制作分布式卷
[root@node1 ~]# gluster volume create dis-vol node1:/data/sdb1 node2:/data/sdb1 force
volume create: dis-vol: success: please start the volume to access data
[root@node1 ~]# gluster volume list ##查看虚拟卷列表,可以看到刚刚建立的分布式卷
dis-vol
[root@node1 ~]# gluster volume info dis-vol ##检查分布式卷的信息
Volume Name: dis-vol
Type: Distribute
Volume ID: 76584c83-81af-4048-beca-38f73a802c2f
Status: Created ##这时候是刚刚创建的初始状态,还未启动
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
storage.fips-mode-rchecksum: on
nfs.disable: on
[root@node1 ~]# gluster volume start dis-vol ##启动分布式卷
volume start: dis-vol: success
[root@node1 ~]# gluster volume info dis-vol
Volume Name: dis-vol
Type: Distribute
Volume ID: 76584c83-81af-4048-beca-38f73a802c2f
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
storage.fips-mode-rchecksum: on
nfs.disable: on
[root@node1 ~]# gluster volume status ##可以查看详细状态,包括PID号
Status of volume: dis-vol
Gluster process TCP Port RDMA Port Online Pid
‘------------------------------------------------------------------------------'
Brick node1:/data/sdb1 49152 0 Y 23046
Brick node2:/data/sdb1 49152 0 Y 22414
Task Status of Volume dis-vol
'------------------------------------------------------------------------------'
There are no active volume tasks
6.创建条带卷
[root@node4 ~]# gluster volume create stripe-vol stripe 2 node1:/data/sdc1 node2:/data/sdc1 force ##创建条带卷
volume create: stripe-vol: success: please start the volume to access data
[root@node4 ~]# gluster volume start stripe-vol ##启动条带卷
volume start: stripe-vol: success
[root@node4 ~]# gluster volume info stripe-vol ##查看信息
Volume Name: stripe-vol
Type: Stripe ##类型为条带卷
Volume ID: fe295188-8b4e-4af3-8e01-c976aae78219
Status: Started ##启动状态
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2 ##条带卷*2
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdc1
Brick2: node2:/data/sdc1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
7.创建复制卷
[root@node4 ~]# gluster volume create rep-vol replica 2 node3:/data/sdb1 node4:/data/sdb1 force ##创建复制卷
volume create: rep-vol: success: please start the volume to access data
[root@node4 ~]# gluster volume start rep-vol ##启动复制卷
volume start: rep-vol: success
[root@node4 ~]# gluster volume info rep-vol
Volume Name: rep-vol
Type: Replicate ##类型为复制卷
Volume ID: 4c543697-e4dd-41a3-a6e8-a15232fc2441
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2 ##复制卷*2
Transport-type: tcp
Bricks:
Brick1: node3:/data/sdb1
Brick2: node4:/data/sdb1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
8.创建分布式条带卷
[root@node4 ~]# gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 force ##创建分布式条带卷,(不能少于4个文件系统)
volume create: dis-stripe: success: please start the volume to access data
[root@node4 ~]# gluster volume start dis-stripe
volume start: dis-stripe: success
[root@node4 ~]# gluster volume info dis-stripe
Volume Name: dis-stripe
Type: Distributed-Stripe ##类型为分布卷 — 条带卷
Volume ID: 6e67b6ec-b1a7-407f-96dd-63c591aab737
Status: Started ##启动状态
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4 ##分布卷*2 + 条带卷*2
Transport-type: tcp ##传输协议是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
9.创建分布式复制卷
[root@node4 ~]# gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force ##创建分布式复制卷(同样不能少于4)
volume create: dis-rep: success: please start the volume to access data
[root@node4 ~]# gluster volume start dis-rep
volume start: dis-rep: success
[root@node4 ~]# gluster volume info dis-rep ##查看信息
Volume Name: dis-rep
Type: Distributed-Replicate ##类型为分布式复制卷
Volume ID: d5697f48-3ded-4f4e-b499-c3dd08a247c8
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4 ##分布卷*2 + 复制卷*2
Transport-type: tcp ##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
performance.client-io-threads: off
10.查看卷列表
[root@node1 ~]# gluster volume list ##可以查看到建立的五个卷
dis-rep
dis-stripe
dis-vol
rep-vol
stripe-vol
11.其他操作:
1、删除卷(先停止,再删除):
gluster volume stop 卷名
gluster volume delete 卷名
2、黑白名单设置:
gluster volume set 卷名 auth.reject 192.168.220.100 //拒绝某台主机挂载
gluster volume set 卷名 auth.allow 192.168.220.100 //允许某台主机挂载
二、客户端挂载测试
1.安装相关软件包并做主机映射
[root@localhost ~]# yum -y install glusterfs glusterfs-fuse ##安装这两个软件,支持gluster挂载
[root@localhost ~]# vi /etc/hosts ##先给几个节点添加主机名映射
192.168.10.50 node1
192.168.10.20 node2
192.168.10.80 node3
192.168.10.90 node4
2.创建挂载目录并挂载
###挂载分布卷
[root@localhost ~]# mkdir -p /test/dis
[root@localhost ~]# mount.glusterfs node1:dis-vol /test/dis/
###挂载条带卷
[root@web yum.repos.d]# mkdir -p /test/stripe
[root@web yum.repos.d]# mount.glusterfs node1:stripe-vol /test/stripe/
###挂载复制卷
[root@web yum.repos.d]# mkdir /test/rep
[root@web yum.repos.d]# mount.glusterfs node3:rep-vol /test/rep/
###挂载分布式条带卷
[root@web yum.repos.d]# mkdir /test/dis-str
[root@web yum.repos.d]# mount.glusterfs node2:dis-stripe /test/dis-str/
###挂载分布式复制卷
[root@web yum.repos.d]# mkdir /test/dis-rep
[root@web yum.repos.d]# mount.glusterfs node4:dis-rep /test/dis-rep/
3.查看挂载信息
[root@web yum.repos.d]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
……省略部分
node1:dis-vol fuse.glusterfs 40G 65M 40G 1% /test/dis
node1:stripe-vol fuse.glusterfs 40G 65M 40G 1% /test/stripe
node3:rep-vol fuse.glusterfs 20G 33M 20G 1% /test/rep
node2:dis-stripe fuse.glusterfs 80G 130M 80G 1% /test/dis-str
node4:dis-rep fuse.glusterfs 40G 65M 40G 1% /test/dis-rep
挂载信息总结: 分布式、条带式、分布条带式卷可用空间为各个磁盘空间的总和,而复制卷和分布式复制卷的可用空间大小为空间的一半,但是安全性更高
三、测试各类型卷
1.在客户机创建5个测试文件,每个大小为40M
[root@web ~]# dd if=/dev/zero of=/demo1.log bs=1M count=40
[root@web ~]# dd if=/dev/zero of=/demo2.log bs=1M count=40
[root@web ~]# dd if=/dev/zero of=/demo3.log bs=1M count=40
[root@web ~]# dd if=/dev/zero of=/demo4.log bs=1M count=40
[root@web ~]# dd if=/dev/zero of=/demo5.log bs=1M count=40
[root@web ~]# ls /demo*
/demo1.log /demo2.log /demo3.log /demo4.log /demo5.log
2.分别拷贝到5个不同的挂载点中
[root@web ~]# cp /demo* /test/dis
[root@web ~]# cp /demo* /test/stripe
[root@web ~]# cp /demo* /test/rep
[root@web ~]# cp /demo* /test/dis-str
[root@web ~]# cp /demo* /test/dis-rep
3.查看验证
(1)验证分布式卷
[root@node1 ~]# ll -h /data/sdb1/ ##查看node1节点
total 160M
-rw-r--r--. 2 root root 40M Oct 28 01:54 demo1.log
-rw-r--r--. 2 root root 40M Oct 28 01:54 demo2.log
-rw-r--r--. 2 root root 40M Oct 28 01:54 demo3.log
-rw-r--r--. 2 root root 40M Oct 28 01:54 demo4.log
[root@node2 ~]# ll -h /data/sdb1/ ##查看node2节点
total 40M
-rw-r--r-- 2 root root 40M Oct 27 23:46 demo5.log
You have new mail in /var/spool/mail/root
总结:分布式卷中文件以完整的文件形式存放在各个节点中,每个节点存放一部分文件
(2)测试条带卷
[root@node1 ~]# ll -h /data/sdc1 ##查看节点1中的文件,只有20M
total 101M
-rw-r--r--. 2 root root 20M Oct 28 01:54 demo1.log
-rw-r--r--. 2 root root 20M Oct 28 01:54 demo2.log
-rw-r--r--. 2 root root 20M Oct 28 01:54 demo3.log
-rw-r--r--. 2 root root 20M Oct 28 01:54 demo4.log
-rw-r--r--. 2 root root 20M Oct 28 01:54 demo5.log
[root@node2 ~]# ll -h /data/sdc1 ##在查看节点2中的文件
total 101M
-rw-r--r--. 2 root root 20M Oct 28 01:54 demo1.log
-rw-r--r--. 2 root root 20M Oct 28 01:54 demo2.log
-rw-r--r--. 2 root root 20M Oct 28 01:54 demo3.log
-rw-r--r--. 2 root root 20M Oct 28 01:54 demo4.log
-rw-r--r--. 2 root root 20M Oct 28 01:54 demo5.log
总结,条带卷中每个文件被拆成N(条带数)个部分,分别存放在不同节点中,每个节点都只存放文件的1/N
(3)测试复制卷
[root@node3 ~]# ll -h /data/sdb1 ##查看节点3
total 200M
-rw-r--r--. 2 root root 40M Oct 28 00:41 demo1.log
-rw-r--r--. 2 root root 40M Oct 28 00:41 demo2.log
-rw-r--r--. 2 root root 40M Oct 28 00:41 demo3.log
-rw-r--r--. 2 root root 40M Oct 28 00:41 demo4.log
-rw-r--r--. 2 root root 40M Oct 28 00:41 demo5.log
[root@node4 ~]# ll -h /data/sdb1 ##查看节点4
total 200M
-rw-r--r--. 2 root root 40M Oct 28 00:41 demo1.log
-rw-r--r--. 2 root root 40M Oct 28 00:41 demo2.log
-rw-r--r--. 2 root root 40M Oct 28 00:41 demo3.log
-rw-r--r--. 2 root root 40M Oct 28 00:41 demo4.log
-rw-r--r--. 2 root root 40M Oct 28 00:41 demo5.log
总结:在复制卷中,每个文件会以备份的形式存放在各个节点中,每个节点都有一套完整的文件
(4)测试分布式条带卷
[root@node1 ~]# ll -h /data/sdd1 ##查看节点1
total 81M
-rw-r--r--. 2 root root 20M Oct 28 01:54 demo1.log
-rw-r--r--. 2 root root 20M Oct 28 01:54 demo2.log
-rw-r--r--. 2 root root 20M Oct 28 01:54 demo3.log
-rw-r--r--. 2 root root 20M Oct 28 01:54 demo4.log
[root@node2 ~]# ll -h /data/sdd1 ##查看节点2
total 80M
-rw-r--r-- 2 root root 20M Oct 27 23:46 demo1.log
-rw-r--r-- 2 root root 20M Oct 27 23:46 demo2.log
-rw-r--r-- 2 root root 20M Oct 27 23:46 demo3.log
-rw-r--r-- 2 root root 20M Oct 27 23:46 demo4.log
[root@node3 ~]# ll -h /data/sdd1 ##查看节点3
total 21M
-rw-r--r--. 2 root root 20M Oct 28 00:41 demo5.log
[root@node4 ~]# ll -h /data/sdd1 ##查看节点4
total 21M
-rw-r--r--. 2 root root 20M Oct 28 00:41 demo5.log
总结:分布式条带卷先以分布式卷的形式,两两一组,保存完整的文件,再对各组的文件进行条带式拆分存储,将组内的文件分成两部分存在组内的服务器上,即一个组内的两台服务器存放的文件可以组成一部分完整的文件,另一组同理,两个组各自持有的那部分文件相加就是完全完整的文件
(5)分布式复制卷
[root@node1 ~]# ll -h /data/sde1 ##查看节点1
total 160M
-rw-r--r--. 2 root root 40M Oct 28 02:27 demo1.log
-rw-r--r--. 2 root root 40M Oct 28 02:27 demo2.log
-rw-r--r--. 2 root root 40M Oct 28 02:27 demo3.log
-rw-r--r--. 2 root root 40M Oct 28 02:27 demo4.log
[root@node2 ~]# ll -h /data/sde1 ##查看节点2
total 160M
-rw-r--r-- 2 root root 40M Oct 28 00:20 demo1.log
-rw-r--r-- 2 root root 40M Oct 28 00:20 demo2.log
-rw-r--r-- 2 root root 40M Oct 28 00:20 demo3.log
-rw-r--r-- 2 root root 40M Oct 28 00:20 demo4.log
[root@node3 ~]# ll -h /data/sde1 ##查看节点3
total 40M
-rw-r--r--. 2 root root 40M Oct 28 01:15 demo5.log
[root@node4 ~]# ll -h /data/sde1 ##查看节点4
total 40M
-rw-r--r--. 2 root root 40M Oct 28 01:15 demo5.log