内容


Distributed Replicated Block Device 的高可用性

Linux 和 DRBD 的高可用性存储

Comments

Distributed Replicated Block Device (DRBD) 提供一个网络版的数据库镜像,属于冗余磁盘阵列(RAID)RAID-1 类。让我们首先简要介绍一下高可用性(HA)和 RAID,然后再研究 DRBD 的架构和用法。

高可用性简介

高可用性 是提高可用性的一个系统设计原理。可用性,或者系统操作连续性的度量通常被定义为是一年中计算机正常运行时间的百分比,例如某一系统是 99% 可用的,那么一年中它的停机时间是 3.65 天。99% 通常被称为两个 9。与之相比,5 个 9(99.999%)最大停机时间降到每年 5.26 分钟。这差别很大,需要精心设计和高质量才能实现。

HA 最常见的实现是故障冗余。在这个模型中,您可以为一个给定资源定义多条路径,正常情况下使用可用路径,故障发生时使用冗余路径。企业级磁盘驱动器阐述了这一概念,因为它们提供两个访问端口(相比用户级驱动器的一个访问端口而言)。

写这篇文章时,我正坐在波音 757 上。每个机翼上都有喷气发动机。尽管引擎是极为可靠,就算其中一个引擎发生故障,飞机使用剩余的一个引擎也能继续安全飞行。HA(由于它的冗余性)也是这样,可应用于多个应用程序和场景。

我的第一份工作是为一家大型防务公司建立对地同步的通信卫星。这些卫星的核心是一个抗辐射计算系统,它负责命令和遥感勘测(卫星的用户界面)、电能和热能管理、以及指示(或者称为保持电话通信和电视内容畅通)。就可用性而言,这个计算系统是一个冗余设计,有两组处理器和总线,能够在主机无应答的情况下在主机和伺服机之间进行切换。简言之,在系统设计中冗余是提高可用性一个常用技术,代价是增加额外硬件(和软件)。

存储冗余

在存储系统中使用冗余是不足为奇的,特别是在企业级设计中。标准方法 — RAID — 使用各种基础算法是很常见的,每一种算法都有不同的功能和特性。

RAID 是 1987 年在加利福尼亚大学伯克利分校第一次定义的。传统 RAID 级别包括 RAID-0 和 RAID-1,RAID-0 可以实现跨磁盘条带化(但是没有冗余),RAID-1 可以跨越两个磁盘实现镜像 ,这样一个信息就存在两个副本。对于 RAID-1,一个磁盘发生故障时,信息仍然可以通过其他副本获取。其他 RAID 级别包括 RAID-5 和 RAID-6,RAID-5 跨磁盘包含分布式奇偶校验码的块级条带化,RAID-6 包含带有双重分布式奇偶校验的块级条带化。尽管 RAID-5 支持一个驱动器故障,而 RAID-6 可以支持两个驱动器故障(尽管奇偶校验信息消耗更多的容量)。RAID-1 很简单,但是就容量利用而言太浪费。关于存储容量方面 RAID-5 和 RAID-6 更节省,但是它们通常需要额外硬件处理来避免奇偶校验计算加重处理器负荷。通常需要权衡利弊。图 1 提供了 RAID-0 和 RAID-1 模式的一个概览图。

图 1. Linux 中 RAID-0 和 RAID-1 模式的概览图
 RAID-0 和 RAID-1 模式的概览图
RAID-0 和 RAID-1 模式的概览图

RAID 技术在继续发展,一些所谓的非标准技术蓄势待发。这些技术包括 Oracle 的 RAID-Z 模式(它解决了RAID-5 的 write-hold 问题);NetApp 的 RAID-DP(对角线奇偶校验) ,它扩展了 RAID-6;以及 IBM 的 RAID 1E(增强版本),它在奇数量的磁盘上可实现条带化(RAID-0)和镜像(RAID-1)。还有许多其他传统和非传统 RAID 模式:详细信息见 参考资料 中的链接。

DRBD 操作

现在,在深入钻研架构之前,让我们先看一下 DRBD 的操作。图 2 是在两个提供独立存储资源的独立服务器的背景之下的 DRBD 的一个概览。其中一个服务器被定义为主服务器,另一个是辅助服务器(通常是集群解决方案的一部分)。用户访问 DRBD 块设备,将其作为一个传统本地块设备,或一个存储区域网或网络附加存储解决方案。DRBD 软件为用户读写操作提供主服务器和辅助服务器之间的同步操作,以及其他同步操。

图 2. 基本 DRBD 操作模型
基本 DRBD 操作模型
基本 DRBD 操作模型

在主动/被动模式下,主节点用于所有用户的读写操作。如果集群解决方案检测到主节点故障,辅助节点升为主节点。写操作从主节点开始进行,同时执行本地存储和辅助存储(见图 3)。DRBD 支持两个模式的写操作,即完全同步和完全异步。

