GlusterFS从这里开始

**

一、简介

**
GlusterFS是一个开源免费的分布式文件系统,具有完全去中心化、堆栈式设计、全局统一命名空间、高可用、高性能和横向扩展等特点。GlusterFS通过DHT算法,可轻松将集群规模扩展至上千节点,同时,官方推荐使用的“复制卷”可有效地使系统摆脱单点故障和单点性能瓶颈等多种难题。在CAP分布式系统基础理论的约束下,GlusterFS选择“AP”作为系统的核心宗旨,即保证系统具备最终一致性的前提下,尤其关注它在可用性方面的表现,因此在业界被广泛使用。本文主要针对GlusterFS 6.5版本在集群搭建、常规使用、生产调优、数据修复等方面的讨论(其他版本略有差异),讲述的大部分内容都为实操流程,极少涉及GlusterFS概念的讲解和设计的分析,如发现文章中有较为疑惑的地方,请您务必移读官方文档(见文末附录)。
注:如果您是Kubernetes用户,并且您想在Kubernetes中集成GlusterfS作为您的共享存储服务,那么您可以在我的另一篇文章《K8S共享存储—GlusterFS&Heketi》中获取指定的集成方案。

二、系统说明

GlusterFS主要分为Server端和Client端,其中server端主要包含glusterd和glusterfsd两种进程,分别用于管理GlusterFS系统进程本身(监听24007端口)和存储块—brick(一个brick对应一个glusterfsd进程,并监听49152+端口);GlusterFS的Client端支持NFS、CIFS、FTP、libgfapi以及基于FUSE的本机客户端等多种访问方式,生产中我们一般都会使用基于FUSE的客户端(其他的可以自行尝试)。GlusterFS的配置文件保存在/var/lib/glusterd下,日志保存在/var/log下。生产中建议搭建6台以上服务节点,卷类型使用分布式复制卷,副本数设为3,基本文件系统类型使用xfs。(brick数为副本数的倍数时,复制卷会自动转化为分布式复制卷)

**

三、系统安装

**

1、环境要求

CentOS7.6,关闭防火墙,可通过ssh互相登录,每个服务器有一块独立的硬盘。

2、服务器节点列表
系统环境 IP 别名 角色 存储设备 FS类型
CentOS7.6 192.168.3.110 solo0 server /dev/sdb xfs
CentOS7.6 192.168.3.111 solo1 server /dev/sdb xfs
CentOS7.6 192.168.3.112 solo2 server /dev/sdb xfs
CentOS7.6 192.168.3.113 solo3 client ----------- ----

说明:该服务器列表仅为测试用例使用。

3、 系统安装

(1)hostname设置及ssh免密登录设置:

(2)关闭防火墙:
systemctl stop iptables && systemctl disable iptables
systemctl stop firewalld && systemctl disable firewalld
(3)server端安装(6.5版本):
分别在solo0、solo1、solo2上执行命令
yum -y install glusterfs glusterfs-server
注:使用命令 yum -y search glusterfs --showduplicates 查看所有可用版本
(4)Server端启动、设置开机启动、查看状态:
systemctl start glusterd && systemctl enable glusterd && systemctl status glusterd
(5)配置可信池:
在任意节点执行命令,比如在solo0上执行
gluster peer probe solo1
gluster peer probe solo2
即可将solo1和solo2通过对等性探测加入glusterFS可信池。
(6)查看可信池状态:
任意机器执性命令
gluster peer status

4、创建glusterFS卷并挂载

