概述
GlusterFS (Gluster File System) 是一个开源的分布式文件系统,主要由 Z RESEARCH 公司负责开发。GlusterFS 是 Scale-Out 存储解决方案 Gluster 的核心,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。GlusterFS 借助 TCP/IP 或 InfiniBand RDMA 网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据。GlusterFS 基于可堆叠的用户空间设计,可为各种不同的数据负载提供优异的性能。
GlusterFS 总体架构与组成,它主要由存储服务器(Brick Server)、客户端以及 NFS/Samba 存储网关组成。不难发现,GlusterFS 架构中没有元数据服务器组件,这是其最大的设计这点,对于提升整个系统的性能、可靠性和稳定性都有着决定性的意义。
- GlusterFS 支持 TCP/IP 和 InfiniBand RDMA 高速网络互联。
- 客户端可通过原生 GlusterFS 协议访问数据,其他没有运行 GlusterFS 客户端的终端可通过 NFS/CIFS 标准协议通过存储网关访问数据(存储网关提供弹性卷管理和访问代理功能)。
- 存储服务器主要提供基本的数据存储功能,客户端弥补了没有元数据服务器的问题,承担了更多的功能,包括数据卷管理、I/O 调度、文件定位、数据缓存等功能,利用 FUSE(File system in User Space)模块将 GlusterFS 挂载到本地文件系统之上,实现 POSIX 兼容的方式来访问系统数据。
卷类型
Distribute卷
分布式卷,基于 Hash 算法将文件分布到所有 brick server,只是扩大了磁盘空间,不具备容错能力。由于distribute volume 使用本地文件系统,因此存取效率并没有提高,相反会因为网络通信的原因使用效率有所降低,另外本地存储设备的容量有限制,因此支持超大型文件会有一定难度。
Stripe卷
条带卷,类似 RAID0,文件分成数据块以 Round Robin 方式分布到 brick server 上,并发粒度是数据块,支持超大文件,大文件的读写性能高。
Replica卷
复制卷,文件同步复制到多个 brick 上,文件级 RAID1,具有容错能力,写性能下降,读性能提升。Replicated 模式,也称作 AFR(Auto File Replication),相当于 RAID1,即同一文件在多个镜像存储节点上保存多份,每个 replicated 子节点有着相同的目录结构和文件,replica volume 也是在容器存储中较为推崇的一种。
Distribute Stripe卷
分布式条带卷,Brick server 数量是条带数的倍数,兼具 distribute 和 stripe 卷的特点。分布式的条带卷,volume 中 brick 所包含的存储服务器数必须是 stripe 的倍数(>=2倍),兼顾分布式和条带式的功能。每个文件分布在四台共享服务器上,通常用于大文件访问处理,最少需要 4 台服务器才能创建分布条带卷。
Distribute Replica卷
分布式复制卷,Brick server 数量是镜像数的倍数,兼具 distribute 和 replica 卷的特点,可以在 2 个或多个节点之间复制数据。分布式的复制卷,volume 中 brick 所包含的存储服务器数必须是 replica 的倍数(>=2倍),兼顾分布式和复制式的功能。
Stripe Replica卷
条带复制卷,类似 RAID 10,同时具有条带卷和复制卷的特点。
Distribute Stripe Replica卷
分布式条带复制卷,三种基本卷的复合卷,通常用于类 Map Reduce 应用。
环境
使用docker部署GlusterFS,dockerfile如下:
1 | FROM centos:7.3.1611 |
创建GlusterFS镜像
1 | docker build -t glusterfs:3.10 -f ./dockerfile . |
创建docker容器脚本mkgfs.sh
,创建两个容器,用来组件gluster集群
1 | !/bin/sh |
部署&使用
部署
安装glusterfs-server
1 | yum install -y glusterfs-server |
准备数据目录
1 | mkdir -p /brks/brk1/gv0 |
(此处不进行数据盘挂载,直接使用系统硬盘)
启动glusterd
服务
1 | systemctl enable glusterd |
在容器glf-client-1
上添加glf-client-2
1 | gluster peer probe glf-client-2 |
(此处省去向/etc/hosts
增加ip、域名的映射修改)
在容器glf-client-2
上添加glf-client-1
1 | gluster peer probe glf-client-1 |
(此处省去向/etc/hosts
增加ip、域名的映射修改)
在任意一个容器上创建、启动volume
1 | gluster volume create gv0 replica 2 glf-client-1:/brks/brk1/gv0 glf-client-2:/brks/brk1/gv0 force |
(由于gv0使用的是系统盘,所以在volume创建时,需要指定force
参数)
创建、启动完volume后可通过gluster volume info
和gluster volume status gv0
查看状态。
使用
1 | mount -t glusterfs glf-client-1:gv0 /mnt/ |