- GlusterFS简介
GlusterFS 是一个开源的分布式文件系统,同时也是 Scale-Out 存储解决方案 Gluster 的核心,在存储数据方面具有强大的横向扩展能力,通过扩展不同的节点可以支持数PB级别的存储容量。 GlusterFS借助TCP/P或InfiniBand RDMA网络将分散的存储资源汇聚在一起,统一提供存储服务,并 使用单一全局命名空间来管理数据。GlusterFS基于可堆叠的用户空间以及无元的设计,可为各种不同的数据负载提供优异的性能。
GlusterFS 主要由存储服务器(Brick Server)、客户端及NFS/ Samba存储网关(可选,根据需要 选择使用)组成。GlusterFS架构中最大的设计特点是没有元数据服务器组件,这有助于提升整个系统的性能、可靠性和稳定性。传统的分布式文件系统大多通过元服务器来存储元 数据,元数据包含存储节点上的目录信息,目录结构等,这样的设计在浏览目录时效率非常高,但是也存在一些缺陷,如单点故障,一旦元数据服务器出现故障,即使节点具备再高的冗余性,整个存储系统也将崩溃,而 GlusterFS 分布式文件系统是基于无元服务器的设计,数据横向扩展能力强, 具备较高的可靠性及存储效率。GlusterFS 支持TCP/IP和 InfiniBandRDMA高速网络互联,客户端可通过原生GlusterFS协议访问数据,其他没有运行GlusterFS 客户端的终端可通过NFS/CIFS标准协议通过存储网关访问数据。
- GlusterFS的特点
> 扩展性和高性能。GlusterFS 利用双重特性来提供高容量存储解决方案。
> 高可用性。
> 全局统一命名空间。
> 弹性卷管理。
> 基于标准协议。
- GlusterFS 术语
> Brick (存储块):指可信主机池中由主机提供的用于物理存储的专用分区。是GlusterFS 中的基本存储单元,同时也是可信存储池中服务器上对外提供的存储目录。存储目录的格式由服务器和目录的绝对路径构成,表示方法为SERVER.EXPORT,如192,168.1.4:/date/mydir/。
> Volume(逻辑卷): 一个逻辑卷是一组Brick的集合。卷是数据存储的逻辑设备,类似于 LVM 中的逻辑卷。大部分 Gluster管理操作是在卷上进行的。
> FUSE (Filesystern inl Jserspace),是一个内核模块,允许用户创建自己的文件系统,无须修改内核代码。
> VFS:内核空间对用户空间提供的访问磁盘的接口。
> Glusierd(后台管理进程),在存储群集中的每个节点上都要运行。
13.3 GlusterFS 的卷类型
GlusterFS 支持七种卷,即分布式卷、条带卷、复制卷、分布式条带卷、分布式复制卷、条带复制卷和分布式条带复制卷,这七种卷可以满足不同应用对高性能,高可用的需求。
基本卷:
> 分布式巻(Distribute volume):文件通过HASH 算法分布到所有Brick Server 上,这种卷是 Glusterf的基础,以文件为单位根据HASH 算法散列到不同的Brick,其实只是扩大了磁盘空 间,如果有一块磁盘损坏,数据也将丢失,属于文件级的RAID 0,不具有容错能力。
> 条带卷(Stripe volume);类似RAIDO,文件被分成数据块并以轮询的方式分布到多个Brick Server上,文件存储以数据块为单位,支持大文件存储。文件越大,读取效率越高。
> 复制卷(Replica volume),将文件同步到多个Brick上,使其具备多个文件副本,属于文件 级RAID1,具有容错能力。因为数据分散在多个Brick中。所以读性能得到很大提升,但写 性能下降
> 分布式条带卷(Distribute Stripe volume), Brick Server 数最是条带数(数据块分布的Brick 数量)的倍数,兼具分布式卷和条带卷的特点。
> 分布式复制卷(Distribute Replica volume)Brick Server 数量是镜像数(数据副本数量)的 倍数,兼具分布式卷和复制卷的特点。
> 条带复制巻(Stripe Replica volume),类似RAID 10,同时具有条带巻和复制卷的特点。
> 分布式条带复制卷(Distribute Stripe Replicavolume):三种基本卷的复合卷,通常用于类Map Reduce应用。
分布式卷 具有如下特点:
> 文件分布在不同的服务器,不具备冗余性。
> 更容易且廉价地扩展卷的大小。
> 单点故障会造成数据丢失。
> 依赖底层的数据保护。
条带卷 具有如下特点。
> 数据被分割成更小块分布到块服务器群中的不同条带区。
> 分布减少了负载且更小的文件加速了存取的速度。
> 没有数据冗余。
复制卷 具有如下特点。
> 卷中所有的服务器均保存一个完整的副本。
> 卷的副本数最可由客户创建的时候决定。
> 至少有两个块服务器或更多服务器。
> 具备冗余性。
部署配置实验
实验环境
虚拟机 4台 centos7.9
网卡NAT模式 数量 1
组件包
Glusterfs Glusterfs-server Glusterfs-fuse Glusterfs-rdma
|----------|-----------------|-------|
| 设备 | IP | 备注 |
| Centos01 | 192.168.161.111 | Node1 |
| Centos02 | 192.168.161.112 | Node2 |
| Centos03 | 192.168.161.113 | Node3 |
| Centos04 | 192.168.161.114 | Node4 |
|----------|-----------------|------------|
| Centos04 | 192.168.161.115 | Node5(客户机) |
IP以上方的为主
初始化配置
搭建一台yum安装源,安装httpd服务,所有机器同步操作(除客户机外)
[root@node6 ~]# hostnamectl set-hostname node1
[root@node6 ~]# bash
[root@node1 ~]# vim /etc/hosts(用于域名解析) 或 cat << EOF >> /etc/hosts
192.168.161.111 node1
192.168.161.111 node1 192.168.161.112 node2
192.168.161.112 node2 192.168.161.113 node3
192.168.161.113 node3 192.168.161.114 node4
192.168.161.114 node4 EOF
[root@node1 ~]# yum -y install httpd
[root@node1 ~]# systemctl start httpd
上传组件包至/var/www/html/站点目录
安装createrepo工具 生成yum源信息文件repo
[root@node1 ~]# yum -y install createrepo
[root@node1 ~]# cd /var/www/html/gfs-9/
[root@node1 gfs-9]# createrepo ./
[root@node1 gfs-9]# ls
[root@node1 ~]# systemctl restart httpd
[root@node01 ~]# vim /etc/yum.repos.d/local.repo
[gfs-9]
name=Zabbix
baseurl=http://192.168.161.111/gfs-9
enabled=1
gpgcheck=0
[local]
name=CnetOS 7.3
baseurl=file:///mnt/
enabled=1
gpgcheck=0
[root@node01 ~]# yum repolist //检查yum源是否正常可用
磁盘初始化及自动挂载
[root@node1 ~]# fdisk /dev/sdb
n //新建分区
p //选择创建的为主分区,后面操作默认 直接回车即可
w //保存退出
[root@node1 ~]# fdisk /dev/sdc //以下三个磁盘都和上面操作一样
[root@node1 ~]# fdisk /dev/sdd
[root@node1 ~]# fdisk /dev/sde //node3 node4无需创建
[root@node1 ~]# mkfs.xfs /dev/sdb1
[root@node1 ~]# mkfs.xfs /dev/sdc1
[root@node1 ~]# mkfs.xfs /dev/sdd1
[root@node1 ~]# mkfs.xfs /dev/sde1 //node3 node4无需创建
安装GFS
[root@node1 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
启动GFS服务
[root@node1 ~]# systemctl start glusterd
挂载和自动挂载
[root@node1 ~]# mount /dev/sdb1 /b3
[root@node1 ~]# mount /dev/sdc1 /c4
[root@node1 ~]# mount /dev/sdd1 /d5
[root@node1 ~]# mount /dev/sde1 /e6
[root@node1 ~]# df -Th
[root@node1 ~]# vim /etc/fstab
/dev/sdb1 /b3 xfs defaults 0 0
/dev/sdc1 /c4 xfs defaults 0 0
/dev/sdd1 /d5 xfs defaults 0 0
/dev/sde1 /e6 xfs defaults 0 0
以上所有机器同步操作
Node1 添加其他节点 node2 node3 node4(以下操作只需在node1操作)
[root@node1 ~]# gluster peer probe node2
[root@node1 ~]# gluster peer probe node3
[root@node1 ~]# gluster peer probe node4
查看节点信息
[root@node1 ~]# gluster peer status
创建卷
分布式卷(名为 dis-volume)
[root@node1 ~]# gluster volume create dis-volume node1:/e6 node2:/e6 force
[root@node1 ~]# gluster volume start dis-volume
[root@node1 ~]# gluster volume info dis-volume
条带卷(暂不支持)(名为 stripe-volume)
[root@node1 ~]# gluster volume create stripe-volume stripe 2 node1:/d5 node2:/d5 force
复制卷(名为 rep-volume)
[root@node1 ~]# gluster volume create rep-volume replica 2 node3:/d5 node4:/d5 force
[root@node1 ~]# gluster volume start rep-volume
[root@node1 ~]# gluster volume info rep-volume
分布式条带卷(暂不支持)(名为 dis-stripe)
[root@node1 ~]# gluster volume create dis-stripe stripe 2 node1:/b3 node2:/b3 node3:/b3 node4:/b3
分布式复制卷(名为 dis-rep)
[root@node1 ~]# gluster volume create dis-rep replica 2 node1:/c4 node2:/c4 node3:/c4 node4:/c4 force
[root@node1 ~]# gluster volume start dis-rep
[root@node1 ~]# gluster volume info dis-rep
[root@node1 ~]# gluster volume list //查看所有卷
客户端 挂载 GFS磁盘
需提前创建挂载目录
安装客户端软件
[root@node5 ~]# yum -y install glusterfs glusterfs-fuse
创建挂载目录
[root@node5 ~]# mkdir -p /test/{dis,stripe,rep,dis_and_stripe,dis_and_rep}
[root@node5 ~]# ls /test/
修改 hosts 文件
[root@node5 ~]# vim /etc/hosts
192.168.161.111 node1
192.168.161.112 node2
192.168.161.113 node3
192.168.161.114 node4
挂载Gluster 文件系统
[root@node5 ~]# mount -t glusterfs node1:dis-rep /test/dis_and_rep/
[root@node5 ~]# mount -t glusterfs node1:dis-volume /test/dis/
[root@node5 ~]# mount -t glusterfs node1:rep-volume /test/rep
[root@node6 ~]# df -h
修改fstab配置文件(自动挂载)
[root@node6 ~]# vim /etc/fstab
node1:dis-volume /test/dis glusterfs defaults,_netdev 0 0
node1:dis-rep /test/dis_and_rep glusterfs defaults,_netdev 0 0
node1:rep-volume /test/rep glusterfs defaults,_netdev 0 0