一、GlusterFS概述
1.1 GlusterFS简介
1.2 GlusterFS特点
-
扩展性和高性能 -
高可用性 -
全局统一命名空间 -
弹性卷管理 -
基于标准协议 -
无元数据服务器
1.3 GlusterFS术语
-
Brick( 存储块): 指可信主机池中由主机提供的用于物理存储的专用分区, 是 GlusterFS 中的基本存储单元,同时也是可信存储池中服务器上对外提供的存储目录。存储目录的格式由服务器和目录的绝对路径构成,表示方法为 SERVER:EXPORT, 如 192.168.1.4:/ data/mydir/。 -
Volume(逻辑卷):一个逻辑卷是一组 Brick 的集合。卷是数据存储的逻辑设备,类似于 LVM 中的逻辑卷。大部分 Gluster 管理操作是在卷上进行的。 -
FUSE(Filesystem inUserspace):是一个内核模块,允许用户创建自己的文件系统,无须修改内核代码。 -
VFS:内核空间对用户空间提供的访问磁盘的接口。 -
Glusterd(后台管理进程):在存储群集中的每个节点上都要运行。
1.4 GlusterFS模块化堆栈式结构
GlusterFS 是模块化、堆栈式的架构设计,模块称为 Translator,是 GlusterFS 提供的一种强大机制,借助这种良好定义的接口可以高效简便地扩展文件系统的功能和实现复杂的功能。
?
1.5 GlusterFS 的工作流程如下:
?工作流程:
-
客户端或应用程序通过 GlusterFS 的挂载点访问数据。 -
Linux 系统内核通过 VFS API 收到请求并处理。 -
VFS 将数据递交给FUSE 内核文件系统,并向系统注册一个实际的文件系统 FUSE, 而 FUSE 文件系统则是将数据通过/dev/fuse 设备文件递交给了 GlusterFS client 端。可以将 FUSE 文件系统理解为一个代理。 -
GlusterFS client 收到数据后,client 根据配置文件对数据进行处理。 -
经过 GlusterFS client 处理后,通过网络将数据传递至远端的 GlusterFS Server,并且将数据写入服务器存储设备。
1.6 弹性hash算法
二 、GlusterFS的卷的类型
2.1 分类
-
分布式卷 -
条带卷 -
复制卷 -
分布式条带卷 -
分布式复制卷 -
条带复制卷 -
分布式条带分支卷
2.2 常用的卷详解
2.2.1 分布式卷
分布式卷的特点:
-
文件分布在不同的服务器,不具备冗余性 -
更容易和廉价地扩展卷的大小 -
单点故障会造成数据丢失 -
依赖底层的数据保护
2.2.2 条带卷
条带卷的特点:
-
数据被分割成更小块分布到块服务器群中的不同条带区 -
分布减少了负载且更小的文件加速了存取的速度 -
没有数据冗余
2.2.3 复制卷
复制卷的特点
-
卷中所有的服务器均保存一个完整的副本 -
卷的副本数量可由客户创建的时候决定 -
至少有两块服务器或更多服务器 -
具备冗余
2.2.4 分布式条带卷
-
兼顾分布式卷和条带卷的功能 -
主用于大文件访问处理 -
至少最少需要4台服务器
2.2.4 分布式复制卷
-
兼顾分布式卷和复制卷的功能 -
主要用于需要数据冗余的情况 -
服务器必须要条带卷的倍数(>=2倍)
三、部署GFS集群
资源列表
主机名 | IP | 磁盘 | 挂载点 |
---|
node1 | 172.16.10.11 | /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 | /b3 /c4 /d5 /e6 | node2 | 172.16.10.12 | /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 | /b3 /c4 /d5 /e6 | node3 | 172.16.10.13 | /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 | /b3 /c4 /d5 /e6 | node4 | 172.16.10.14 | /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 | /b3 /c4 /d5 /e6 | client | 172.16.10.10 | | |
基础环境
?systemctl stop firewalld
?systemctl disable firewalld
?setenforce 0
?sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
?hostnamectl set-hostname node1
?hostnamectl set-hostname node2
?hostnamectl set-hostname node3
?hostnamectl set-hostname node4
?hostnamectl set-hostname client
?vim /etc/hosts
?172.16.10.10 client
?172.16.10.11 node1
?172.16.10.12 node2
?172.16.10.13 node3
?172.16.10.14 node4
3.1 安装GFS
3.1.1 安装软件
?# 安装yum源
?[root@node1 ~]# yum -y install centos-release-gluster
?# 安装gluster相关软件
?[root@node1 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
3.1.2 启动GlusterFS
?[root@node1 ~]# systemctl start glusterd
?[root@node1 ~]# systemctl enable glusterd
??
?# 出现以下错误可以尝试升级systemd和openssl
?[root@node1 ~]# yum -y install systemd openssl
?# 报错信息:
?[root@node1 ~]# systemctl status glusterd -l
?● glusterd.service - GlusterFS, a clustered file-system server
? ? Loaded: loaded (/usr/lib/systemd/system/glusterd.service; enabled; vendor preset: disabled)
? ? Active: failed (Result: exit-code) since 六 2021-07-24 15:02:18 CST; 26s ago Docs: man:glusterd(8)
?7月 24 15:02:18 node3 systemd[1]: Starting GlusterFS, a clustered file-system server...
?7月 24 15:02:18 node3 systemd[1]: glusterd.service: control process exited, code=exited status=1
?7月 24 15:02:18 node3 systemd[1]: Failed to start GlusterFS, a clustered file- system server.
?7月 24 15:02:18 node3 systemd[1]: Unit glusterd.service entered failed state.
?7月 24 15:02:18 node3 systemd[1]: glusterd.service failed.
?7月 24 15:02:20 node3 systemd[1]: [/usr/lib/systemd/system/glusterd.service:4] Unknown lvalue 'StartLimitBurst' in section 'Unit'
?7月 24 15:02:20 node3 systemd[1]: [/usr/lib/systemd/system/glusterd.service:5] Unknown lvalue 'StartLimitIntervalSec' in section 'Unit
3.1.3 添加节点
?[root@node1 ~]# gluster peer probe node1 # node1 也可以不执行
?[root@node1 ~]# gluster peer probe node2
?[root@node1 ~]# gluster peer probe node3
?[root@node1 ~]# gluster peer probe node4
3.1.4 查看群集状态
?[root@node1 ~]# gluster peer status
3.2 创建卷
3.2.1 创建分布式卷
# 创建分布式卷
[root@node1 ~]# gluster volume create dis-volume node1:/e6 node2:/e6 force
# 查看卷的详细信息
[root@node1 ~]# gluster volume info dis-volume
# 启用GlusterFS逻辑卷
[root@node1 ~]# gluster volume start dis-volume
# 查看卷列表,显示所有的卷
[root@node1 ~]# gluster volume list
3.2.2 创建条带卷,新版本已经启用
# 创建条带卷
[root@node1 ~]# gluster volume create str-volume stripe 2 node3:/e6 node4:/e6 force
# 查看卷的详细信息
[root@node1 ~]# gluster volume info str-volume
# 启用GlusterFS逻辑卷
[root@node1 ~]# gluster volume start str-volume
# 查看卷列表,显示所有的卷
[root@node1 ~]# gluster volume list
3.2.3 创建复制卷
# 创建复制卷
[root@node1 ~]# gluster volume create rep-volume replica 2 node1:/d5 node2:/d5 force
# 查看卷的详细信息
[root@node1 ~]# gluster volume info rep-volume
# 启用GlusterFS逻辑卷
[root@node1 ~]# gluster volume start rep-volume
# 查看卷列表,显示所有的卷
[root@node1 ~]# gluster volume list
3.2.4 创建分布式条带卷,新版本已经启用
# 创建分布式条带卷
[root@node1 ~]# gluster volume create dis-str stripe 2 node1:/c4 node2:/c4 node3:/c4 node4:/c4 force
# 查看卷的详细信息
[root@node1 ~]# gluster volume info dis-str
# 启用GlusterFS逻辑卷
[root@node1 ~]# gluster volume start dis-str
# 查看卷列表,显示所有的卷
[root@node1 ~]# gluster volume list
3.2.5 创建分布式复制卷
# 创建分布式复制卷
[root@node1 ~]# gluster volume create dis-rep replica 2 node1:/b3 node2:/b3 node3:/b3 node4:/b3 force
# 查看卷的详细信息
[root@node1 ~]# gluster volume info dis-rep
# 启用GlusterFS逻辑卷
[root@node1 ~]# gluster volume start dis-rep
# 查看卷列表,显示所有的卷
[root@node1 ~]# gluster volume list
3.3 部署Gluster客户端
3.3.1 安装客户端软件
# 安装yum源
[root@client ~]# yum -y install centos-release-gluster
# 安装gluster相关软件
[root@client ~]# yum -y install glusterfs glusterfs-fuse
3.3.2 创建挂载点
[root@client ~]# mkdir /{dis,rep,dis-rep}
3.3.3 挂载Gluster文件系统
# 手动挂载
[root@client ~]# mount -t glusterfs node1:dis-volume /dis
[root@client ~]# mount -t glusterfs node1:rep-volume /rep
[root@client ~]# mount -t glusterfs node1:dis-rep /dis_and_rep
# 自动挂载
[root@client ~]# vim /etc/fstab
node1:dis-volume /dis glusterfs defaults,_netdev 0 0
node1:rep-volume /rep glusterfs defaults,_netdev 0 0
node1:dis-rep /dis_and_rep glusterfs defaults,_netdev 0 0
[root@client ~]# mount -a
3.3.4 测试
# 在客户机挂载点分别创建文件
[root@client ~]# cp /etc/passwd /dis/
[root@client ~]# cp /etc/passwd /dis-rep/
[root@client ~]# cp /etc/passwd /rep/
# 分别查看相应挂载的数据
[root@client ~]# head -1 /dis/passwd
root:x0:0:root:/root:/bin/bash
[root@client ~]# head -1 /dis/passwd
root:x0:0:root:/root:/bin/bash
[root@client ~]# head -1 /dis/passwd
root:x0:0:root:/root:/bin/bash
# 模仿单点故障再查看
[root@node1 ~]# init 0 ##关掉node1
# 再次查看
[root@client ~]# head -1 /dis/passwd
head: 无法打开"/dis-rep/passwd" 读取数据: 没有那个文件或目录 ##分布式卷没有冗余,若数据正好存储在node1节点,则会会出现数据丢失,若存储在node2节点,则数据可以正常读取
[root@client ~]# head -1 /dis/passwd
root:x:0:0:root:/root:/bin/bash ##复制卷有一份备份在其他服务节点,关闭一个节点,还是能够正常访问数据
[root@client ~]# head -1 /dis/passwd
root:x:0:0:root:/root:/bin/bash ##同复制卷,但若写入数据的两个服务都出现故障,则数据丢失
3.4 维护命令
# 加入可信任存储池
gluster peer probe [IP或者主机名]
# 查看状态
gluster peer status
# 移除节点
gluster peer detach [IP或者主机名]
# 启用GlusterFS逻辑卷
gluster volume start [卷名]
# 查看逻辑卷状态
gluster volume info
# 停止卷
gluster volume stop [卷名]
# 删除卷
gluster volume delete [卷名]
# 卷扩容
gluster volume add-brick [卷名] [IP]:[目录]
# 扩容后重新计算分配资源文件
gluster volume rebalance [卷名] start
# 收缩卷(收缩卷前gluster需要先移动数据到其他位置)
gluster volume remove-brick [卷名] [迁移前IP]:[迁移前目录] [迁移后IP]:[迁移后目录] start ## 开始迁移
gluster volume remove-brick [卷名] [迁移前IP]:[迁移前目录] [迁移后IP]:[迁移后目录] status ## 查看迁移状态
gluster volume remove-brick [卷名] [迁移前IP]:[迁移前目录] [迁移后IP]:[迁移后目录] commit ## 迁移完成后提交
# 迁移卷
# 将10.0.21.246数据迁移到10.0.21.245先将10.0.21.245加入集群
gluster peer probe 10.0.21.245 gluster volume replace-brick gv0 10.0.21.246:/data/glusterfs 10.0.21.245:/data/glusterfs start ## 开始迁移
gluster volume replace-brick gv0 10.0.21.246:/data/glusterfs 10.0.21.245:/data/glusterfs status ## 查看迁移状态
gluster volume replace-brick gv0 10.0.21.246:/data/glusterfs 10.0.21.245:/data/glusterfs commit ## 数据迁移完毕后提交
gluster volume replace-brick gv0 10.0.21.246:/data/glusterfs 10.0.21.245:/data/glusterfs commit -force ## 如果机器10.0.21.246出现故障已经不能运行,执行强制提交
gluster volume heal gv0 full ## 同步整个卷
# 设置卷的访问控制
## 下面设置只允许 192.168.1.0 和 10.1.1.0 网段的客户端访问 dis-rep 卷
gluster volume set dis-rep auth.allow 192.168.1.*,10.1.1.*
|