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(由于它的冗余性)也是这样,可应用于多个应用程序和场景。

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

存储冗余

Linux内核内容

DRBD融入到Linux内核的过程要从2007年7月说起。那时,DRBD 还是 8.0 版的,两年半之后,也就是 2009 年 12 月,DRBD 加入到了主流的 2.6.33 内核(DRBD 8.3.7)。今天,在当前 Linux 内核 2.6.35 中的是 DRBD 8.3.8。

在存储系统中使用冗余是不足为奇的,特别是在企业级设计中。标准方法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 技术在继续发展,一些所谓的非标准技术蓄势待发。这些技术包括 Oracle 的 RAID-Z 模式(它解决了RAID-5 的 write-hold 问题);NetApp 的 RAID-DP(对角线奇偶校验) ,它扩展了 RAID-6;以及 IBM 的 RAID 1E(增强版本),它在奇数量的磁盘上可实现条带化(RAID-0)和镜像(RAID-1)。

DRBD操作

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

图 2. 基本 DRBD 操作模型

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

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

Figure 3. 使用 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

在用户空间,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 提供大量有用的选项,因此您可以对其进行优化,使其只适合您的应用程序。

raid模式_基于网络的磁盘热备技术|网络RAID-1相关推荐

  1. 安全防御(二)--- 防火墙域间双向NAT、域内双向NAT、基于VRRP的双机热备

    目录 一.防火墙支持那些NAT技术,主要应用场景是什么? 二.当内网PC通过公网域名解析访问内网服务器时,会存在什么问题,如何解决?请详细说明 三.防火墙使用VRRP实现双机热备时会遇到什么问题,如何 ...

  2. 基于ensp防火墙双击热备二层网络规划与设计

    作者:BSXY_19计科_陈永跃 BSXY_信息学院 注:未经允许禁止转发任何内容 基于ensp防火墙双击热备二层网络规划与设计 前言及资源下载 一.设计topo与要求(15个要求) 二.插曲:基于e ...

  3. 一张“神图”看懂单机/集群/热备/磁盘阵列(RAID)

    一张"神图"看懂单机/集群/热备/磁盘阵列(RAID) 单机部署(stand-alone):只有一个饮水机提供服务,服务只部署一份 集群部署(cluster):有多个饮水机同时提供 ...

  4. 服务器与虚拟机进行双机热备,基于虚拟机的双机热备高可靠协同办公系统

    摘 要 随着高校信息化的不断推进,各高校纷纷建立起协同办公系统,推行无纸化.网络化办公.协同办公系统一旦出现故障,将对学校的正常办公造成严重的影响.本文针对虚拟化环境下协同办公系统的高可靠运行问题,介 ...

  5. 基于BGP技术和防火墙双机热备技术的校园网设计与实现

    规划设计描述 网络拓扑设计分为三部分进行设计:主校区网络. 运营商骨干网络.分校区网络. 总公司网络设计: 划分:教学楼区域.宿舍区域.办公楼区域.行政楼区域,图书馆区域.数据中心.并且设有web服务 ...

  6. 防火墙双机热备技术详解

    今天继续给大家介绍HCIE安全相关内容.本文主要介绍防火墙双机热备技术. 阅读本文,您需要对防火墙相关理论知识有一定了解,如果您对此还存在困惑,欢迎您查阅我博客内的其他文章,相信您一定会有所收获! 一 ...

  7. 防火墙双击热备技术(理论)

    1. 双机热备技术产生的原因 双机热备份技术的出现改变了可靠性难以保证的尴尬状态,通过在网络出口位置部署两台防火墙,保证了内部网络于外部网络之间的通讯畅通 USG防火墙作为安全设备,一般会部署在需要保 ...

  8. retrofit 会请求两次_基于RxJava2+Retrofit2简单易用的网络请求实现

    简介 基于RxJava2+Retrofit2实现简单易用的网络请求,结合android平台特性的网络封装库,采用api链式调用一点到底,集成cookie管理,多种缓存模式,极简https配置,上传下载 ...

  9. 单机/集群/热备/磁盘阵列(RAID)的区别详解

    一.单机部署(stand-alone) 单个服务器,只有一个饮水机提供服务,服务只部署一份. 二.集群部署(cluster) 服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就像是 ...

最新文章

  1. C#程序结构 基本语法
  2. 小凡模拟器使用视频(续)
  3. CodeForces - 225C. Barcode(DP)
  4. 单值二叉树:如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时,才返回 true;否则返回 false。
  5. android中获取时间
  6. CVPR 2021奖项出炉:最佳论文花落马普所,何恺明获提名,首届黄煦涛纪念奖颁布...
  7. Dubbo学习笔记(二)
  8. mysql多客户端数据不同步,一个关于客户端和数据库版本不一致的问题
  9. 用AOP思想改造一个服务器的数据存储
  10. 沪深股票历史数据下载,股票历史交易数据下载
  11. NO JVM installation found. please install a 64-bit JDK,解决方法   Error launching android studio   NO J
  12. 设计师们必须要知道的素材网站
  13. Winsock2_WSADATA
  14. 生成的分子图像是否可以识别为SMILES,然后再将识别后的SMILES转换为图像?
  15. 片上总线协议学习(1)——SiFive的TileLink与ARM系列总线的概述与对比
  16. 3628中小企业的网络生存
  17. omap3530 linux串口驱动,omap3530(Cortex-A8)硬件平台软件调试笔记
  18. NOIP 2004 合唱队形
  19. NABCD分析——生活日历
  20. 用HTTPS方式(域名加路径)来访问FTP服务器图片

热门文章

  1. GitHub使用指南——建立仓库、建立文件夹、上传图片详细教程
  2. 使用OpenVINO加速Pytorch表情识别模型
  3. Mat对象与它各种用法
  4. 实战:使用 Python 用不到 10 行代码计算汽车数量
  5. 自动驾驶的视觉感知包括哪些内容?
  6. TLU-Net:表面缺陷自动检测的深度学习方法
  7. 【OpenCV 4开发详解】圆形检测
  8. Kotlin学习笔记(五) 扩展函数 扩展属性
  9. ECS 备份数据到NAS(一):使用Windows Server Backup工具
  10. 《Typecript 入门教程》 2、访问控制符:public、private、protected、readonly