(1)格式化存储存储空间:
以/dev/sdb为例,通过fdisk将其格式化为xfs文件系统类型
fdisk /dev/sdb
假设格式化后的分区为/dev/sdb1
注:格式化过程省略,如有疑问请查看:
https://cloud.tencent.com/developer/news/332952
如果没有xfs格式工具,请执行:yum -y install xfsprogs 进行安装
(2)挂载分区:
创建挂载点:mkdir -p /glusterfs/sdb
挂载硬盘分区:mount /dev/sdb1 /glusterfs/sdb
设置开机挂载:echo ‘/dev/sdb1 /glusterfs/sdb xfs defaults 1 2’ >> /etc/fstab
(3)创建glusterfs卷
在所有机器上创建brick : mkdir -p /glusterfs/sdb/brick1
创建分布式复制卷:
gluster volume create gs1 replica 2 solo0:/glusterfs/sdb/brick1 solo1:/glusterfs/sdb/brick1 solo2:/glusterfs/sdb/brick1
启动gs1卷:
gluster volume start gs1
(4)安装client端并挂载gs1卷:
在solo3上安装glusterFS 客户端:yum -y install glusterfs glusterfs-fuse
创建client端挂载点:mkdir -p /mnt/glusterfs/gs1
在client端挂载gs1卷:mount -t glusterfs solo0:/gs1 /mnt/glusterfs/gs1

**

四、系统管理

**

1、 节点管理

(1)节点状态
gluster peer status //在solo0上操作,只能看到其他节点solo0的连接状态
(2)添加节点
gluster peer probe HOSTNAME
例如:gluster peer probe solo2 //将solo2添加到存储池中
注意:如果遇到peer probe: failed: Probe returned with Transport endpoint is not connected
或者peer probe: failed: xxx is either already part of another cluster or having volumes configured
请检查防火墙(firewalld、iptables)配置!!!
(3)删除节点
gluster peer detach HOSTNAME
例如:gluster peer detach solo2 //将solo2从存储池中移除
注意:移除节点时,请确保该节点上没有brick,如有则需要提前将brick移除

2、 卷管理

(1)创建卷:
gluster volume create VOLNAME [transport [tcp | rdma | tcp,rdma]] HOSTNAME:/BRICK…
------创建分布式卷(DHT)
gluster volume create gs1 solo{0,1,2}:/glusterfs/sdb/brick1
说明:DHT卷将数据以哈希计算方式均匀分布到各个brick上,数据是以文件为单位存 取,卷的总容量和为各个brick的总和。
------创建副本卷(AFR)
gluster volume create gs1 replica 2 solo{0,1,2}:/glusterfs/sdb/brick1
说明:AFR卷提供数据副本,副本数通过replica设置。数据以文件为单位存储,文件 不分割;当brick数是副本的倍数时,卷类型自动变化为Replicated-Distributed卷。
------创建条带化卷(Stripe,条带卷已过时)
gluster volume create gs1 stripe 3 solo{0,1,2}:/glusterfs/sdb/brick1
说明:Stripe卷类似RAID0,将数据条带化,分布在不同的brick。该方式将文件分成 stripe块,分别进行存储,在大文件读取时有优势;当brick数等于stripe数的倍数时, 卷类型会自动变化为Stripe-Distributed卷。
------创建Replicated-Stripe-Distributed卷(条带卷已过时)
gluster volume create gs1 stripe 2 replica 2 solo{0,1,2}:/glusterfs/sdb/brick1 solo{0,1,2}:/glusterfs/sdb/brick2
说明:使用6个brick创建一个组合卷,即brick数是stripereplica的倍数,则创建三种 基本卷的组合卷,若刚好等于stripereplica则为stripe-Distrbuted卷。
PS.GlusterFS各种卷类型详细见官网:
https://docs.gluster.org/en/latest/Quick-Start-Guide/Architecture/
(2)卷信息:
gluster volume info
说明:该命令能够查看存储池中的当前卷的信息,包括卷方式、包涵的brick、卷的当前状态、卷名及UUID等。
(3)卷状态:
gluster volume status
说明:该命令能够查看当前卷的状态,包括其中各个brick的状态,NFS的服务状态及当前task执行情况,和一些系统设置状态等。
(4)启动/停止卷
gluster volume start/stop VOLNAME
说明:将创建的卷启动,才能进行客户端挂载;stop能够将系统卷停止,无法使用;此外gluster未提供restart的重启命令
(5)删除卷
gluster volume delete VOLNAME
说明:删除卷操作能够将整个卷删除,操作前提是需要将卷先停止;删除卷并不会删除卷中的数据,只会删除卷在GlusterFS中的配置信息