完全同步模式 下,在写事务被认可之前两个节点存储中的写操作必须是安全的 。在异步模式 下,写数据被存储到本地节点存储中之后,写事务被认可;对等节点中的数据的副本出现在后台中。异步模式相对来说不太安全,因为在复制数据之前,有一个窗口显示可能发生的故障,但是它比完全同步模式更快,后者是数据保护最安全的模式。尽管推荐使用完全同步模式,但在出现远距离复制的情况下(比如在广域网中进行地理灾难恢复的场景),异步模式也是很有用的。读操作是使用本地存储执行的(除非本地磁盘发生故障,那时通过辅助节点访问辅助存储)。

Figure 3. 使用 DRBD 进行读/写操作
使用 DRBD 进行读/写操作
使用 DRBD 进行读/写操作

DRBD 也支持主动/被动模式,比如读和写操作可以在两个服务器上同时进行,这就是所谓的共享磁盘模式。该模式依赖一个共享磁盘文件系统,比如,Global File System (GFS) 或 Oracle Cluster File System 第 2 版(OCFS2),包含分布式锁管理功能。

DRBD 架构

DRBD 被分成独立的两部分:一个实现 DRBD 行为的内核模块和一组用于管理 DRBD 磁盘的用户空间管理应用程序(见图 4 )。内核模块实现一个用于虚拟块设备(跨网络在本地磁盘与远程磁盘之间复制)的驱动程序。作为一个虚拟磁盘,DRBD 提供一个供各种应用程序使用的灵活模型(从文件系统到依赖于一个原始磁盘的其他应用程序,比如数据库)。DRBD 模块不仅仅实现一个基础块驱动程序接口(磁盘配置细节在 drbd.conf 中有定义),而且也实现网络堆接口(其端点通过一个 IP 地址和端口号定义,也在 drbd.conf 中)。

图 4. Linux 架构中的 DRBD
 Linux 架构中的 DRBD
Linux 架构中的 DRBD

在用户空间,DRBD 提供一组用于管理复制磁盘的实用工具。您可以使用 drbdsetup 在 Linux 内核中配置 DRBD 模快,使用 drbdmeta 管理 DRBD 元数据结构。一个同时使用这两个工具的包装实用工具是 drbdadm。高级管理工具是最常用的一个(从 /etc/drbd.conf 中的 DRBD 配置文件获取具体细节)。作为之前讨论的实用工具的一个前端,drbdadm 是管理 DRBD 最常用的。

使用磁盘模式,DRBD 输出一个特殊设备(/dev/drbdX),您可以像使用一个普通磁盘那样使用它。清单 1 描述如何构建一个文件系统和挂载 DRBD 供主机使用(如果忘记了其他必要的配置步骤,参考 参考资料 部分)。

清单 1. 在一个主 DRBD 磁盘上构建并加载一个文件系统
# mkfs.ext3 /dev/drbd0
# mkdir /mnt/drbd
# mount -t ext3 /dev/drbd0 /mnt/drbd

您可以像使用其他任何磁盘那样使用 DRBD 提供的虚拟磁盘,其后的复制操作是透明的。现在,我们来看一下 DRBD 的一些主要功能,包括自我修复功能。

DRBD 主要功能

尽管复制磁盘的思想从概念上来说是很简单的(开发也相对比较容易),但是一个健壮的实现也有很多固有的复杂性。例如,向一个网络驱动器复制块相对比较简单,但是,处理故障和暂时断电(以及随后的驱动器同步)才是真正解决方案的开始。本节将介绍 DRBD 提供的主要功能,包括各种 DRBD 支持的故障模型。

复制模式

本文前面探究了节点之间复制数据的各种方法(尤其是这两种 — 完全同步和完全异步)。DRBD 支持每种方法的变体,这些方法比异步模式提供更多的数据保护,代价是性能略有下降。内存异步模式(或半异步模式) 是介于同步模式和异步模式之间的一个变体。在这种模式下,写操作是在数据存储到本地磁盘并镜像到对等节点内存后被确认的。该模式提供更多保护,因为数据被镜像到另一个节点,这仅仅是针对易失性内存,而不是非易失性磁盘。这仍然可能丢失数据(例如,如果两个节点都发生故障),但是主节点故障不会引起数据丢失,因为数据已经被复制了。

联机设备验证

DRBD 允许对本地和远程对等设备进行联网验证(在输入/输出发生的同时)。验证意味着 DRBD 可以核实本地和远程磁盘是否是相互间的副本,这是一个耗时的操作。但是相比在节点之间移动数据进行验证,DRBD 提供了一个更为高效的方法。为了保护节点间的带宽(可能是一个受限资源),DRBD 不需要在节点间移动数据进行验证,而是移动数据(hash)的加密摘要。这样一来,一个节点可以计算一个块的散列值;将较小的签名转移到对等节点,该节点也可以计算散列值,然后对两者进行比较。如果散列值是相同的,数据块已经被正确的复制了。如果散列值不相同,将过期的数据块标记为不同步,随后的同步确保数据块是正确同步的。

