glusterFS分布式存储系统
1. GlusterFS是什么
分布式文件系统
无中心架构(无元数据服务器)
scale-out横向扩展(容量,性能)
集群式NAS存储系统
采用异构的标准商业硬件
资源池
全局统一命名空间
复制和自动修复
易于部署和使用
2. GlusterFS适合大文件还是小文件
弹性哈希算法和Stripe 数据分布策略,移除了元数据依赖,优化了数据分布,提高数据访问并行性,能够大幅提高大文件存储的性能。对于小文件,无元数据服务设计解决了元数据的问题。但GlusterFS 并没有在I/O 方面作优化,在存储服务器底层文件系统上仍然是大量小文件,本地文件系统元数据访问是一个瓶颈,数据分布和并行性也无法充分发挥作用。因此,GlusterFS 适合存储大文件,小文件性能较差,还存在很大优化空间。
3. GlusterFS存储的几个术语
Brick:GlusterFS中的存储单元,通过是一个受信存储池中的服务器的一个导出目录。可以通过主机名和目录名来标识,如'SERVER:EXPORT'。
Client:挂载了GlusterFS卷的设备。
GFID:GlusterFS卷中的每个文件或目录都有一个唯一的128位的数据相关联,其用于模拟inodeNamespace:每个Gluster卷都导出单个ns作为POSIX的挂载点。
Node:一个拥有若干brick的设备。
RDMA:远程直接内存访问,支持不通过双方的OS进行直接内存访问。
RRDNS:round robin DNS是一种通过DNS轮转返回不同的设备以进行负载均衡的方法
Self-heal:用于后台运行检测复本卷中文件和目录的不一致性并解决这些不一致。
Split-brain:脑裂
Volfile:Glusterfs进程的配置文件,通常位于/var/lib/glusterd/vols/volname
Volume:一组bricks的逻辑集合
2. glusterFS基本原理
1. 弹性hash算法
1. 使用Davies-Meyer算法计算32位hash值,输入参数为文件名
2. 根据hash值在集群中选择子卷,进行文件定位
3. 对选择的子卷进行数据访问
3. glusterFS卷类型
1. 基本卷
1. 哈希卷
文件通过hash算法在所有brick上分布
文件级RAID 0,不具有容错能力
2. 复制卷
文件同步复制到多个brick上
文件级RAID1,具有容错能力
写性能下降,读性能提升
3. 条带卷
单个文件分布到多个brick上,支持超大文件
类似RAID 0,以Round-Robin方式
2. 复合卷
1. 哈希复制卷
哈希卷和复制卷的复合方式
同时具有哈希卷和复制卷的特点
2. 哈希条带卷
3. 复制条带卷
4. 哈希复制条带卷
三种基本卷的复合卷
通常用于类map reduce应用
4. glusterFS访问接口
支持文件存储,块存储,对象存储
5. glusterFS数据修复及添加节点原理
数据修复
1. 发展历程
第一代: 按需同步进行
第二代: 完全人工扫描
第三代: 并发自动修复(3.3)
第四代: 基于日志
2. 触发时机: 访问文件目录时
3. 判断依据: 扩展属性
添加节点
1. 添加新节点,最小化数据重新分配
2. 老数据分布模式不变,新数据分布到所有节点上
3. 执行rebalance,数据重新分布
容量负载优先
1. 设置容量阈值,优先选择可用容量充足brick
2. hash目标brick上创建文件符号链接
3. 访问时解析重定向
2. 主流分布式存储系统对比
|  | MooseFS(MFS) | Ceph | GlusterFS | Lustre | 
| Metadata server | 单个MDS。存在单点故障和瓶颈。 | 多个MDS,不存在单点故障和瓶颈。MDS可以扩展,不存在瓶颈。 | 无,不存在单点故障。靠运行在各个节点上的动态算法来代替MDS,不需同步元数据,无硬盘I/O瓶颈。 | 双MDS(互相备份)。MDS不可以扩展,存在瓶颈。 | 
| FUSE | 支持 | 支持 | 支持 | 支持 | 
| 访问接口 | POSIX | POSIX | POSIX | POSIX/MPI | 
| 文件分布/数据分布 | 文件被分片,数据块保存在不同的存储服务器上。 | 文件被分片,每个数据块是一个对象。对象保存在不同的存储服务器上。 | Cluster Translators(GlusterFS集群存储的核心)包括AFR、DHT(和Stripe三种类型。 AFR相当于RAID1,每个文件都被复制到多个存储节点上。Stripe相当于RAID0,文件被分片,数据被条带化到各个存储节点上。 Translators可以组合,即AFR和stripe可以组成RAID10,实现高性能和高可用。 | 可以把大文件分片并以类似RAID0的方式分散存储在多个存储节点上。 | 
| 冗余保护/副本 | 多副本 | 多副本 | 镜像 | 无 | 
| 数据可靠性 | 由数据的多副本提供可靠性。 | 由数据的多副本提供可靠性。 | 由镜像提供可靠性。 | 由存储节点上的RAID1或RAID5/6提供可靠性。假如存储节点失效,则数据不可用。 | 
| 备份 |  |  |  | 提供备份工具。支持远程备份。 | 
| 故障恢复 | 手动恢复 | 当节点失效时,自动迁移数据、重新复制副本。 | 当节点、硬件、磁盘、网络发生故障时,系统会自动处理这些故障,管理员不需介入。 | 无 | 
| 扩展性 | 增加存储服务器,可以提高容量和文件操作性能。但是由于不能增加MDS,因此元数据操作性能不能提高,是整个系统的瓶颈。 | 可以增加元数据服务器和存储节点。容量可扩展。文件操作性能可扩展。元数据操作性能可扩展。 | 容量可扩展。 | 可增加存储节点,提高容量可文件操作性能,但是由于不能增加MDS,因此元数据操作性能不能提高,是整个系统的瓶颈。 | 
| 安装/部署 | 简单 | 简单 | 简单 | 复杂。而且Lustre严重依赖内核,需要重新编译内核。 | 
| 开发语言 | C | C++ | C | C | 
| 适合场景 | 大量小文件读写 | 小文件 | 适合大文件。 对于小文件,无元数据服务设计解决了元数据的问题。但GlusterFS并没有在I/O方面作优化,在存储服务器底层文件系统上仍然是大量小文件,本地文件系统元数据访问是瓶颈,数据分布和并行性也无法充分发挥作用。因此,GlusterFS的小文件性能还存在很大优化空间。 | 大文件读写 | 
| 产品级别 | 小型 | 中型 | 中型 | 重型 | 
| 应用 | 国内较多 | 无 | 较多用户使用 | HPC领域。 | 
| 优缺点 | 实施简单,但是存在单点故障。 | 不稳定,目前还在实验阶段,不适合于生产环境。 | 无元数据服务器,堆栈式架构(基本功能模块可以进行堆栈式组合,实现强大功能)。具有线性横向扩展能力。 由于没有元数据服务器,因此增加了客户端的负载,占用相当的CPU和内存。 但遍历文件目录时,则实现较为复杂和低效,需要搜索所有的存储节点。因此不建议使用较深的路径。 | 很成熟、很庞大。 | 
3. glusterFS应用场景
非结构数据存储
归档,容灾
虚拟机存储
云存储
内容云
大数据
结构化和半结构化数据
4. glusterFS测试工具与方法
1. 分布式文件系统测试
功能性测试
广义功能性测试/狭义功能性测试
该分布式文件系统特有的功能性测试
手动测试或者脚本
glusterfs: 创建/启动/停止/删除卷操作,设置某些操作
文件系统的功能性测试
文件控制与操作:fstest
系统API调用:LTP
锁应用:locktest
数据一致性测试
测试存入与读出的数据是否一致
测试方法:
MD5加密
Diff
编译内核等
POSIX语义兼容性测试
PCTS
LTP
部署方式测试
测试不同场景下的系统部署方式
自动安装配置
集群规模
网络,存储配置
可用性测试
测试系统的高可用性
集群中某些服务器或者磁盘,网络等错误情况下系统是否可用,管理是否简单可靠
覆盖功能点:副本,自修复以及管理服务
扩展性测试
测试系统的弹性扩展功能
扩展系统后的性能影响
线性扩展能力
稳定性测试
验证系统在长时间运行下,系统是否能正常运行
压力测试
验证在大压力下,系统运行以及资源消耗情况
性能测试
系统在不同负载情况下的性能
性能关键点
顺序读写
随机读写
目录操作:创建,删除,查找,更新
大量小文件读写
大文件读写
性能指标
IOPS:随机小文件I/O读写能力
带宽:大文件连续读写能力
CPU利用率
iowait
性能测试工具
DD
大文件,顺序都写,带宽
单进程,临时文件
手动记录结果(无法重定向)
使用方法:
写:dd if=/dev/zero of=/mnt/mountpoint/file bs=1M count=1k
读:dd if=/mnt/mountpoint/file of=/dev/null bs=1M
Iozone 带宽测试
顺序/随机读写带宽
多进程,临时文件可选留存
可自动生成excel表格的结果值
Postmark
FIO 磁盘测试
5. glusterFS安装与使用
1. 环境与准备
四个glusterFS-node,两个glusterclient
下载glusterFS软件包
1. 主机名设置,在每台机器的hosts文件,添加对应的记录。
2. DNS设置
3. NTP设置
4. 关闭防火墙
5. 设置selinux
6. 添加一块硬盘,并格式化分区
mkfs.xfs -i size=512 /dev/sdb
7. 创建目录,并挂载目录
mkdir -p /glusterfs/data{1,2,3}
echo "/dev/sdb /glusterfs/data1 xfs defaults 1 2" >>/etc/fstab
2. 安装
1. centos6
访问地址:https://bits.gluster.org/pub/gluster/glusterfs/3.4.2/x86_64/
https://bits.gluster.org/pub/gluster/glusterfs/3.4.2/x86_64/glusterfs-3.4.2-1.el6.x86_64.rpm
https://bits.gluster.org/pub/gluster/glusterfs/3.4.2/x86_64/glusterfs-api-3.4.2-1.el6.x86_64.rpm
https://bits.gluster.org/pub/gluster/glusterfs/3.4.2/x86_64/glusterfs-libs-3.4.2-1.el6.x86_64.rpm
https://bits.gluster.org/pub/gluster/glusterfs/3.4.2/x86_64/glusterfs-server-3.4.2-1.el6.x86_64.rpm
2. centos7
服务器端安装:
指定yum源:
[glusterfs-6] name=GlusterFS 6 baseurl=https://buildlogs.centos.org/centos/7/storage/x86_64/gluster-6/ gpgcheck=0 enabled=1
yum install glusterfs-6.1 glusterfs-server-6.1 glusterfs-fuse-6.1 -y
也可以去掉版本号
systemctl start glusterd
systemctl enable glusterd
客户端安装:
1. 使用yum安装
yum install -y glusterfs glusterfs-fuse
2. 使用rpm包安装
下载对应的版本rpm包
https://buildlogs.centos.org/centos/6/storage/x86_64/gluster-6/Packages/g/glusterfs-6.1-1.el6.x86_64.rpm
https://buildlogs.centos.org/centos/6/storage/x86_64/gluster-6/Packages/g/glusterfs-client-xlators-6.1-1.el6.x86_64.rpm
https://buildlogs.centos.org/centos/6/storage/x86_64/gluster-6/Packages/g/glusterfs-fuse-6.1-1.el6.x86_64.rpm
https://buildlogs.centos.org/centos/6/storage/x86_64/gluster-6/Packages/g/glusterfs-libs-6.1-1.el6.x86_64.rpm
rpm -ivh glusterfs-6.1-1.el6.x86_64.rpm glusterfs-client-xlators-6.1-1.el6.x86_64.rpm glusterfs-fuse-6.1-1.el6.x86_64.rpm glusterfs-libs-6.1-1.el6.x86_64.rpm
注意:客户端的版本要与服务器的版本对应上,否则会有报错。查看日志/var/log/glusterfs目录下。
3. 在任意节点上,执行命令,组建集群
gluster peer probe k8s-node1
gluster peer probe k8s-node2
gluster peer status
4. 创建卷
sudo gluster volume create testvol k8s-master:/data/br1 k8s-node1:/data/br1 k8s-node2:/data/br2
5. 启动卷
sudo gluster volume start testvol
6. 查看卷
sudo gluster volume info
7. 挂载卷
mount -t glusterfs 172.16.1.171:/testvol /mnt/ 注意挂载的时候:指定的是卷名称,而不是路径
8. 访问卷
cd /mnt&pwd
创建目录 mkdir dir1  创建文件 touch file1  编辑内容 vi file1  Cat内容 cat file1  删除文件 rm file1  删除目录 rmdir dir1
6. gluster系统管理
1. 增加节点
gluster peer probe IP/主机名
2. 删除节点
gluster peer detach IP/主机名
3. 节点状态
gluster peer status
4. 增加brick
gluster volume add-brick testvol k8s-node2:/data/br3
5. 查看卷信息
gluster volume info testvol
6. 查看挂载状态
mount
df查看容器变化
6. 删除brick
gluster volume remove-brick testvol k8s-node2:/data/br3 start
gluster volume remove-brick testvol k8s-node2:/data/br3 status
gluster volume remove-brick testvol k8s-node2:/data/br3 commit
7. 增删brick后对testvol进行负载均衡
gluster volume rebalance testvol fix-layout start 重新定位layout,原来的layout不变,(新)数据写入新的节点
Fix Layout and Migrate Data:重新定位layout的修改,并且迁移已经存在的数据
8. 删除卷
rm -rf 删除卷上数据
umount /mnt 卸载卷
gluster volume stop testvol 停止卷 在任意节点上执行
gluster volume delete testvol 删除卷 在任意节点上执行
9. 信息同步
前提是复制卷
模拟删除一个server3的信息
rm -rf /var/lib/glusterd/vols/*
gluster volume sync server1 all
7. gluster卷参数配置
                            
8. gluster实战例子
          
1. 安装gluster
2. 组建gluster集群
在node1上,执行下面的命令:
gluster peer probe node2
gluster peer probe node3
gluster peer probe node4
gluster peer status
Hostname: node1 Uuid: 2814def2-ca19-4089-9ec5-acae6738b321 State: Peer in Cluster (Disconnected) Hostname: node2 Uuid: c372deb9-d096-4130-b97d-f38bbbf464a1 State: Peer in Cluster (Connected) Hostname: node3 Uuid: e0088df3-abff-42a7-b36a-d5be1577cbb2 State: Peer in Cluster (Connected)
3. 创建分布复制卷
多个文件在多个节点上哈希存储,在多个brick复制多份存储。 应用场景:大量文件读和可靠性要求高的场景 优点:高可靠,读性能高 缺点:牺牲存储空间,写性能差 brick数量是replica的倍数
gluster volume create volume_name replica 2 node1:/gluster_data/movie_rep_1 node2:/gluster_data/movie_rep_1 node3:/gluster_data/movie_rep_1 node4:/gluster_data/movie_rep_1
gluster volume start volume_name
gluster volume info volume_name
4. 创建分布条带卷
一个大文件存储的时候划分条带,并且保存多份 应用场景:超大文件,并且对可靠性要求高 优点:大文件存储,可靠性高 缺点:牺牲空间写性能差 brick数量是stripe、replica的乘积
gluster volume create volume_name stripe 2 replica 2 node1:/data/br1 node2:/data/br1 node3:/data/br1 node4:/data/br1
gluster volume start volume_name
gluster volume info volume_name
5. 配置客户端挂载目录
mount -t glusterfs node1:volume_name /mysql
6. 设置开启自动挂载
echo "node4:jenkins_backup /tmp/test glusterfs defaults,_netdev 0 0" >>/etc/fstab
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号