3、 Brick管理

(1)添加brick
gluster volume add-brick VOLNAME NEW-BRICK
例如:gluster volume add-brick gs1 solo3:/glusterfs/sdb/brick1
添加solo3上的/glusterfs/sdb/brick1到卷gs1上。
注意:若是副本卷或者条带卷,则一次添加的Bricks数是replica的整数倍;且添加brick后,原分布规则就会被打乱,所以一般还需要重新调整分布规则,详细见“扩容”。
(2)移除Brick
gluster volume remove-brick VOLNAME BRICK start/status/commit
gluster volume remove-brick gs1 start
说明:GlusterFS_3.4.1版本在执行移除Brick的时候会将数据迁移到其他可用的Brick上,并自动调整数据分布规则,当数据迁移结束之后才将Brick移除。执行start命令,开始迁移数据,正常移除Brick。
gluster volume remove-brick gs1 status
说明:在执行开始移除任务之后,可以使用status命令进行task状态查看。
gluster volume remove-brick gs1 commit
说明:使用commit命令执行Brick移除,则不会进行数据迁移而直接删除Brick,符合不需要数据迁移的用户需求。
注意:若是副本卷或者条带卷,则一次添加的Bricks数是replica的整数倍。
PS:系统的扩容及缩容可以通过如上节点管理、Brick管理组合达到目的。
(1)扩容时,可以先增加系统节点,然后再添加新增节点上的Brick即可。
(2)缩容时,一般先移除Brick,然后再通过节点删除来达到缩容的目的,且可保证数据不会丢失。
(3)增加/删除brick后,原有的数据分布规则都会被破坏,一般添加brick时需要手动进行负载均衡调整来重新生成分布策略,删除brick时系统内部会进行自动调整,无需手动进行调整。
(3)替换Brick
gluster volume replace-brick VOLNAME BRICKNEW-BRICK start/pause/abort/status/commit
gluster volume replace-brick gs1 solo0:/glusterfs/sdb/brick1 solo0:/glusterfs/sdb/brick11 start
说明:执行replcace-brick卷替换启动命令,使用start启动命令后,开始将solo0的brick1数据迁移到solo0的brick11上。
gluster volume replace-brick gs1 solo0:/glusterfs/sdb/brick1 solo0:/glusterfs/sdb/brick11 status
说明:在数据迁移的过程中,可以查看替换任务是否完成。
gluster volume replace-brick gs1 solo0:/glusterfs/sdb/brick1 solo0:/glusterfs/sdb/brick11 abort
说明:在数据迁移的过程中,可以执行abort命令终止Brick替换。
gluster volume replace-brick gs1 solo0:/glusterfs/sdb/brick1 solo0:/glusterfs/sdb/brick11 commit
说明:在数据迁移结束之后,执行commit命令结束任务,则进行Brick替换。使用volume info命令可以查看到Brick已经被替换。
PS.当发现复制卷中有部分数据损坏或与正确状态不统一,则可以使用替换brick的方式进行数据副本的修复。

**

五、功能扩展

**

1、存储配额

(1)开启/关闭存储配额
gluster volume quota VOLNAME enable/disable
说明:在使用存储配额功能时,需要使用enable将其开启;disable为关闭配额功能命令。
(2)设置(重置)目录配额
gluster volume quota VOLNAME limit-usage /directory limit-value
例如:gluster volume quota gs1 limit-usage /demoDir 10GB
设置gs1卷下的quota子目录的限额为10GB。
PS:这个目录是以系统挂载目录为根目录”/”,所以/demoDir即客户端挂载目录下的子目录demoDir
(3)配额查看
gluster volume quota VOLNAME list
gluster volume quota VOLNAME list /directory name
说明:可以使用如上两个命令进行系统卷的配额查看,第一个命令查看目的卷的所有配额设置,第二个命令则是执行目录进行查看。
PS.可以显示配额大小及当前使用容量,若无使用容量(最小0KB)则说明设置的目录可能是错误的(不存在)。

