文档章节

DRBD的元数据实现:GI元组的原理

dhb_oschina
 dhb_oschina
发布于 2016/04/01 19:54
字数 1091
阅读 312
收藏 5

一、GI元组

DRBD使用代标识GI tuple来确定复制数据的“代”,通过GI tuple,DRBD可以确定两个节点是不是属于同一集群的事实(而不是意外连接的两个节点),确定重新同步时同步的方向(如果必要的话) ,确定是完全重新同步或者是部分重新同步是否满足需求以及确认是否发生了裂脑。因此,GI的使用在DRBD的算法中是非常重要的。

GI元组(GI tuple)由一个CurrentUUID、一个BitmapUUID和两个HistoryUUID组成,每个新的数据生成的标识都由一个8字节的、全局唯一的标识符(UUID)标志。如下图所示:

  • CurrentUUID:当前数据代的UUID,当一个资源连接并完全同步即磁盘状态为UpToDate时,两节点之间的UUID是相同的。
  • BitmapUUID:磁盘的同步位图的变化跟踪代的UUID。只有在断开模式磁盘上的同步位图才与该标识符有关。如果资源是连通的,此UUID总是空。
  • HistoryUUID:用于保存前几代的两个数据的标识符。

image

一般来说,会有如下三种情况下,DRBD会产生一个新的GI数据代:

  • 最初设备的初始化完全同步
  • 一个断开连接的资源切换到主角色(Primary)
  • 主角色的资源断开连接

 

注意,只要资源处于连接状态,且两个节点的磁盘状态为UpToDate,那么目前两个节点上的GI元组就是相同的。

二、GI元组的变化过程

image

 

三、通过GI元组识别集群节点的状态

(1) 新配置的资源

特征:两个节点上的currentUUID为空

image

一个新配置的资源,没有进行完整设备初始同步。

必须手动启动。

 

(2) 初始节点建立网络连接

特征:本地节点有currentUUID,对等节点currentUUID为空。

image

当节点间建立连接后,两节点交换GI tuple表示状态。

这是一个新配置的资源
刚启动初始设备完全同步的正常情况
此时,本地节点被选中作为初始同步源
DRBD设置磁盘上的同步位图(这意味着它进行整个设备同步)的所有位。并开始作为一个同步源进行同步。

 

(3) 本地节点Node1为Primary,Node2为Secondary时,Secondary节点故障

特征:当前节点的BitmapUUID与对等节点的CurrentUUID一致,且对等节点的的BitmapUUID为空。

image

当前节点为主节点,对等节点为次节点
次节点发生故障
这意味着在此期间对等节点从来没有升级为Primary,并在相同的数据生成的基础上都单独工作。
现在DRBD正常启动后,本地成为同步源节点,后台重新同步。

 

(4)两个节点共有一个祖先UUID,且对等节点有最新的数据

特征:当前节点的CurrentUUID与对等节点的HistoryUUID之一相同

image

 

两个节点共有一个祖先UUID
对等节点有最新的数据,但是保存在对等节点Bitmap中的数据是过时和不能被使用的。
此时,一个正常的同步是不够的。
需要本地节点作为同步目标,DRBD标识整个设备out-of-syn,并初始化全部进行重新同步

 

(5)裂脑情况1

特征:本地节点的CurrentUUID 和对等节点的CurrentUUID不同,而两节点BitmapUUID的匹配

image

 

这就是裂脑,split-brain
此时前一个数据代是相同的父代。
可以调用裂脑自动恢复策略(如果有配置),否则,DRBD断开连接,并等待人工脑裂进行处理。

(6)裂脑情况2

特征:两节点的CurrentUUID 和BitmapUUID都不匹配。

image

这也裂脑且不是相同的父代(ancestor generations)
此时,即使配置自动恢复策略,也没有用。
DRBD将断开连接,并等待人工脑裂进行处理。

(7) 集群中两个彼此之间并不认识节点
特征:两个GI元组没有一个匹配的UUID

image

这是DRBD意外连接集群中两个彼此之间并不认识节点。
DRBD仅记录一个无关数据的警告log,然后断开连接。

© 著作权归作者所有

dhb_oschina
粉丝 10
博文 221
码字总数 190651
作品 0
程序员
私信 提问
高可用分布式存储(Corosync+Pacemaker+DRBD+MooseFS)

高可用分布式存储(Corosync+Pacemaker+DRBD+MooseFS) 配置步骤: (1) 安装与配置DRBD编译安装Master-server (2)安装配置使用pcs安装corosync+pacemaker (3)安装crm配置安装mfs+DRBD+...

legehappy
2017/10/30
0
0
CentOS 6.4 & 6.5下DRBD的安装配置

基础: 磁盘镜像技术DRBD DRBD(Distributed Replicated Block Device)是由内核模块和相关脚本构成,用以构建高可用性的集群。其实现方式是通过网络来镜像整个设备。它允许用户在远程机器上建立...

eui988
2015/01/31
108
0
PostgreSQL HOT_STANDBY_FEEDBACK

使用 PostgreSQL 流复制搭建备库时,可以为备库指定一个参数 ,本文介绍引入该参数的原因以及它的工作原理。 VACUUM PostgreSQL 中的数据是用堆表组织的,为支持 MVCC(Multi-Version Concu...

东明
2018/11/20
0
0
PgSQL · 特性介绍 · 列存元数据扫描介绍

摘要 本文通过对于阿里云分析型数据库HybridDB for postgresql 数据库的列存扫描的优化特征的解析,让大家了解列存元数据扫描是如何达到提升查询扫描的速度的效果。从而使的分析型查询执行时...

阿里云RDS-数据库内核组
2017/08/03
0
0
corosync+pacemaker+drbd+mfs高可用

mfs是一个网络分布式文件系统,将文件存储在多个服务器,但呈现给客户端的事统一的内容。这里我的思路是将mfs的两台MASTER做一个高可用,首先先建立drbd,然后在挂载的目录上编译安装drbd,这...

狼叔LSF
2017/10/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CSS--属性

一、溢出 当内容多,元素区域小的时候,就会产生溢出效果,默认是纵向溢出 横向溢出:在内容和容器之间再套一层容器,并且内部容器要比外部容器宽 属性:overflow/overflow-x/overflow-y 取值...

wytao1995
35分钟前
4
0
Confluence 6.15 使用附件宏

希望添加附件宏到一个页面中: 从编辑工具栏中,选择 插入(Insert) > 其他宏(Other Macros) 找到并且选择需要的宏。 可用使用自动完成加快这个过程:输入 { 然后开始输入你希望插入的宏的...

honeymoose
55分钟前
4
0
精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
今天
6
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
今天
3
0
jenkins 插件下载加速最终方案

推荐做法 1、告诉jenkins 我哪些插件需要更新 jenkins插件清华大学镜像地址 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 1.进入jenkins系统管理 2.进入插件管...

vasks
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部