GlusterFS复制卷修复原理以及脑裂分析

裂脑

所谓脑裂,就是指两个或多个节点都“认为”自身是正常节点而互相“指责”对方,导致不能选取正确的节点进行接管或修复,导致脑裂状态。这种现象出现在数据修复、集群管理等等高可用场景。

Glusterfs的冗余镜像(下文简称AFR)提供了数据副本功能,能够在即使只有一个冗余节点的情况下仍能正常工作,不中断上层应用。当节点恢复后,能够将数据修复到一致状态,保证数据的安全。


AFR工作原理

AFR数据修复主要涉及三个方面:ENTRY,META,DATA,我们以冗余度为2即含有两个副本A和B的DATA修复为例进行讲解。记录描述副本状态的称之为ChangeLog,记录在每个副本文件扩展属性里,读入内存后以矩阵形式判断是否需要修复以及要以哪个副本为Source进行修复。初始值以及正常值为0.(注:ENTRY和META,DATA分布对应着一个数值)。

Write的步骤可分解为:

1)下发Write操作。

2)加锁Lock。

3)向A,B副本的ChangeLog分别加1,记录到各个副本的扩展属性中。

4)对A,B副本进行写操作。

5)若该副本写成功则ChangeLog减1,若该副本写失败则ChangLog值不变,记录到各个副本的扩展属性中。

6)解锁UnLock。

7)向上层返回,只要有一个副本写成功就返回成功。

上述在AFR中是完整的一个transaction动作。根据两个副本记录的ChangeLog的数值确定了副本的几种状态:

1)WISE,智慧的,即该副本的ChangeLog中对方对应的数值大于0而且自身对应的数值等于0.

2)INNOCENT,无辜的,即该副本上的ChangeLog即不指责对方也指责自己,ChangeLog全为0.

3)FOOL,愚蠢的,即该副本上的ChangeLog是指责自己的。

4)IGNORANT,忽略的,即该副本的ChangeLog丢失。

所以一般情况下,会选取WISE的副本作为Sourse进行修复。但是当两个节点都是WISE状态时,这就出现了声名狼藉的脑裂状态。

AFR脑裂

两个副本均为WISE时发生脑裂,那么在哪种场景下会产生脑裂呢?我们还是以冗余度为2的情况举一个简单的例子:

某文件X的两个副本位于物理机A和物理机B上,在A和B上分别运行着进程a和进程b,a和b持续通过各自所在的物理机上的客户端对文件X进行不同的写操作。然后物理机A和B之间网络中断,因为AFR在一个副本的情况下仍能不中断上层应用,所以进程a和进程b仍会持续运行,但因为网络中断,文件X在A和B上的副本数据不再一致且都认为对方是异常的,当网络恢复时,两个副本互相“指责”,即出现了脑裂。

当然这是脑裂发生的场景之一,有时候是有可能发生脑裂,而有时候是必然发生脑裂。脑裂,也是很多人关心的一个问题,不能一概而论。

关于脑裂,不同的场景处理方法也是不同的,甚至某些场景的脑裂是无法避免的,只能尽量避免脑裂的发生。

如何预防裂脑

预防裂脑,可以配置服务器端和客户端的仲裁机制。

客户端和服务器端仲裁对比可见:GlusterFS 客户端与服务器端仲裁机制对比

参考资料说明

绝大多数内容来自:GlusterFS冗余镜像(AFR)修复原理以及脑裂分析,写的不错,做了一些的小的改动,特别是对裂脑的态度。这里标成原创,提高曝光率。

时间: 2024-10-14 18:58:19

GlusterFS复制卷修复原理以及脑裂分析的相关文章

Glusterfs冗余镜像(AFR)修复原理以及脑裂分析

研究Glusterfs半年多了,通过实际操作以及源代码分析,对它有了越来越深的了解,由衷的赞叹Gluster的整体架构.今天时间不早了,想写点关于Glusterfs的冗余镜像产生脑裂的原因. 首先,简单描述一下脑裂,所谓脑裂,就是指两个或多个节点都“认为”自身是正常节点而互相“指责”对方,导致不能选取正确的节点进行接管或修复,导致脑裂状态.这种现象出现在数据修复.集群管理等等高可用场景. Glusterfs的冗余镜像(下文简称AFR)提供了数据副本功能,能够在即使只有一个冗余节点的情况下仍能正常

