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原理图

二、DRBD基础特性
1、资源
DRBD主要是对磁盘资源的管控,因此在DRBD模块中,资源是所有可复制移动存储设备的总称。
资源名:
    资源名可以指定除了空格外 us-ascii 中的任意字符。
DRBD 设备:
    DRBD 的虚拟块设备。它有一个主设备号为 147 的设备,默认的它的次要号码编从 0 开始。
    相关的块设备需命名为/ dev/ drbdm,其中 M 是设备的次要号码。
磁盘配置:
    DRBD 内部应用需要本地数据副本,元数据。
网络配置:
    各个对等接点间需要进行数据通信。2、资源角色
DRBD角色: primary<->secondary
主:  在主 DRBD 设备中可以进行不受限制的读和写的操作。
    他可用来创建和挂载文件系统、初始化或者是直接 I/O 的快设备,等等。
备: 
    接收所有来自对等节点的更新,不能被应用也不能被读写访问。主要目的是保持缓冲及数据一致性。
人工干预和管理程序的自动聚类算法都可以改变资源的角色。资源可以由被变换为主,以及主到备。1
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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/9aa3f8dfed7f28fbef2d6205e1ce8b59.html