通信完整性

节点之间的通信可能会将错误引入复制数据(由于软件或防火墙漏洞,或者不能被 TCP/IP 的校验码检测出来的其他错误)。为了提供数据的完整性,DRBD 计算消息完整性代码,以随数据一起在节点之间移动。这支持接收节点验证输入数据,并在发现一个错误时请求重发数据。DRBD 使用 Linux 加密应用程序编程接口,因此在完整性算法使用方面是比较灵活的。

自动恢复

DRBD 可以从多种错误中恢复,但是一个最严重的错误就是所谓的 “裂脑(split-brain)”。在这个错误场景中,节点之间的通信链发生故障,每个节点都认为自己是主节点。而对于主节点而言,每个节点支持写操作,而不会将这些操作传播到对等节点。这导致每个节点中的存储不一致。

大多数情况下,脑裂恢复是人工进行的,但是 DRBD 提供几个主动恢复这一状况的操作方法,所用恢复算法具体取决于实际的存储方式。

发生裂脑之后,同步存储最简单的方法是在链接出现故障时其中一个节点没有发现改变。这样,已经发生改变的节点与潜在对等节点进行简单的同步。另一个方法是丢弃变更较少的那个节点中的更改。这使得最大变更集合的节点可以继续工作,但也意味着一个主机上的变更将丢失。

还有两个方法是根据节点当时的状态丢弃更改。一种方法是将最后一次转换成主节点的那个节点中的变更丢弃,而另一种是将最老的主节点(是第一次转换成主节点的节点)中的变更丢弃。您可以在 DRBD 配置文件中操作每个节点,但是它们最终的使用取决于使用存储的应用程序以及数据是否有必要丢弃或进行人工恢复。

优化同步

复制存储设备的一个关键因素是节点之间数据同步的方法是否高效。DRBD 使用的模式其中两个是活动日志和快速同步位图。活动日志存储最近写入的块并确定故障恢复后应同步哪些块。快速同步位图确定连接断开时同步(或不同步)的数据块。节点重新连接之后,可使用这些位图快速同步节点,彼此之间进行精确的复制。时间是很重要的,因为它代表辅助磁盘不一致时的窗口。

结束语

如果您想要提高您数据的可用性,甚至是商业硬件上的数据,DRBD 是一个极好的资产。它作为一个内核模块易于安装,且可使用管理工具和包装器进行配置。更好的是,DRBD 是开源的,允许您根据自己的需求进行调整(但是首先检查 DRBD 路线图,看看是否您所需要的在其计划中)。DRBD 提供大量有用的选项,因此您可以对其进行优化,使其只适合您的应用程序。


相关主题

  • DRBD 网站 提供 DRBD 的最新信息、当前功能列表、路线图以及技术介绍。您可以找到 DRBD 论文和演示列表。尽管 DRBD 是主流内核的一部分(从 2.6.33 起),您也可以在 LINBIT 中获取最新源码包。
  • 高可用性 是支持一定程度操作的一个系统特性。该特性通常包括 冗余性,这是避免 单点故障 的一种方法。容错系统 的设计是提高可用性的另一个重要方面。
  • RAID 的概念于 1987 年诞生于加利福尼亚大学伯克利分校。RAID 是分级别定义的,指定存储架构和保护特性。在开创性论文 “A Case for Redundant Arrays of Inexpensive Disks (RAID)” 中您可以了解更多原始 RAID 的概念。
  • Ubuntu 为 配置和使用 DRBD 提供一个很有用的页面。该页面介绍了 DRBD 在主机和辅助主机上的配置、以及如何在各种故障场景中进行 DRBD 测试。
  • 在同集群应用程序协同工作时,DRBD 是最有帮助的。幸运的是,在 DRBD 手册页中的 DRBD-enabled applications 部分,您可以更多地了解这些应用程序以及其他程序(比如 Pacemaker、Heartbeat、 Logical Volume、Manager、GFS 和 OCFS2),并了解如何将它们和 DRBD 集成。
  • 这篇文章涉及两个共享磁盘文件系统 — 即,GFSOCFS2。两者都是集成了高性能和 HA 的集群文件系统。
  • developerWorks Linux 专区 寻找为 Linux 开发人员(包括 Linux 新手入门)准备的更多参考资料,查阅我们 最受欢迎的文章和教程
  • 在 developerWorks 上查阅所有 Linux 技巧 Linux 教程
  • 以最适合您的方式 IBM 产品评估试用版软件:下载产品试用版,在线试用产品,在云环境下试用产品,或者在 IBM SOA Sandbox for People 中花费几个小时来学习如何高效实现面向服务架构。
  • 随时关注 developerWorks 技术活动网络广播

评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Linux
ArticleID=514000
ArticleTitle=Distributed Replicated Block Device 的高可用性
publish-date=08302010