如何防止Gluster的脑裂?

GlusterFS

1 什么是脑裂?

– 脑裂是两个或多个文件与复制副本存在差异
– 差异是由于没有足够的参考信息来选择出权威的副本来作为原始副本,所以坏副本也无法被修复

2 脑裂的原因

2.1 网络断开导致脑裂

– 假设有2块brick的副本对,分别是server1的brick1和server2的brick2
– Client1失去brick2的连接,Client2失去brick1的连接
– Client1往brick1写入了数据,Client2往brick2写入了数据

2.2 Gluster brick进程关闭或返回错误

– Server1处于关闭状态且Server2处于活动状态,客户端往Server2上写入了数据
– Server1启动后,Server2的数据还没有来得及复制到Server1上就被关闭
– 客户端往Server1上写入了数据后,Server2启动(此时两台Server都具有彼此独立的数据)

3 如何处理脑裂

由于本章的关键是如何预防脑裂,所以请自行参考官方链接,
https://docs.gluster.org/en/latest/Troubleshooting/resolving-splitbrain/

4 如何减少脑裂

4.1 减少脑裂的两种方法

– 增加仲裁卷
– 增加单数的副本
注:都需要通过配置glusterfs的client-quorum的选项来解决脑裂

4.2 客户仲裁

4.2.1 客户仲裁的概念

– 客户仲裁即Client Quorum
– 由自动文件复制(AFR)模块实现
– 该模块用于防止复制(分布式复制卷)的I/O路径脑裂
– 如果特定的子文件不瞒住客户端仲裁,则此文件变为只读(其他子目录仍具有读写权限)

4.2.2 两个副本卷的客户端仲裁

– 不能同时实现高可用性和数据一致性
– 如果client-quorum设置为auto,那么无论brick2状态如何,则brick1必须处于启动状态,如果只有brick2,则子卷只读
– 如果client-quorum设置为fixed且quorum-count设置为1,则会可能出现脑裂
– 如果client-quorum设置为fixed且quorum-count设置为2,则会可能任意一节点故障则高可用失败

4.2.3 三个副本卷的客户端仲裁

– 如果client-quorum设置为auto,卷要可写必须要2个brick同时运行才能满足仲裁数(推荐配置)
– 假设B1、B2、B3是3块brick
– 假设B1与B2正常,B3宕机,集群满足仲裁条件,数据写入B1与B2
– 假设B3恢复正常,B2宕机,集群依然满足仲裁条件,数据写入B1与B3
– 假设B2恢复正常,B1宕机,集群依然瞒住仲裁条件,但处理数据请求时,AFR发现B2与B3相互指责
– 由于B2表示某些写入在B3上待处理,而B3表示某些写入在B2上待处理,因此写入不允许且提示EIO(I/O error)

4.2.4 仲裁卷

– 加入仲裁卷,仲裁者(Arbiter)允许用户选择2个副本或3个副本的方案
– 仲裁者要求增加第三个副本(仲裁卷),但副本只要求存储文件名和元数据,不存储任何数据(不用投资存储空间)
– 仲裁者在客户端写入时获取完整的文件锁(副本3占用范围所)
– 如果2个brick已启动且其中一个是仲裁者
— 此时如果仲裁者认为其他正常的brick失败,则所有FOP(文件操作)将因为ENOTCONN(传输端点未连接)而失败
— 此时如果仲裁者没有认为其他正常的brick失败,则FOP被允许
– 如果2个brick已启动且仲裁者被关闭,则所有FOP被允许
– 如果只有1个brick,则不满足仲裁客户端的法定条件,则卷变成EROFS(可扩展的只读文件系统)
– 所有情况下,如果启动FOP之前只有一个源且FOP在该源上失败,则应用程序将收到ENOTCONN

4.3 三个副本卷与仲裁卷的差异

– 三个副本卷要求三个brick的大小相同,仲裁卷要求brick比其他brick要小(不用存数据)
– 仲裁卷仅存储另外两个副本的状态,如只有仲裁者和一个brick正常,如果仲裁认为另一个brick错误,则FOP不可用
– 与仲裁卷相比,三个副本卷具有高可用性(因为三个副本卷都有完整的数据)

4.4 创建三个副本卷与仲裁卷的命令

4.4.1 创建三个副本卷的命令

gluster volume create  replica 3 host1:brick1 host2:brick2 host3:brick3

4.4.2 创建仲裁卷的命令

gluster volume create  replica 3 arbiter 1 host1:brick1 host2:brick2 host3:brick3

注:通过arbiter关键字设置仲裁卷

参阅文档
===================
https://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/

没有评论

发表回复

GlusterFS
如何在RHEL8 部署Gluster客户端?

1 基础知识 1.1 Gluster卷的客户端类型 1.1.1 Gluster Native Cli …

GlusterFS
如何在RHEL8 部署Gluster服务端?

1 基础知识 1.1 Gluster的简介 – Gluster是一个可扩展的分布式文件系 …

GlusterFS
如何在RHEL8 编译安装Gluster?

1 前言 笔者之前使用yum部署过Gluster的服务,但最近笔者发现官方已经不再提供旧版本的rpm …