GlusterFS复制卷修复功能测试分析--brick文件丢失

0.测试环境 GlusterFS 3.6.4/3.6.7/3.6.9 CentOS 6.7/7.1 1.测试用例及结果一 假设A.B副本主机,C客户机,C挂载到A. 先通过C在卷中创建1到99文件. 测试一: A上删除 rm -f 2*,A执行heal full,看是否恢复,如果不行,再在B上执行heal full,A上看文件是否恢复.操作期间不要在C上ls. A上删除 rm -f 3*,只在C上ls,C上看是否有3*,A上看是否恢复. 测试二: A上删除 rm -f 4*,同时删除对应gfid

glusterfs复制卷的创建以及glusterfs的常用命令

一.           安装glusterfs服务端 1.  到阿里云取epel源,和官方的yum源才能安装.(本次把几个个yum源放到附件) yuminstall glusterfs-server装完即可 启动glusterd [[email protected]]# systemctl start glusterd [[email protected]]# ps -ef | grep gluster root      4732    1  0 16:22 ?        00:00:0

GlusterFS六大卷模式說明

GlusterFS六大卷說明 第一,分佈卷 在分布式卷文件被随机地分布在整个砖的体积.使用分布式卷,你需要扩展存储,冗余是重要或提供其他硬件/软件层.(簡介:分布式卷,文件通过hash算法随机的分布到由bricks组成的卷上.卷中资源仅在一台服务器上存储,在存储池中非镜像或条带模式.) (In a distributed volumes files are spread randomly across the bricks in the volume. Use distributed volum

corosync+pacemaker 双节点脑裂问题

0.引入 corosync作为HA方案中成员管理层(membership layer),负责集群成员管理.通信方式(单播.广播.组播)等功能,pacemaker作为CRM层.在利用corosync+pacemaker 主备模式实践中,遇到一个问题,即脑裂问题.何谓脑裂: 在HA集群中,节点间通过心跳线进行网络通信,一旦心跳网络异常.导致成员互不相认,各自作为集群中的DC,这样资源同时会在主.备两节点启动.脑裂是corosync还是pacemaker导致的呢?一开始我认为是corosync,原因在

Linux DNS视图脑裂的实例操作(四)

DNS视图 bind view:  视图,脑裂(split-brain)双线接入.如:电信和联通双线接入  根据客户端来源的不同,将同一个名称解析至不同的地址: 案例:我们接下来配置内外网双向解析DNS服务器:同一个名称解析,分配给不同的IP地址 实验条件:我们这里为了方便理解操作直接在服务器上添加了两块网卡,(实际操作中只要能和DNS服务器能通信即可)实际操作如下!! 我们是讲解的方法:方便操作设置以下地址(你懂得.)   实例: 主配置:主配置文件主要设置,把根域复制到辅配置文件中,看配置文

【转载】GlusterFS六大卷模式說明

本文转载自翱翔的水滴<GlusterFS六大卷模式說明> GlusterFS六大卷說明 第一,分佈卷 在分布式卷文件被随机地分布在整个砖的体积.使用分布式卷,你需要扩展存储,冗余是重要或提供其他硬件/软件层.(簡介:分布式卷,文件通过hash算法随机的分布到由bricks组成的卷上.卷中资源仅在一台服务器上存储,在存储池中非镜像或条带模式.) (In a distributed volumes files are spread randomly across the bricks in the

keepalive和脑裂问题

keepalive keepalive起初专门为lvs负载均衡软件设计的,用来管理监控lvs集群系统中各个服务节点的状态,后来又加入了可以实现高可用的vrrp功能. keepalive软件通过vrrp协议实现高可用功能的.VRRP(虚拟路由器冗余协议)目的就是为了解决静态路由单点故障问题,竞选机制来将路由的任务交给某台VRRP路由器的,保证节点宕机,整个网络可以不间断的运行 Keepalived可以实现任意两台主机之间,例如Master和Backup主机之间的故障转移和自动切换,这个主机可以是普

说说Keepalived的脑裂

1. 工作场景 Keepalived提供了Loadbalancing和High-Availability的功能, 本文说的是其为2个Mycat节点提供HA功能的场景. 2. 关键配置如下, 为主备非抢占模式. ! mycat01, 192.168.4.196 global_defs { # 一个keepalived.conf, 对应一个router_id router_id mycat01 } vrrp_instance VI_1 { state BACKUP nopreempt interfa