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

研究Glusterfs半年多了,通过实际操作以及源代码分析,对它有了越来越深的了解,由衷的赞叹Gluster的整体架构。今天时间不早了,想写点关于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冗余镜像(AFR)修复原理以及脑裂分析
http://www.iesool.com/forum.php?mod=viewthread&tid=90&fromuid=2
(出处: 吖Sool-社区)

时间: 2024-07-31 08:22:24

Glusterfs冗余镜像(AFR)修复原理以及脑裂分析的相关文章

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

裂脑 所谓脑裂,就是指两个或多个节点都"认为"自身是正常节点而互相"指责"对方,导致不能选取正确的节点进行接管或修复,导致脑裂状态.这种现象出现在数据修复.集群管理等等高可用场景. Glusterfs的冗余镜像(下文简称AFR)提供了数据副本功能,能够在即使只有一个冗余节点的情况下仍能正常工作,不中断上层应用.当节点恢复后,能够将数据修复到一致状态,保证数据的安全. AFR工作原理 AFR数据修复主要涉及三个方面:ENTRY,META,DATA,我们以冗余度为2即含

Android热修复原理普及

Android热修复原理普及 这段时间比较难闲,就抽空研究一下Android热修复的原理.自从Android热修复这项技术出现之后,随之而现的是多种热修复方案的出现.前两天又看到一篇文章分析了几种热修复方案的比较. 原文地址是:[Android热修复] 技术方案的选型与验证 看完这篇文章,有点汗颜.有这么多的热修复方案,并且他们之间的实现原理也不一样,各有优缺点. 然后在尼古拉斯_赵四的博客中看到几篇关于热修复的文章,对着这几篇文章撸了一番.大概的了解了热修复一种原理,其思路和QQ空间提出的安卓

使用jprobe构建镜像协议栈的原理与感悟

突然回想起了往事,那是2007年的冬天的一个周五,我在看我的老湿调试Linux协议栈的IP层,只见他修改了路由查找的逻辑,然后直接make install了一下就即时生效了,当时我只知道的是,修改了这个逻辑需要重新编译内核,而他并没有重新编译,好像只是编译了一个文件...编译内核这个耗时又无聊的工作阻碍了我对Linux内核的探索进度,直到今天,我依然对编译内核有相当的恐惧,不怕出错,而是怕磁盘空间不够,initrd的组装拆解之类,太繁琐了.我之所以知道2007年的那天是周五,是因为第二天我要加班

android热修复原理总结

背景 当app发布之后如果出现了紧急的线上bug,整个公司都会为此忙的焦头烂额,现公司如果线上出现严重的P1级bug,甚至大半夜整个项目组都得来紧急修复上线,而bug的原因可能仅仅是传错了参数,或者写错一行代码,而且修复后的app又得重新上架,直到用户更新后bug才会被修正.那热修复技术的出现就能很大程度上缓解这种情况,修复后不需要重新上架,用户也不需要重新下载安装. 原理 github上的热修复框架如nuwa,HotFix原理都是依据安卓App热补丁动态修复技术介绍和Android dex分包

Andfix热修复原理

一.前言 最近腾讯弄出一个Tinker热修复框架,那么本文先不介绍这个框架,先来介绍一下阿里的一个热修复框架AndFix,这个框架出来已经很长时间了,但是看网上没有太多非常详细的讲解,这里就来做一次分析.正好项目中要使用到.首先这个框架是开源的:https://github.com/alibaba/AndFix 其实在最早的时候我已经分析了阿里的另外一个热修复框架:Dexposed框架,还不了解的同学可以点击这里查看:Dexposed框架原理解析以及使用 当时介绍这个框架的时候发现他的实现原理很

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

数据库脑裂

Oracle RAC CSS提供2种后台服务包括群组管理(Group Managment简称GM)和节点监控(Node Monitor简称NM),其中GM管理组(group)和锁(lock)服务.在集群中任意时刻总有一个节点会充当GM主控节点(master node).集群中的其他节点串行地将GM请求发送到主控节点(master node),而master node将集群成员变更信息广播给集群中的其他节点.组成员关系(group membership)在每次发生集群重置(cluster reco

corosync+pacemaker 双节点脑裂问题

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