DRBD原理及特性概述

Distributed Replicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。其核心功能通过Linux的内核实现,比文件系统更加靠近操作系统内核及IO栈。DRBD是由内核模块和相关脚本而构成,用以构建高可用性的集群。其实现方式是通过网络来镜像整个设备。你可以把它看作是一种网络RAID。它允许用户在远程机器上建立一个本地块设备的实时镜像。

一、DRBD镜像特性及其工作原理

1、特性

实时性: 当应用对磁盘的数据进行修改时,复制立即发生。

透明性: 应用程序的数据存储在镜像设备上是独立和透明的,数据可存储在不同的服务器上。

同步镜像和异步镜像:

a、同步镜像,当本地发申请进行写操作进行时,同步写到两台服务器上。

b、异步镜像,当本地写申请已经完成对本地的写操作时,开始对对应的服务器进行写操作。

2、原理图

file system->buffer cache ->drbd->disk scheduler->disk drivers

二、DRBD基础特性

1、资源

DRBD主要是对磁盘资源的管控,因此在DRBD模块中,资源是所有可复制移动存储设备的总称。
资源名:
    资源名可以指定除了空格外 us-ascii 中的任意字符。
DRBD 设备:
    DRBD 的虚拟块设备。它有一个主设备号为 147 的设备,默认的它的次要号码编从 0 开始。
    相关的块设备需命名为/ dev/ drbdm,其中 M 是设备的次要号码。
磁盘配置:
    DRBD 内部应用需要本地数据副本,元数据。
网络配置:
    各个对等接点间需要进行数据通信。

2、资源角色

DRBD角色: primary<->secondary
主:  在主 DRBD 设备中可以进行不受限制的读和写的操作。
    他可用来创建和挂载文件系统、初始化或者是直接 I/O 的快设备,等等。
备:
    接收所有来自对等节点的更新,不能被应用也不能被读写访问。主要目的是保持缓冲及数据一致性。
人工干预和管理程序的自动聚类算法都可以改变资源的角色。资源可以由被变换为主,以及主到备。

3、特性

支持复制传输数据完整性验证(验证算法:MD5、SHA-1、CRC-32C)

此特性针对在复制过程中由于网络传输原因导致的数据不一致。 DRBD对每个
要复制的块生成一个校验和(摘要信息),用来对peer端数据进行完整性校验,如果接收到的
块的校验和与source端的校验和不一致,将会要求重传。

resource <resource>
net {
data-integrity-alg <algorithm>;
}
...
}

支持在线设备验证

如果我们不在传输过程中对数据进行校验,我们仍然可以采用在线设备验证的方
式,原理同上,我们可以采用定时任务周期性的对数据进行验证。
默认情况下在线设备验证是未启用的,可以在配置文件/etc/drbd.conf添加。

resource <resource>
net {
verify-alg <algorithm>;
}
...
}

验证命令: drbdadm verify <resource>

磁盘IO错误处理策略

磁盘出现IO错误时候,我们应该采用何种策略呢?
DRBD提供三种策略,分别是: detach 、 pass_on 、 call-local-io-error。
detach
    这是默认和推荐的选项。如果在节点上发生底层的磁盘 I/O 错误,它会将设备
    运行在 diskless 无盘模式下。所有的对节点的读写将会从对端节点进行,这种情况下虽然性能有所下降,
    但是仍然可以提供服务,很明显在高可用的情况下,这个策略使我们的首选。
pass_on
    drbd 会将 I/O 错误报告到上层。在主节点上,它会将其报告给挂载的文件系统,
    但是在此节点上就往往忽略(因此此节点上没有可以报告的上层)

local-io-error
    调用本地磁盘 I/O 处理程序中定义的命令。 这就需要有相应有让 local-io-error
    调用的资源处理程序处理错误的命令。这就给管理员留有足够自由的权力使用命令或者是脚
    本调用 local-io-error 处理 I/O 错误。

