GlusterFS简介
PB级容量、高可用、读写性能、基于文件系统级别共享、分布式、无metadata(元数据)的存储方式。
GlusterFS(GNU ClusterFile System)是一种全对称的开源分布式文件系统,所谓全对称是指GlusterFS采用弹性哈希算法,没有中心节点,所有节点全部平等。GlusterFS配置方便,稳定性好,可轻松达到PB级容量,数千个节点。
2011年被红帽收购,之后推出了基于GlusterFS的Red Hat Storage Server,增加了针对KVM的许多特性,可用作为KVM存储image存储集群,也可以为LB或HA提供存储。
GlusterFS重要特性:全对称架构、支持多种卷类型(类似RAID0/1/5/10/01)、支持卷级别的压缩、支持FUSE、支持NFS、支持SMB、支持Hadoop、支持OpenStack、与oVirt深度整合(对应RHEL红帽企业级虚拟化)。
GlusterFS重要概念
- birck:GlusterFS的存储单元,以节点服务器目录形式展现;类似于Linux上块设备(block device)的概念。
- volume:多个brick的逻辑集合;类似于LVM中的Volume。
- metadata:元数据,用于描述文件、目录等的信息;
- self-heal:用于后台运行检测副本卷中文件和目录的不一致性并解决这些不一致;
- FUSE:Filesystem Userspace是一个可加载的内核模块,其支持非特权用户创建自己的文件系统而不需要修改内核代码通过在用户空间运行文件系统的代码通过FUSE代码与内核进行桥接;
- Gluster Server:数据存储服务器,即组成GlusterFS存储集群的节点;
- Gluster Client:使用GlusterFS存储服务的服务器,如KVM、OpenStack、LB RealServer、HA node。
GlusterFS部署
准备工作
由于GlusterFS并没有服务器与元数据等概念,因此所有服务器的设置都相同。如果操作时都用ip地址,不使用主机名,那么就不需要做hosts绑定,建议还是使用主机名方式。
部署时GlusterFS至少需要两台服务器搭建(建议三台),服务器配置最好相同,每个服务器两块磁盘,一块是用于安装系统,一块是用于GlusterFS。
1 | [root@GlusterFS-master ~]# vim /etc/hosts |
本文直接使用IP方式进行测试。有三台服务器,分别为 172.31.0.6/7/8。
软件包安装
根据 官方Quickstart,可以使用
服务端
1 | yum -y install centos-release-gluster |
客户端只需要glusterfs、glusterfs-fuse
创建集群
分别启动glusterd服务(并添加开机自启动):
1 | systemctl start glusterd |
创建集群(任意节点上执行一下操作,向集群中添加节点):
1 | gluster peer probe 172.31.0.7 |
从集群中去除节点(该节点中不能存在卷中正在使用的brick):gluster peer detach 172.31.0.7。不需要添加自己,只需要添加其他节点即可
查看集群状态:gluster peer status
volume模式
GlusterFS中的volume的模式有很多中,包括以下几种:
- 分布卷(默认模式):即DHT, 也叫 分布卷: 将文件以hash算法随机分布到 一台服务器节点中存储。
- 复制模式:即AFR, 创建volume 时带 replica x 数量: 将文件复制到 replica x 个节点中。
- 条带模式:即Striped, 创建volume 时带 stripe x 数量: 将文件切割成数据块,分别存储到 stripe x 个节点中 ( 类似raid 0 )。
- 分布式条带模式:最少需要4台服务器才能创建。 创建volume 时 stripe 2 server = 4 个节点: 是DHT 与 Striped 的组合型。
- 分布式复制模式:最少需要4台服务器才能创建。 创建volume 时 replica 2 server = 4 个节点:是DHT 与 AFR 的组合型。
- 条带复制卷模式:最少需要4台服务器才能创建。 创建volume 时 stripe 2 replica 2 server = 4 个节点: 是 Striped 与 AFR 的组合型。
- 三种模式混合: 至少需要8台 服务器才能创建。 stripe 2 replica 2 , 每4个节点 组成一个 组。
分布卷
分布式卷也成为哈希卷,多个文件以文件为单位在多个brick上,使用哈希算法随机存储。
- 应用场景:大量小文件
- 优点:读/写性能好
- 缺点:如果存储或服务器故障,该brick上的数据将丢失

创建分布式卷:
1 | # volumn_name:卷名 |
复制卷
多个文件在多个brick上复制多份,brick的数目要与需要复制的份数相等,建议brick分布在不同的服务器上。
应用场景:对可靠性高和读写性能要求高的场景
优点:读写性能好
缺点:写性能差

创建复制卷:
1 | # 加上replica参数就完成了复制卷,后接文件保存的份数 |
条带卷
将大文件分成条带,存放在多个brick上,默认条带大小128k,应用场景为大文件,缺点:可靠性低,brick故障会导致数据全部丢失

创建条带卷:stripe:条带个数,gluster volume create volume_name stripe 2 node1:/data/br1 node2:/data/br1
分布式条带卷
多个文件在多个节点哈希存储,每个文件再多分条带在多个brick上存储

- 应用场景:读/写性能高的大量大文件场景
- 优点:高并发支持
- 缺点:没有冗余,可靠性差
- brick数是stripe的倍数
创建分布式条带卷:gluster volume create volume_name stripe 2 node1:/data/br1 node2:/data/br1 node3:/data/br1 node4:/data/br1
启动这个卷: gluster volume start volume_name
查看这个卷的信息:gluster volume info volume_name
创建时没有具体的选项,来指定卷的类型,只根据stripe和brick数量分配
分布式复制卷
多个文件在多个节点上哈希存储,在多个brick复制多份存储。

- 应用场景:大量文件读和可靠性要求高的场景
- 优点:高可靠,读性能高
- 缺点:牺牲存储空间,写性能差
- brick数量是replica的倍数
创建:gluster volume create volume_name replica 2 node1:/data/br1 node2:/data/br1 node3:/data/br1 node4:/data/br1
配置客户端使用卷
将卷挂载到本地的mysql目录:mount –t glusterfs node1:/volume_name /mysql
设置开机自动挂载
vim /etc/fstab加入:node1:/volume_name /mysql glusterfs defaults,_netdev 0 0
使用mount -a检测并挂载测试
其他挂在方式(NFS、Samba)参考:
http://www.mamicode.com/info-detail-1925105.html
实操
以172.31.0.6 172.31.0.7 172.31.0.8这三台机器为例,演示安装和配置过程:
1 | # 安装 |
查看peer状态:
1 | [root@wlpx09w8npgsdp ~]# gluster peer status |
查看volume的状态
1 | [root@wlpx09w8npgsdp ~]# gluster volume list |