2、地域复制/数据迁移(geo-replication)

gluster volume geo-replication MASTER SLAVE start/status/stop
例如:gluster volume geo-replication gs1 soloX:/mnt/sdb1 start
说明:地域复制是系统提供的灾备功能,能够将系统的全部数据进行异步的增量备份到另外的磁盘中。
PS.开始执行将gs1卷的所有内容备份到soloX下的/mnt/sdb1中的任务,需要注意的是,这个备份目标不能是当前集群中的Brick;该功能可用于glusterFS的数据迁移。

3、权限管理

GlusterFS可以通过设置IP验证和SSL验证来限定客户端挂载权限,通过IP设定来达到权限控制的是一种比较简单且有效的方式;通过SSL的验证方式可通过官网进一步了解。
gluster volume set gs1 auth.allow 192.168..
说明:只有IP在192.168..内的客户端才可以成功挂载gs1卷。
gluster volume set gs1 auth.reject 192.168.
.

说明:IP在192.168.*.*内的客户端会被gs1卷拒绝挂载。
SSL验证:
https://docs.gluster.org/en/latest/Administrator%20Guide/SSL/

4、集群扩容

GlusterFS集群扩容非常简单,只需要在新建的glusterfs主机上执行命令:
gluster peer probe HOSTNAME即可平滑地将系统集群水平扩展

5、卷扩容

GlusterFS卷的扩容直接体现在对brick的扩充,即只需将卷管理的brick进行新增即可实现对卷的扩容。值得注意的时,当brick添加完以后,原有的数据分布策略就会失效,此时glusterfs会自动使用一个新的数据分布策略来完成后续的数据分布工作,但是这只能保证在此之后添加的数据会被均匀的存储到新增的brick上,之前已保存在其他brick上的数据并不会自动的迁移到该brick,所以这里就需要我们手动调整整体的数据分布。
gluster volume add-brick gs1 solo3:/glusterfs/sdb/brick1
说明:为gs1新增solo3上的glusterfs/sdb/brick1
gluster volume rebalance gs1 fix-layout start
说明:修复分布策略
gluster volume rebalance gs1 start force
说明:修复分布策略后再进行原始数据的迁移
gluster volume rebalance gs1 status
查看数据平衡任务的状态
gluster volume rebalance gs1 stop
停止数据平衡任务

6、I/O信息查看

GlusterFS提供接口查看一个卷中的每一个brick的IO信息。
gluster volume profile VOLNAME start
说明:启动profiling,之后则可以进行IO信息查看
gluster volume profile VOLNAME info
说明:查看IO信息,可以查看到每一个Brick的IO信息
gluster volume profile VOLNAME stop
说明:查看结束之后关闭profiling功能

7、brick性能监控

Top command 允许你查看bricks的性能例如:read, write, file open calls, file read calls, file write calls, directory open calls, and directory real calls,所有的查看都可以设置top数,默认100
gluster volume top VOLNAME open [brick BRICK-NAME] [list-cnt cnt]
说明:查看打开的fd
gluster volume top VOLNAME read [brick BRICK-NAME] [list-cnt cnt]
说明:查看调用次数最多的读调用
gluster volume top VOLNAME write [brick BRICK-NAME] [list-cnt cnt]
说明:查看调用次数最多的写调用
gluster volume top VOLNAME opendir [brick BRICK-NAME] [list-cnt cnt]
gluster volume top VOLNAME readdir [brick BRICK-NAME] [list-cnt cnt]
说明:查看次数最多的目录调用
gluster volume top VOLNAME read-perf [bs blk-size count count] [brick BRICK-NAME] [list-cnt cnt]
说明:查看每个Brick的读性能
gluster volume top VOLNAME write-perf [bs blk-size count count] [brick BRICK-NAME] [list-cnt cnt]
说明:查看每个Brick的写性能

8、容量监控