resource <resource> {
disk {
on-io-error <strategy>;
...
}
...
}

过期数据处理策略

过期数据不是不一致性数据,只是说secondary不再与priamry同步数据了, secondary相当于是
一个snapshot,这时候如果发生切换,那么可想而知,数据的一致性就会出现问题,我们需要通
过某些策略来防止这种情况的发生:当出现过期数据的时候, drbd的连接状态将会由connect变为
Wfconnection,这时候Pacemaker不会允许过期数据的节点提升为primary

暂停复制

对于一些网络状态不好的情况,如果我们采用协议C进行复制,那么数据复制延时将会很严重,
这时候我们可以采用暂停复制的策略,这样当网络状况不好的时候, primary端将会暂停复制,
primary和secondary将会处于链式的不同步状态,当带宽变为可用的时候,复制将会继续进行。

同步速率配置

可以根据网络带宽或网络资源状况配置同步速率以及使用临时速率,可变速率等。
同步速率设置的超过网络的最大可用带宽也是没有任何意义的。
请注意,同步的速率是 bytes 字节,而不是 bits/s。
resource <resource>
disk {
sync-rate 40M;
...
}
...
}
根据经验同步速率比较合理的是可用带宽的 30%。
计算公式:   MIN(I/O子系统,网络I/O)*0.3
假定一个 I/O 子系统能支持 180MB/s 的吞吐量, 而千兆网络可支持 110MB/s,
此时网络带宽会成为瓶颈,可以计算出,同步速率:110*0.3=33MB/s

假定一个 I/O 子系统能支持 80MB/s 的吞吐量,而千兆网络可支持 110MB/s,
此时磁盘I/O会成为瓶颈,可以计算出,同步速率:80*0.3=24MB/s

脑裂通知和自动恢复

split brain实际上是指在某种情况下,造成drbd的两个节点断开连接,都以primary的身份来运行。当drbd某primary节点连接对方节点准备发送信息的时候如果发现对方也是primary状态,那么会立刻自行断开连接,并认定当前已经发生split brain了,这时候他会在系统日志中记录以下信息:“Split-Brain detected,dropping connection!”当发生split brain之后,如果查看连接状态,其中至少会有一个是StandAlone状态,另外一个可能也是StandAlone(如果是同时发现split brain状态),也有可能是WFConnection的状态。

自动处理:
    a、 Discarding modifications made on the younger primary
        ---后切换成primary角色的节点数据将会被丢弃
    b、 Discarding modifications made on the older primary
        ---先切换成primary角色的节点数据将会被丢弃
    c、 Discarding modifications on the primary with fewer changes
        --–哪个节点更改的数据少就丢弃
    d、 Graceful recovery from split brain if one host has had no intermediate changes
        ---如果有节点根本没有更新数据,就直接恢复

drbd 脑裂主要在 net 配置,有以下关键字:
after-sb-0pri:裂脑已经被探测到,但是现在没有节点处于主角色,对于这个选项, drbd 有以下关键字:
    disconnect:
        不需要自动恢复,仅仅是调用裂脑处理程序的脚本(如果配置了),断开连接并出在断开模式。
    discard-younger-primary:
        放弃和回滚最后成为主的上面所做的修改。
    discard-least-changes:
        放弃和回滚,变动比较少的主机上的修改。
    discard-zero-changes:
        如果任何节点都没有发生任何变化,仅仅申请在一个节点上做出继续修改即可。

after-sb-1pri:裂脑已经被探测到,现有有一个节点处于主角色,对于这个选项, drbd 有以下关键字:
disconnect:
    和 after-sb-0pri 一样, 调用裂脑处理程序的脚本(如果配置了),断开连接并出在断开模式。
consensus:
    和 after-sb-0pri 中同样的修复策略。 如果利用这些策略裂脑危害能选择,那就能自动解决。 否则,同样断开指定的动作。
