部署GPS分布式文件系统
1. GlusterFS概述
1.1 GlusterFS简介
- 开源的分布式文件系统
- 有存储服务器,客户段以及NFS/Samba存储网关组成
- 无元数据服务器
1.2 GlusterFS特点
- 扩展性和高性能
- 高可用性
- 全局统一命名空间
- 弹性卷管理
- 基于标准协议
1.3 GlusterFS术语
1. Brick ###存储目录是Glusterfs的基本存储单元
2. Volume ###卷是存储目录的逻辑组合
3. FUSE ####内核模块
4. VFS ### 文件系统
5. Glusterd ###集群
1.4 工作原理
1.4.1 工作流程
- 客户端或应用程序通过GlusterFS的挂载点访问数据
- linux系统内核通过VFS API收到请求并处理
- VFS将数据递交给FUSE内核文件系统,fuse文件系统则是将数据通过/dev/fuse设备文件递交给了GlusterFS client端
- GlusterFS client收到数据后,client根据配置文件的配置对数据进行处理
- 通过网络将数据传递至远端的GlusterFS Server,并且将数据写入到服务器存储设备上
1.4.2 弹性HASH算法
- 通过HASH算法得到一个32位的整数
- 划分为N个连续的子空间,每个空间对应一个Brick(存储块)
- 弹性HASH算法的优点
◆ 保证数据平均分布在每一个Brick中
◆解决了对元数据服务器的依赖,进而解决了单点故障以及访问瓶颈
2. GlusterFS的卷类型
- 分布式卷
- 条带卷
- 复制卷
- 分布式条带卷
- 分布式复制卷
- 条带复制卷
- 分布式条带复制卷
2.1 分布式卷
-
分布式卷简介
没有对文件进行分块处理通过扩展文件属性保存HASH值
支持的底层文件系统有EXT3、EXT4、ZFS、XFS等
-
分布式卷的特点
文件分布在不同的服务器,不具备冗余性更容易和廉价地扩展卷的大小
单点故障会造成数据丢失
依赖底层的数据保护
-
创建分布式卷
gluster volume create dis-volume server1:/dir1 server2:/dir2server3:/dir3
2.2 条带卷
-
条带卷简介
根据偏移量将文件分成N块(N个条带节点),轮询的存储在每个Brick Server节点存储大文件时,性能尤为突出
不具备冗余性,类似Raid0
-
条带卷优点
数据被分割成更小块分布到块服务器群中的不同条带区分布减少了负载且更小的文件加速了存取的速度
没有数据冗余
3. 创建条带卷
gluster volume create stripe-volume stripe 2 transport tcp server1:/dir1 server2:/dir2
2.3 复制卷
-
复制卷简介
同一文件保存一份或多分副本
因为要保存副本,所以磁盘利用率较低
若多个节点上的存储空间不一致,将按照木桶效应取最低节点的容量作为该卷的总容量
2.创建复制卷
gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2
2.4 分布式条带卷
-
分布式条带卷简介
兼顾分布式卷和条带卷的功能主要用于大文件访问处理
至少最少需要4台服务器
2.创建分布式条带卷
gluster volume create dis-stripe stripe 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
2.5 分布式条带卷
-
分布式复制卷
兼顾分布式卷和复制卷的功能用于需要冗余的情况
-
创建分布式复制卷
gluster volume create dis-rep replica 2 transport tcp server1:/dir1 server2;ldir2 server3:/dir3 server4:/dir4
3. GlusterFS部署步骤
3.1 群集环境
五台服务器
四台服务器端,一台客户段
3.2 操作流程
- 部署环境
准备环境
关闭防火墙和Selinux
配置hosts文件
安装软件
启动GlusterFS
添加节点
查看集群状态
- 创建卷
创建分布式卷
创建条带卷
创建复制卷
创建分布式条带卷
创建分布式复制卷
- 部署Glister客户端
安装客户端软件
创建挂载目录
修改hosts文件
挂载Gluster文件系统
修改fstab配置文件
- 测试Gluster文件系统
卷中写入文件
查看文件分布
破坏性测试
其他的维护命令
查看GlusterFS卷
停止/删除卷
设置卷的访问控制
4. 实验
4.1 准备工作
准备5台虚拟机,给四台服务器加装四个硬盘,然后重启虚拟机
node1:20.0.0.20
node2:20.0.0.21
node3:20.0.0.12
node4:20.0.0.26
客户端:20.0.0.22
分别给四台服务器设置自己的主机名,对应上面
[root@localhost ~]# hostnamectl set-hostname +主机名
#####五台虚拟机都需要做的操作######
[root@node1 ~]# systemctl stop firewalld ###关闭防火墙
[root@node1 ~]# systemctl disable firewalld ###关闭自启动
[root@node1 ~]# setenforce ? ##查看内核状态
setenforce: SELinux is disabled
[root@node1 ~]# setenforce 0 ##临时关闭内核
[root@node1 ~]# vim /etc/selinux/config ###进配置文件更改内核
SELINUX=disabled ###设置成disabled,一共三种模式。
########内核的三种状态######
#enforcing - 强制模式,代表selinux在运行中,且已经开始显示domain/type之间的验证关系
#permissive - 宽容模式,代表selninux在运行中,不过不会限制domain/type之间的验证关系,即使验证不正确,进程仍可对文件进行操作,不过如果验证不正确会发出警告
#disabled - 关闭模式,selinux并没有实际运行
#######五台虚拟机都做一下映射###
[root@node1 ~]#vi /etc/hosts ###做映射
20.0.0.12 node3
20.0.0.20 node1
20.0.0.21 node2
20.0.0.26 node4
测试一下:
[root@node1 ~]# ping node2
PING node2 (20.0.0.21) 56(84) bytes of data.
64 bytes from node2 (20.0.0.21): icmp_seq=1 ttl=64 time=0.423 ms
[root@node1 ~]# ping node3
PING node3 (20.0.0.12) 56(84) bytes of data.
64 bytes from node3 (20.0.0.12): icmp_seq=1 ttl=64 time=0.573 ms
[root@node1 ~]# ping node4
PING node4 (20.0.0.26) 56(84) bytes of data.
64 bytes from node4 (20.0.0.26): icmp_seq=1 ttl=64 time=0.501 ms
64 bytes from node4 (20.0.0.26): icmp_seq=2 ttl=64 time=0.420 ms