当你的集群已经部署到线上运行时,还有一件事可能也是你需要关心的,那就是集群状态的监控,比如每一块硬盘的使用率,每个brick的使用率,每个volume的状态等等。如果这个工作让你定期通过手动执行命令的方式去查看,我想要不了多久你就会奔溃,因此这里我们需要一个更加自动化、更加完善的监控平台去替我们做好这件事。在此我推荐你使用Prometheus监控!这是CNCF继Kubernetes开源的第二大人气产品,一款非常优秀的监控报警平台。我们只需要在Gluster的各个节点上安装Prometheus采集插件,这个插件就会自动帮我们收集当前节点上的Gluster节点、硬盘、卷的各种监控信息。
不过这里我并不打算对Prometheus的详细内容进行展开,因为Prometheus本身也是一个体系盘大的独立模块,而且这也不是本文要讨论的重点。但是为了能让大家更加直观、形象地看到我说的监控内容,这里我贴上一张简单的Grafana监控面板,同时还有Prometheus的项目地址和GlusterFS的采集插件地址,后面的配置和使用则请大家自行研究。
GlusterFS从这里开始_第1张图片
Prometheus官方下载地址:https://prometheus.io/download/
GlusterFS的采集插件地址:https://github.com/ofesseler/gluster_exporter

**

六、系统调优

**
前言:GlusterFS性能调优基本思路主要包括三个部分,分别是硬件调优、操作系统调优和GlusterFS自身参数调优。正常情况下,硬件调优方面gluster对cpu本身要求并不是很高,性能瓶颈往往会出现在网络和磁盘这两块,glusterFS官方推荐使用万兆网卡,对于对IO性能有特殊要求的服务,推荐使用SSD作为基本存储介质;其次是操作系统方面的调优,这方面的性能调优一般空间都是不是很大,因此不做详细讨论;最后就是glusterfs服务自身调优,glusterfs本身提供了很多配置参数供用户按需设置,这些调优参数对性能调优影响还是比较大的,在默认情况下,glusterfs性能相关中继器都是打开的,默认都会提供比较高的性能,但是还是会有一些调优的空间,其中一个最主要的原因是gluster默认配置应对的是普通服务器,对于部署在高性能服务器上的gluster来说,可调的空间就更大,原因是高性能服务器会提供更多内存和CPU。下面将介绍一些glusterfs常用的调优参数,生产环境中可以根据系统实际情况进行相应的配置。

1、仲裁器设置,默认值auto

gluster volume set gs1 cluster.quorum-type none/auto/fixed
说明:设置仲裁器类型,none表示不进行仲裁,auto表示副本写入成功数>=clie(replica/2)即表示写入成功,否则写入失败;fixed表示所有副本都写入成功才算成功。
gluster volume set gs1 cluster.quorum-count 2
说明:该选项在cluster.quorum-type值为fixed时有意义,在auto时无意义,表示仲裁数
详见官方文档:
https://docs.gluster.org/en/latest/Administrator%20Guide/arbiter-volumes-and-quorum/#arbiter-configuration

2、设置读cache大小, 默认32MB

gluster volume set gs1 performance.cache-size 32MB

3、设置缓存验证周期,默认1s

gluster volume set gs1 performance.cache-refresh-timeout 3

4、设置io线程,默认16

gluster volume set gs1 performance.io-thread-count 16
说明:根据硬件实际情况设定,太大会导致进程崩溃

5、设置客户端网络检测时间, 默认42s

gluster volume set gs1 network.ping-timeout 30

6、设置写缓冲区的大小, 默认1M

gluster volume set gs1 performance.write-behind-window-size 8MB
说明:这个配置可以参照具体业务来设定,如果是存取大文件,则可相应调大,
如果是存取小文件,可适当调小(这就类似于你自己编写一个IO流写入操作,
一般都先申请一块内存空间当做缓冲区,待缓存区满后再将数据写入磁盘)

7、设置磁盘剩余阈值

gluster volume set gs1 cluster.min-free-disk 10%
说明:剩余磁盘空间阈值,超出将进行数据均衡并记录日志,对不均匀的brick更有用

8、设置请求等待时间,默认1800s

gluster volume set gs1 network.frame-timeout 600
说明:如果服务器不相应某个操作,则在这段时间内都不对该操作做出响应

