一、分布式存储GlusterFs
1、GlusterFs简介
Glusterfs是一个开源的分布式文件系统,它是将多个服务器的磁盘资源,通过网络互连成一个并行的网络文件系统。它具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千个客户端。它是无中心节点(所有节点全部平等),让整个服务器没有单点故障的隐患,具有配置方便、高性能、高可用性、可扩展性等特点。
当客户端访问GlusterFS存储时,首先程序通过访问挂载点的形式读写数据,对于用户和程序而言,集群文件系统是透明的,用户和程序根本感觉不到文件系统是本地还是在远程服务器上。读写操作将会被交给VFS(Virtual File System)来处理,VFS会将请求交给FUSE内核模块,而FUSE又会通过设备/dev/fuse将数据交给GlusterFS Client。最后经过GlusterFS Client的计算,并最终经过网络将请求或数据发送到GlusterFS Server上。
2、GlusterFs常用卷类型
分布式卷(distributed):
将文件随机分布在存储卷中的各个块(Bricks)中,使用哈希算法随机存储。分布式卷具有良好的扩展性,但不具备数据冗余能力,该能力需借助服务器软硬件(raid卡)实现。未指定任何卷类型的情况下,默认创建的卷的类型。
优点:读写性能好
缺点:如果存储或服务器故障,该brick上的数据将丢失
应用场景:大量小文件
创建分布式卷命令格式如下:
#gluster volume create test-volume server1:/exp1 server2:/exp2
复制卷(Replicated):
通过存储卷中的多个块(Bricks)建立文件的副本。在创建复制卷时,块数量应当等于副本数量,为防止服务器及磁盘故障,每个块都应当分布在独立的服务器上。复制卷提供数据的高可用性和高可靠性。
优点:读性能好
缺点:写性能差
应用场景:对可靠性高和读性能要求高的场景
创建复制卷命令格式如下:
#gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2
分布式复制卷(Distributed Replicated):
分布式卷和复制卷的集合,在创建分布式副本卷时,块(Bricks)数量最小应当为指定副本数量的整数倍。分布式副木卷可以提高文件读取性能。(企业中最长用的)
优点:高可靠、读性能高
缺点:牺牲存储空间、写性能差
应用场景:大量文件读和可靠性要求高的场景
创建分布式复制卷命令格式如下:
#gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4
分散卷(Dispersed):基于纠错码,将文件编码后条带化分收存储在卷的多个块中,并提供一定冗余性。
分散卷可以提高磁盘存储利用率,但性能有所下降。分散卷中的元余值表示允许多少块失效而不中断对卷的读写操作。分散卷中的冗余值必须大于0,总块数应当大于2倍的元余值,也就意味着分散卷至少要由3个块组成。在创建分散卷时如果未指定冗余值,系统将自动计算该值并提示。
分散卷可用存储空间计算公式如下:
= * (#Bricks - Redundancy)
创建分散卷命令格式如下:
# gluster volume create test-volume [disperse [<COuNT>J] [disperse-data <COUNT>] redundancy <COUNT>] [transport tcp I rdma tcp,rdmal <NEW-BRICK>
以下为实机操作过程
服务器环境规划
主机名 | IP地址 | 操作系统 | 硬盘数量 |
---|---|---|---|
glusterfs01 | 192.168.81.240 | centos7.6 | /dev/sdb(10G) /dev/sdc(10G) |
glusterfs02 | 192.168.81.250 | centos7.6 | /dev/sdb(10G) /dev/sdc(10G) |
glusterfs03 | 192.168.81.136 | centos7.6 | /dev/sdb(10G) /dev/sdc(10G) |
3、安装GlusterFs
1)yum安装
[root@192 ~]# yum install centos-release-gluster -y
[root@192 ~]# yum install glusterfs-server -y
2)启动glusterfs
所有节点都进行如下操作
[root@192 ~]# systemctl start glusterd.service
[root@192 ~]# systemctl enable glusterd.service
[root@192 ~]# mkdir -p /gfs/test1
[root@192 ~]# mkdir -p /gfs/test2
3)配置hosts解析
所有节点都进行如下操作
[root@glusterfs01 ~]# cat /etc/hosts
192.168.81.240 glusterfs01
192.168.81.250 glusterfs02
192.168.81.136 glusterfs03
4、关闭服务器防火墙
为了能让节点上的gluster进程可以相互通信,需要关闭防火墙。
[root@192 ~]# systemctl status firewalld.service 用于查看防火墙的状态