简介:

DRBD (Distributed Replicated Block Device) 分布式块设备复制,是一种基于软件、网络的块复制存储解决方案。主要用于对服务器之间的磁盘、分区、逻辑卷等进行数据镜像。

数据在写入本地磁盘的同时还会发送一份到远程服务器磁盘,达到本地与远程数据实时同步,当本机发生故障不能访问时,远程主机还保存着一份数据可供使用。

DRBD 是 Linux 内核存储层中的一个分布式存储系统,由内核模块(主要用于虚拟一个块设备)、用户空间管理程序(主要用于和DRBD内核模块通信,以管理DRBD设备、磁盘配置、网络配置等)。

DRBD 设备在整个 DRBD 系统中位于物理设备之上,文件系统之下,在这两者之间形成一个中间层。

当用户在主节点的文件系统写入数据时,在入盘前会被 DRBD 系统拦截并通知用户空间管理程序把该数据复制一份写入到远程主机 DRBD 镜像,最终存入镜像所映射的磁盘。

一个 DRBD 系统有两个及以上节点构成,分为主、备节点。主、备节点可以通过手工的方式改变角色。

主节点上可以不受限制的对 DRBD 设备进行读写操作、初始化、创建、挂载文件系统。备节点上无法挂载 DRBD 设备,只能用来接收主节点发送的数据,即:不能用于读写访问(保证数据缓存区的一致性)。

特点:

1、实时性。当应用对磁盘数据有修改操作时,数据复制立即发生。

2、透明性。数据存储在镜像设备上是透明、独立的。数据可以存储在基于网络的不同主机上。

3、同步镜像。当本地应用申请写操作时,同时也在远程主机开始写操作。

4、异步镜像。当本地写操作已经完成时,才开始对远程主机进行写操作。

特性:

1、单主模式

使用最频繁的一种模式,主要用于高可用集群的存储方面,该模式下只有一个主节点可以进行读写操作。

2、双主模式

主要用于负载均衡集群中,解决数据共享、一致性问题。由于需要两个主节点同时写入,单一的文件系统无法满足,只能使用共享的集群文件系统来解决并发读写问题。

如:GFS、OCFS2 等,通过集群文件系统的分布式锁机制事解决集群中两个主节点同时操作数据的问题。

3、复制模式

协议 A:只要本地磁盘写入完成,数据包已经在发送队列中,则认为一个写操作过程完成。发生网络故障时可能数据还在发送队列中,会丢失数据。

协议 B:只要本地磁盘写入完成,数据包已经到达远程节点,则认为一个写操作过程完成。远程节点发生故障时会导致数据丢失。

协议 C:只有本地与远程节点的磁盘都确实写操作完成,才认为一个写操作过程完成。不会造成数据丢失,也是使用最多的协议 ( 磁盘的 IO 量依赖网络带宽,建议网络带宽较好的时候使用 )。

4、传输完整性校验

DRBD 使用 MD5、SHA-1 或 CRC-32C 等加密算法对信息进行终端到终端的完整性验证。对复制数据的信息摘要进行验证,如验证信息不对,则要求主节点重新了送,保证镜像的数据完整性、一致性。

5、脑裂通知与自动修复

由于集群节点间网络故障、集群软件管理干预或人为错误,导致 DRBD 两个节点都切换为主节点而断开连接,即称为脑裂。发生脑裂主备之间数据不能同步,导致数据不一致。

发生脑裂可以手工修复 (建议),也可以自动修复。

自动修复策略:

1、丢弃比较新的主节点所做的修改。当网络重新建立连接且发现脑裂后,DRBD 会丢弃自动切换到主节点上的主机所修改的数据。

2、丢弃老的主节点所做的修改。DRBD 会丢弃首先切换到主节点上的主机所修改的数据。

3、丢弃修改比较少的主节点的修改。DRBD 会首先检查两个节点的数据,然后丢弃修改比较少的主机上的数据。

4、一个节点数据没有发生变化的情况下完美修复脑裂。如果其中一台主机在发生脑裂时没有发生数据修改,那么就可以完美解决脑裂问题。