9、开启副本卷自动修复,默认关闭,建议开启

gluster volume set gs1 cluster.self-heal-daemon enable

10、开启BitRot检测,默认关闭

gluster volume bitrot gs1 enable/disable
调整BitRot检测的模式
volume bitrot gs1 scrub-throttle lazy/normal/aggressive
调整BitRot检测的周期
volume bitrot gs1 scrub-frequency daily/weekly/biweekly/monthly

11、开启RDMA数据传输协议

需要在各Node节点安装RDMA服务(升级Linux内核),集群较大或存储较大文件时建议采用。目前只有FUSE客户端和gNFS服务器支持RDMA传输。
详情请看官方文档:
https://docs.gluster.org/en/latest/Administrator%20Guide/RDMA%20Transport/

12、其他优化建议

每个卷最大客户端数量<= 1000
每节点brick数量4-8
单个brick容量<= 100 TB
brick文件系统采用xfs
建议生产环境使用分布式复制卷,减少脑裂发生;条带卷在新版本中已被标记为废弃;
其他优化配置项请见官方文档:
https://docs.gluster.org/en/latest/Administrator%20Guide/Managing%20Volumes/

**

七、数据修复

**

1、某一节点配置信息不一致

修复方法(假设solo2配置故障):
(1)重启glusterd服务
(2)重新进行对等性探测gluster peer probe
(3)执行命令gluster volume sync solo0 all

2、复制卷某一副本数据不一致

修复方法(假设solo2副本故障):
(1)使用临时brick替换副本gluster volume replace-brick gs1 solo2:/glusterfs/sdb/brick1 solo2:/glusterfs/sdb/brick11 commit force
(2)再将副本替换替换gluster volume replace-brick gs1 solo2:/glusterfs/sdb/brick11 solo2:/glusterfs/sdb/brick1 commit force
说明:该类数据副本故障一般是由于没有通过标准客户端操作,而直接手动修改brick 中的数据造成的;如果是网络抖动导致的glusterfs数据故障,一般glusterfs通过 changelog进行自动修复。

3、复制卷脑裂

· 说明:当复制卷副本设置为3时(大于1的奇数个),一般不会出现脑裂的情况,因为glusterd会保证只有当文件写入成功数超过ceil(replica/2)时才认为该文件被正确写入,否则会将异常抛向客户端,告知客户端该文件写入失败,并且当副本为3时,如果两台机器上的glusterd进程死掉的话,客户端就无法挂载和使用卷,这从源头上就防止了脑裂的发生;但是如果副本数被设定为2时,则数据副本在发生脑裂时系统就无法通过仲裁来判断谁才是正确的副本了;当用户设置副本为2时系统会发出相关警告,如下图:
在这里插入图片描述
·当发生数据副本脑裂时,查看文件时glusterFS就会抛出I/O异常,如下图:
在这里插入图片描述
·脑裂一般分为以下几种情况:
*数据裂脑:文件中的数据在副本集中的实体上有所不同
*元数据拆分式:多个brick上的元数据不同
*Entry/ GFID裂脑:文件副本的GFID不同。该种脑裂无法自动修复。
·PS.制造脑裂方式:两个副本,启动solo2,关闭solo1,挂载volume后修改一文件;启 动solo1关闭solo2,挂载volume后修改同一文件;再启动solo2后该文件两副本不 一致,发生脑裂。脑裂一般发生于网络抖动或服务节点宕机的场景下。

·服务端修复脑裂方法:
(1)查看存在脑裂的副本卷
gluster volume heal gs2 info 显示所有需要修复的文件
gluster volume heal gs2 info split-brain 只显示脑裂文件
注意,对于GFID裂脑(相同的文件名,但GFID不同),其父目录被列出在脑裂条目中
效果如下图所示:
GlusterFS从这里开始_第2张图片GlusterFS从这里开始_第3张图片

