Chinaunix首页 | 论坛 | 博客
  • 博客访问: 186332
  • 博文数量: 51
  • 博客积分: 689
  • 博客等级: 上士
  • 技术积分: 525
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-03 13:05
文章分类

全部博文(51)

文章存档

2014年(1)

2013年(2)

2012年(7)

2011年(11)

2010年(30)

分类:

2010-03-04 12:54:06

DRBD技术:一个分布式的块设备

2009年4月22日

此文章由高德温罗德里格斯撰写

在高可用性中有三R是:冗余,冗余和冗余。然而,通常建立了一个典型的硬件设置,超过一定 限度的冗余增加是不可能的(比如99.999%)。考虑一个简单的例子:一个iSCSI服务器群集节点使用诸如GFS2或OCFS2的分布式文件系统。即使有冗余电源和iSCSI存储服务器的数据通道,还 存在单点故障:存储。

分布式重复块设备(DRBD技术)修补程序,由开发,引进了同步数据复制块存储网络。如果在复制环境中存储节点出现故障,该系统还有 另一个块设备可依赖,并可以安全地转移。简而言之,它可被视为一个镜像RAID1使用远程节点和1个本地磁盘的组合,但更好的与集群软件相兼容,如 heartbeat,和更好的同步交流脏位图和数据生成效率的标识符的能力。DRBD技术目前只适用于2节点群集,尽管你可以使用 一种混合版扩大这一限制。当群集的两个节点时,写被复制和同时发送到本地磁盘和其他节点。由于效率的原因,读是从本地磁盘获取。

数据耦合水平使用取决于所选择的协议:

  • 协议A :一旦本地磁盘写入已经完成,数据包已在发送队列中,则写被认为是完成的 。在一个节点发生故障时,可能发生数据丢失,因为 被写入到远程节点上的数据可能仍在发送队列。尽管,在故障转移节点上的数据是一致的,但没有及时更新。这通常是用于地理上分开的节点。
  • 协议B :一旦本地磁盘写入已完成且复制数据包达到了对等节点则认为写在主节点上被认为是完成的。数据丢失可能发生在参加的两个节点同时故障的情况下, 因为在飞行中的数据可能不会被提交到磁盘。
  • 议定C:只有在本地和远程节点的 磁盘已经确认了写操作完成,写才被认为完成。没有任何数据丢失,所以这是一个群集节点的流行模式,但I / O吞吐量依赖于网络带宽。

DRBD技术群集节点划分成是“主要的”或“次要的。”主要节点可以启动修改或写入,次要节点不能。这意味着,一个次要的DRBD技术节点不提供存 取,不能被挂载。即使是只读访问也是不允 许的,由于缓存一致性的原因。次要节点目前主要作为在一个错误的情况下备用设备。次要节点可能成为主要节点取决于网络配置。角色分配和指定,是由集群管理软件确定。

一个节点可以作为主节点有不同的指定方式:

  • 单个主节点 :主节点是指定给一个群集成员。由于只有一个群集成员操纵的数据,这种模式对常规文件系统非常有用,如ext3的或XFS。
  • 双主节点 :两个群集节点可以是主节点,允许修改数据。这通常用在诸如OCFS2的集群文件系统的。当前版本DRBD技术可以支持在一个基本的群集 最大有两个主要节点。

工作线程一部分节点之间的通信利用线程来处理,以避免死 锁和复杂的设计问题。用于通信的线程是:

  • drbd_receiver:处理传入的数据包。次要节点上,它分配的缓冲区,接收数据块和问题 写入请求到本地磁盘。如果它收到写的障碍,它睡觉,直到所有悬而未决的写请求已完成。
  • drbd_sender:发件人的数据块线程响 应读请求。这不同于drbd_receiver线程,是为了避免分布式死锁。如果一个同步进程运行,它的数据包由该线程生 成。
  • drbd_asender:确认发件人。硬盘驱动通过中断通知请求完成。但是,在一个回调例程中断处理程序中发送数据可 能会阻塞网络。因此,中断处理程序把包 放在队列中,由这个线程拿起在网络上发送。

失败

DRBD技术需要一个小的空间保存元数据,以高 效处理失败后的操作(如同步)。这个地区也可以配置在一个单独的设备(外部元数据),或在DRBD技术块设备(内部元数据)。它拥有有关的元数据,包括日志和磁盘上的脏位图 元数据(如下所述)。