call-pri-lost-after-sb:
    和 after-sb-0pri 中同样的修复策略。如果利用这些策略裂脑危害能选择,就在受危害的节点上调用
    pri-lost-after-sb 程序。这个程序必须确认在 handlers 中配置,并考虑到从集群中移除该节点。
discard-secondary:
    不管哪个主机只要处于次角色,都是裂脑的危害者。

after-sb-2pri:在两个节点都处于主角色时,裂脑被发现。次选项使用和after-sb-1pri同样的关键字,丢弃次节点并达成共识。

配置示例:
resource <resource> {
handlers {
split-brain "/usr/lib/drbd/notify-split-brain.sh root" //<handler>可能是目前系统中一个可执行的文件。
...                                        //e.g. split-brain "/usr/lib/drbd/notify-split-brain.sh root";
}                                          //如上通过电子邮件的方式发送到指定的地址。
net {
after-sb-0pri discard-zero-changes;        //脑裂的相关自动修复策略
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
...
}
...

手动处理
    首先在确定要作为secondary的节点上面切换成secondary并放弃该资源的数据
        drbdadm secondary <resource>
        drbdadm connect --discard-my-data <resource>
    在要作为primary的节点重新连接secondary(如果这个节点当前的连接状态为WFConnection的话,可以省略)
        drbdadm connect <resource>
    当作完这些动作之后,从新的primary到secondary的re-synchnorisation会自动开始。

三、DRBD的复制模式及复制协议

1、复制模式

单主模式:
在单主模式下, 任何资源在任何特定的时间,集群中只存在一个主节点。 正是因为这样在集群中
只能有一个节点可以随时操作数据,这种模式可用在任何的文件系统上( EXT3、 EXT4、 XFS等等)。

双主模式:
在双主模式下,任何资源在任何特定的时间,集群中都存在两个主节点。犹豫双方数据存在并发
的可能性,这种模式需要一个共享的集群文件系统,利用分布式的锁机制进行管理,如 GFS 和
OCFS2。部署双主模式时, DRBD 是负载均衡的集群,这就需要从两个并发的主节点中选取一个首选的
访问数据。这种模式默认是禁用的,如果要是用的话必须在配置文件中进行声明。(DRBD8.0 之后支持)

2、复制协议

协议A:
    数据一旦写入磁盘并发送到网络中就认为完成了写入操作。
    在一个节点发生故障时,可能发生远程节点上的数据可能仍在发送队列导致数据丢失。
协议B:
    收到接收确认就认为完成了写入操作。
    数据丢失可能发生在参加的两个节点同时故障的情况下。
协议C:
    收到写入确认就认为完成了写入操作。无数据丢失,主流配置,I/O 吞吐量依赖于网络带宽。

版权声明:本文为博主原创文章,欢迎扩散,扩散请务必注明出处。

时间: 2024-07-29 14:33:57

DRBD原理及特性概述的相关文章

Memcached概念、作用、运行原理、特性、不足简单梳理(1)

http://www.cnblogs.com/yinrq/p/5013742.html Memcached概念.作用.运行原理.特性.不足简单梳理(1) 大家可能对memcached这种产品早有了解,或者已经应用在自己的网站中了,但是也有一些朋友从来都没有听说过或者使用过.这都没什么关系,本文旨在从各个角度综合的介绍这种产品,尽量深入浅出,如果能对您现在或以后的工作有所帮助,笔者将感到无比荣幸. Memcached概念.作用.运行原理.特性.不足简单梳理(1) Memcached下载安装.NET

Servlet 3.0 新特性概述

Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发和部署.其中有几项特性的引入让开发者感到非常兴奋,同时也获得了 Java 社区的一片赞誉之声: 异步处理支持:有了该特性,Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才结束该 Servlet 线程.在接收到请求之后,Servlet 线

解剖SQLSERVER 第七篇 OrcaMDF 特性概述(译)

原文:解剖SQLSERVER 第七篇 OrcaMDF 特性概述(译) 解剖SQLSERVER 第七篇  OrcaMDF 特性概述(译) http://improve.dk/orcamdf-feature-recap/ 时间过得真快,这已经过了大概四个月了自从我最初介绍我的宠物项目OrcaMDF. 自从项目开始到现在,OrcaMDF发生了很多变化,功能更强了,因此我想提供一个概述对目前OrcaMDF的功能的概述以及我对OrcaMDF未来的计划 页面类型 OrcaMDF 当前支持以下页面的数据完整解

Bean Validation 技术规范特性概述

概述 Bean Validation 规范 Bean 是 Java Bean 的缩写.在 Java 分层架构的实际应用中,从表示层到持久化层.每一层都须要对 Java Bean 进行业务符合性验证,如图 1 所看到的.然而对于同一个 Java Bean 的对象,在每一层都须要实现相同的验证逻辑时,这将是一项耗时且easy诱发错误的做法. Bean Validation 规范的目标就是避免多层验证的反复性. 其实.开发人员更倾向于将验证规则直接放到 Java Bean 本身,使用注解的方式进行验证

Android 三大图片缓存原理、特性对比

这是我在 MDCC 上分享的内容(略微改动),也是源码解析第一期发布时介绍的源码解析后续会慢慢做的事. 从总体设计和原理上对几个图片缓存进行对比,没用到他们的朋友也可以了解他们在某些特性上的实现. 上篇关于选择开源项目的好处及如何选择开源项目可见:开源项目使用及选型. 一. 四大图片缓存基本信息 Universal ImageLoader 是很早开源的图片缓存,在早期被很多应用使用. Picasso 是 Square 开源的项目,且他的主导者是 JakeWharton,所以广为人知. Glide

css浮动原理和特性

float浮动原理 语法: float: left | right | none | inherit 原理: 使元素脱离文档流,按照指定方向发生移动,遇到父级边界或者相邻的浮动元素停了下来 float浮动特性 1.块元素在一排显示 2.内联元素支持宽高 3.默认内容撑开宽度 4.脱离文档流 5.提升层级半层 浮动特性案例解释 案例1 html: <div class="div1">div1</div> <div class="div2"

drbd原理

分布式复制块设备(Distributed Replicated Block Device,drbd) 通过网络实现块设备数据实时镜像,可以简单地理解为一种基于网络的raid1:drbd工作在内核空间,它镜像复制的是二进制数据 ,按位bit对应,数据同时存在于本地主机和远程主机上,在遇到需要切换的时候,远程主机只需要使用它上面的那份备份数据,就可以继续提供服务了:作为高可用性的集群的资源,可以代替作为共享设备 工作原理 进行数据的写操作时,数据到达drbd管理模块后,分为两份,一份正常地写入本地磁

DRBD原理知识

DRBD(Distributed Relicated Block Device 分布式复制块设备), 可以解决磁盘单点故障.一般情况下只支持2个节点. 大致工作原理如下图: 一般情况下文件写入磁盘的步骤是: 写操作 --> 文件系统 --> 内存缓存中 --> 磁盘调度器 --> 磁盘驱动器 --> 写入磁盘.而DRBD的工作机制如上图所示,数据经过buffer cache后有内核中的DRBD模块通过tcp/ip协议栈经过网卡和对方建立数据同步. 一.DRBD的工作模式 1.

Javascript ES6 特性概述(即ECMAScript 6和ES2015+)

Javascript在过去的一年里变化了很多,从现在开始,有12个新的特性可以开始用了! 1. 历史 ECMAScript 6是对Javascript语言的增强,有时候也被称为ES6或者ES2015+. Javascript诞生在1995年,从那以后一直在缓慢地演变,每隔几年会有一些新的增强特性出现.ECMAScript出现在1997年,目的是指导Javascript的演化路径,它已经发布了好几个版本,如ES3.ES5.ES6,等等. 可以看到,在ES3.ES5和ES6之间分别有10年和6年的空