(2)策略一:选择较大的文件作为源修复,不适用于修复GFID脑裂
①找到脑裂文件在brick中的路径,一般可根据gluster volume heal gs2 info命令 得知
②执行stat file查看各个副本的大小和MD5值:
GlusterFS从这里开始_第4张图片GlusterFS从这里开始_第5张图片
③服务端执行命令gluster volume heal gs4 split-brain bigger-file /jiangchao.txt修 复 脑裂文件。注意:/jiangchao.txt为文件在gs4卷中的路径
④再次查看文件的MD5值,发现两副本相同。
在这里插入图片描述
在这里插入图片描述

策略二:选择最新的mtime作为源修复,不适用于修复GFID脑裂
方式基本同上(使用stat file比较文件副本修改时间)

策略三:选择副本中的一个brick作为特定源进行修复,不适用于修复GFID脑裂 执行命令: gluster volume heal gs1 split-brain source-brick hostname:brick [file]
例如:
例1、gluster volume heal gs1 split-brain source-brick solo0:/sdb/brick1 /jiang.txt 说明:/jiang.txt表示文件在gs1卷中的路径

例2、gluster volume heal gs1 split-brain source-brick solo0:/sdb/brick1 gfid:c3c94de2-232d-4083-b534-5da17fc476ac 说明:gfid值可以通过下列命令获取,GlusterFS系统每一个文件都会有一个为一 个GFID值。 获取元数据命令:getfattr -d -e hex -m. file file为在brick中的路径

例3、gluster volume heal gs1 split-brain source-brick solo0:/sdb/brick1
说明:选择一个副本的brick所有数据作为源进行修复

总结:以上修复脑裂方式全部需要在GlusterFS的server端进行

·客户端(不适用于NFS的mount点)修复脑裂方法,不适用于修复GFID脑裂:
(1)、查看文件脑裂状态,无法查看文件夹及GFID类型的脑裂状态
getfattr -n replica.split-brain-status file
在这里插入图片描述
文件处于脑裂状态时,读取文件会发生I/O异常。
在这里插入图片描述
(2)、设置文件裂脑选择
setfattr -n replica.split-brain-choice -v gs4-client-0 file
此时再读取文件时就会读取到gs4-client-0中的文件,可通过该方法获取查看各个副本, 并确定正确的副本;
gs4-client-0为文件元数据,按volname-client-index显示。

(3)、撤消文件裂脑选择
setfattr -n replica.split-brain-choice -v none file

(4)、通过步骤2得知正确副本,解决脑裂文件
setfattr -n replica.split-brain-heal-finalize -v
例如上图显示/glusterfs/gs4/chao/jiang.txt为内容脑裂文件,可选索引为“gs4-client-0” 和“gs4-client-1”,假设通过对比发现应以“gs4-client-0”为源去修复该文件,则在进 入挂载点/glusterfs/gs4/chao/目录下输入命令:
setfattr -n replica.split-brain-heal-finalize -v gs4-client-0 jiang.txt
即可将脑裂文件修复为“gs4-client-0”的副本。
注意:如果fopen-keep-cache被禁用,则每次选择一个新的replica.split-brain-choice 检 查文件之前,需要使inode无效,执行命令:
setfattr -n inode-invalidate -v 0

·脑裂的自动决策:
(1)设置卷的脑裂决策策略
gluster volume set volname cluster.favorite-child-policy size/ctime/mtime/majority
说明:此选项可用于使用相应的策略自动解决脑裂问题,而无需用户干预。“size” 选择大小最大的文件作为源。“ctime”和“mtime”分别选择最新ctime和mtime作 为源的文件。“majority”在副本中超过一半的砖块中选择具有相同时间和大小的文件

**

附录

**
参考链接:
官方网站 https://www.gluster.org/
官方文档 https://docs.gluster.org/en/latest/
xfs vs ext4性能压测对比 https://cloud.tencent.com/developer/article/1460643
GlusterFS元数据机制分析 https://blog.csdn.net/liuaigui/article/details/100060564
深入理解GlusterFS之数据均衡 http://blog.itpub.net/31547898/viewspace-2168800/

你可能感兴趣的:(GlusterFS从这里开始)