今天开始学DRBD磁盘镜像技术,花个2,3天时间,整理下笔记,实验将在稍后附上。

1、 什么是DRBD?

DRBD 是由内核模块和相关脚本而构成,用以构建高可用性的集群。其实现方式是通过网络来镜像整个设备。它允许用户在远程机器上建立一个本地块设备的实时镜像。一般与心跳连接结合使用,也可以把它看作是一种网络RAID。

2、DRBD是如何工作的?

Drbd 负责接收数据,把数据写到本地磁盘,然后发送给另一个主机。另一个主机再将数据存到自己的磁盘中。并以完全相同的形式记录在一个文件系统中(实际上文件系统的创建也是由DRBD的同步来实现的)。本地节点(主机)与远程节点(主机)的数据可以保证实时的同步,并保证IO的一致性。所以当本地节点的主机出现故障时,远程节点的主机上还会保留有一份完全相同的数据,可以继续使用,以达到高可用的目的。(就像网络Raid1)

DRBD是工作在系统内核空间,而不是用户空间,它直接复制的是二进制数据,这是它速度快的根本原因。


3、底层设备支持
DRBD需要构建在底层设备之上,然后构建出一个块设备出来。对于用户来说,一个DRBD设备,就像是一块物理的磁盘,可以在上面创建文件系统。DRBD所支持的底层设备有以下这些类:
1、一个磁盘,或者是磁盘的某一个分区;
2、一个soft raid 设备;
3、一个LVM的逻辑卷;
4、一个EVMS(Enterprise Volume Management System,企业卷管理系统)的卷;
5、其他任何的块设备。

4、 drbd与现在的HA集群的关系
一个drbd系统由两个以上节点构成,与HA集群类似,也有主用节点和备用节点之分,在带有主要设备的节点上,应用程序和操作系统可以运行和访问drbd设备(/dev/nbX)。
在主节点写入的数据通过drbd设备存储到主节点的磁盘设备中,同时,这个数据也会自动发送到备用节点相应的drbd设备,最终写入备用节点的磁盘设备中,在备用节点上,drbd只是将数据从drbd设备写入到备用节点的磁盘设备中。
大部分现行高可用性集群都会使用共享存储,而Drbd也可以作为一个共享存储设备,使用drbd不需要任何硬件的投资。因为它在IP网络中运行,所以,利用drbd作为共享存储设备,要节约很多成本,因为在价格上IP网络要比专用的存储网络经济的多。

5、 DRBD内部实现原理图


磁盘镜像技术 DRBD 原理简介_第1张图片


磁盘镜像技术 DRBD 原理简介_第2张图片
6、 DRBD协议说明
A 数据一旦写入磁盘并发送到网络中就认为完成了写入操作.
B 收到接收确认就认为完成了写入操作.
C 收到写入确认就认为完成了写入操作.
================================
协议A 异步复制协议 。只要主节点完成本地写操作就认为写操作完成,并且需要复制的数据包会被存放到本地TCP发送缓存中。当发生failover故障,数据可能丢失。当failover 故障发生时,在standby节点的数据会认为仍是稳固的,然而,在crash 发生的时间点上很多最新的更新操作会丢失。
协议B 内存同步(半同步)复制协议 。当本地磁盘的写已经完成,并且复制数据包已经到达对应从节点,此时主节点才认为磁盘写已经完成。通常情况下,发生failover 不会导致数据丢失(因为后备系统内存中已经获得了数据更新)。然而,如果所有节点同时出现电源故障,则主节点数据存储会发生不可逆的错误结构,主节点上多数最新写入数据可能丢失。
协议C 同步复制协议 。只有在本地和远程磁盘都确定写入已完成时,主节点才会认为写入完成。这样可确保发生单点故障时不会导致任何数据丢失。如果发生数据丢失的现象,那也只会在所有节点同时存在错误存储时才会发生这种情况。

在DRBD设置中, 最常用的复制协议是协议C ,选择哪种复制协议受到部署的两个因素影响:保护要求和延迟

7、drbd设备的三个进程
每个drbd设备会有三个进程:
drbd0_worker是drbd0的主要进程,
drbd0_asender是primary上drbd0的数据发送进程,
drbd0_receiver是secondary上drbd0的数据接收进程



注意事项
1、主备服务器同步的两个分区大小最好相同
2、开始同步两个节点的磁盘,需要一定时间,在同步完成前,不要重启,否则会重新同步。
3、挂载之前一定要先切换当前节点为主节点
4、两个节点中,同一时刻只能有一台处于primary状态,另一台处于secondary状态。
5、处于从节点(secondary)状态的服务器不能加载drbd块设备
6、将主节点切换为从节点之前要先卸载
7、一台机切换为主节点之前,要确保另一台机已切换为从节点