节点故障

如果一个次要节点死亡,它不会影响整个系统,因为次要节点不启动写操作。如果主节点失败,数据尚未写入磁盘的,但它的完 成没有收到,可能会丢失。为了避免这种情况,DRBD技术还保持着一个“活动日志”,在本地磁盘上保留区中包含写入尚未完成的操作的信 息。数据存储在扩展区,并保持 在最近使用(LRU)列表。每个活动日志的变化会导致更新元数据(单扇区写)。在活动日志的大小是由用户配置,它是一种最小化 更新的元数据和主节点崩溃同步时间之间的权衡。

DRBD技术维护一个“脏位图”的,因为它必须运行当没有对等节点或没有本地磁盘时。它描述了已被当地节点改变的脏页。写入到磁盘上的脏位图根据活动日志最小化。每一个表项从活动日志逐出时,与之相关的是不再 由活动日志覆盖的位图将写入磁盘。肮脏的位图在网络上传送来通信哪些页是肮脏的,应重新同步。位图被压缩(使用运行长度编码),然后在网络上发送, 以减少网络开销。由于大多位图的稀疏的, 它被证明是非常有效的。

DRBD技术同步数据,一旦坠毁节点回来,或者是在回应中的一个链路中断造成的数据不一致。同步进行的是线性顺序,根据磁盘偏移,与一致的 节点保持相同的磁盘布局。同步率配置通过在DRBD配置文件中率技术参数来配置。

磁盘故障

在本地磁盘错误的情况下,系统可以根据具体的配 置选择下列方式之一处理它:

  • 分离 :从设备节点的分离,并在无盘模式继续运行。在这种情况下,对等节点设备将成为主要的磁盘。这是高可用性建议的配置。
  • pass_on:传 递错误到上层主节点上。磁盘错误被忽视,但记录下来,当该节点是次要的。
  • 呼叫本地IO错误 :调用脚本。这种模式可用于执行故障转移到“健康”节点,并 自动转变指定主要到另一个节点。

数据不一致的问题

在双主节点情况下,两个节点可写入同一磁盘扇 区,使数据不一致。对于在不同的偏移写,没有同步需要。为了避免不一致的问题,在网络上数据包要顺序编 号,以确定顺序写入。但是,仍有一些角落情况系统可能遭受不一致的问题:

  • 在同一时间的两个节点同时写入。在这种情况下,一个节点的写入将被丢弃。主节点之一,被标记“抛弃并发写”标志,这导致 从其他节点当它检测到并发请求写时它丢弃写入。丢弃的节点并发写标志设置的节点,发出了一个“抛弃应答”,告知其他节点写入丢弃。其他节点丢弃应答检测,从第一个节点写入的数据保持一 致的驱动器。
  • 偏远地方的请求先于本地要求结束,可能出现 当磁盘延迟超过了网络延迟。本地节点写入到一个给定块写操作发送到其他节点。远程节点然后确认请求的完成,发送一个新的自己 写的同一个块 - 写在当地仍未完成的。在这种情况下,本地节点保持新的数据写入请求暂停,直到当地的写操作完成。
  • 远程请求而当地要求仍有待:这种 情况是怎样来的,如果网络数据包进行重新排序,从而导致远程写入给区块前到达前一个确认,由本地写。再次接收节点将坚定地持有,直到收到的ACK是新的数 据。

总结

DRBD技术并不是唯一正在开发的分布式存储的 实现。叶夫波利亚科夫的分布式 存储(DST)的实现被接受在staging树采取了不同的做法。DRBD技术被限制为2节点主动群集,DST时 可以有更多的节点数目。DST工作在客户服务器模式,其中存储在服务器端的,而DRBD技术是点对点对等为基础的,更像高可 用性设计,而非分布存储。另一方面,DST是专为累积存储和存储,可以根据需要增加节点。DST有一个可插拔模块,接受映射到一个累积存 储存储节点不同的算法。可以选择的镜像,这将与DRBD技术存储的基本能力的算法相同。

DRBD技术代码保留在git仓库在 git://git.drbd.org/linux-2.6-drbd.git,在“DRBD”分支。它包含了未成年人审查意见张贴在注册后的补丁集是由菲 利普芮斯纳发布LKML。如需进一步资料,请参阅在提及的几个PDF文件。

阅读(2978) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~