本节书摘来自华章计算机《高性能Linux服务器构建实战:系统安全、故障排查、自动化运维与集群架构》一书中的第3章,第3.1节,作者:高俊峰著

第3章 数据安全工具DRBD、extundelete

3.1 数据镜像软件DRBD介绍

分布式块设备复制(Distributed Replicated Block Device,DRBD),是一种基于软件的、基于网络的块复制存储解决方案,主要用于对服务器之间的磁盘、分区、逻辑卷等进行数据镜像。当用户将数据写入本地磁盘时,还会将数据发送到网络中另一台主机的磁盘上,这样本地主机(主节点)与远程主机(备节点)的数据就可以保证实时同步,当本地主机出现问题,远程主机上还保留着一份相同的数据,可以继续使用,保证了数据的安全。
3.1.1 DRBD的基本功能
DRBD的核心功能就是数据的镜像,其实现方式是通过网络来镜像整个磁盘设备或磁盘分区,将一个节点的数据通过网络实时地传送到另一个远程节点,保证两个节点间数据的一致性,这有点类似于一个网络RAID1的功能。对于DRDB数据镜像来说,它具有如下特点:
实时性。当应用对磁盘数据有修改操作时,数据复制立即发生。
透明性。应用程序的数据存储在镜像设备上是透明和独立的。数据可以存储在基于网络的不同服务器上。
同步镜像。当本地应用申请写操作时,同时也在远程主机上开始进行写操作。
异步镜像。当本地写操作已经完成时,才开始对远程主机进行写操作。
3.1.2 DRBD的构成
DRBD是Linux内核存储层中的一个分布式存储系统,具体来说由两部分构成,一部分是内核模板,主要用于虚拟一个块设备;一部分是用户空间管理程序,主要用于和DRBD内核模块通信,以管理DRBD资源。在DRBD中,资源主要包含DRBD设备、磁盘配置、网络配置等。
一个DRBD系统有两个以上节点构成,分为主用节点和备用节点两个角色,在主用节点上,可以对DRBD设备进行不受限制的读写操作,可以用来初始化、创建、挂载文件系统。在备用节点上,DRBD设备无法挂载,只能用来接收主用节点发送过来的数据,也就是说备用节点不能用于读写访问,这样做的目的是保证数据缓冲区的一致性。
主用节点和备用节点不是固定不变的,可以通过手工方式改变节点的角色,备用节点可以升级为主用节点,同时主用节点也可以降级为备用节点。
DRBD设备在整个DRBD系统中位于物理块设备之上,文件系统之下,在文件系统和物理磁盘之间形成了一个中间层,当用户在主用节点的文件系统中写入数据时,数据被正式写入磁盘前会被DRBD系统截获,同时,DRBD在捕捉到有磁盘写入的操作时,就会通知用户空间管理程序把这些数据复制一份,写入远程主机的DRBD镜像,然后存入DRBD镜像所映射的远程主机磁盘。图3-1详细展示了DRBD系统的运行结构。

npm install 镜像服务器_npm install 镜像服务器

DRBD负责接收数据,把数据写到本地磁盘,然后发送给另一台主机。另一台主机再将数据存到自己的磁盘中。目前,DRBD每次只允许对一个节点进行读写访问,这对于通常的故障切换高可用性集群来讲已经足够用了。以后的版本将支持两个节点进行读写存取。
3.1.3 DRBD与现在的集群的关系
DRBD由两个或两个以上节点构成,与HA集群类似,也有主用节点和备用节点之分,因而经常用于高可用集群和负载均衡集群系统中作为共享存储设备。由于DRBD系统是在IP网络中运行,所以,在集群中使用DRBD作为共享存储设备,不需要任何硬件投资,可以节约很多成本,因为在价格上IP网络要比专用的存储网络更经济。
另外,DRBD也可以用于数据备份、数据容灾等方面。
3.1.4 DRBD的主要特性
DRBD系统在实现数据镜像方面有很多有用的特性,我们可以根据自己的需要和应用环境,选择适合自己的功能特性。下面依次介绍DRBD几个非常重要的应用特性。
1 . 单主模式
这是使用最频繁的一种模式,主要用在高可用集群的数据存储方面,解决集群中数据共享的问题,在这种模式下,集群中只有一个主用节点可以对数据进行读写操作,可以用在这种模式下的文件系统有ext3、ext4、xfs等。
2 . 双主模式
这种模式只能在DRBD8.0以后的版本中使用,主要用在负载均衡集群中,解决数据共享和一致性问题。在这种模式下,集群中存在两个主用节点,由于两个主用节点都有可能对数据进行并发的读写操作,因此单一的文件系统就无法满足需求了,此时就需要共享的集群文件系统来解决并发读写问题。常用在这个模式下的文件系统有GFS、OCFS2等,通过集群文件系统的分布式锁机制就可以解决集群中两个主用节点同时操作数据的问题。
3 . 复制模式
DRBD提供了三种不同的复制方式,分别是:
协议A,只要本地磁盘写入已经完成,数据包已经在发送队列中,则认为一个写操作过程已经完成。
这种方式在远程节点故障或者网络故障时,可能造成数据丢失,因为要写入到远程节点的数据可能还在发送队列中。
协议B,只要本地磁盘写入已经完成,并且数据包已经到达远程节点,则认为一个写操作过程已经完成。
这种方式在远程节点发生故障时,可能造成数据丢失。
协议C,只有本地和远程节点的磁盘已经都确认了写操作完成,则认为一个写操作过程已经完成。
这种方式没有任何数据丢失,就目前而言应用最多、最广泛的就是协议C,但在此方式下磁盘的I/O吞吐量依赖于网络带宽。建议在网络带宽较好的情况下使用这种方式。
4 . 传输完整性校验
这个特性在DRBD8.2.0及以后版本中可以使用,DRBD使用MD5、SHA-1或CRC-32C等加密算法对信息进行终端到终端的完性验证。利用这个特性,DRBD对每一个复制到远程节点的数据都生成信息摘要,同时,远端节点也采用同样的方式对复制的数据块进行完整性验证,如果验证信息不对,就请求主节点重新发送。通过这种方式保证镜像数据的完整性和一致性。
5 . 脑裂通知和自动修复
由于集群节点间的网络连接临时故障、集群软件管理干预或者人为错误,导致DRBD两个节点都切换为主用节点而断开连接,这就是DRBD的脑裂问题。发生脑裂意味着数据不能从主用节点复制到备用节点,这样会导致DRDB两个节点的数据不一致,并且无法合并。
在DRBD8.0及更高版本,实现了裂脑自动修复功能,在DRBD8.2.1之后,又实现了裂脑通知特性,在出现脑裂后,一般建议通过手工方式修复脑裂问题,为了彻底解决脑裂问题。在某些情况下脑裂自动修复还是比较可取的,DRBD自动修复脑裂的策略如下:
丢弃比较新的主用节点所做的修改。在这种模式下,当网络重新建立连接并且发现了脑裂后,DRBD会丢弃自动切换到主用节点上的主机所修改的数据。
丢弃老的主用节点所做的修改。在这种模式下,DRBD会丢弃首先切换到主用节点上的主机所修改的数据。
丢弃修改比较少的主用节点的修改。在这种模式下,DRBD会首先检查两个节点的数据,然后丢弃修改比较少的主机上的数据。
一个节点数据没有发生变化的情况下完美修复脑裂。在这种模式下,如果其中一台主机在发生裂脑时没有发生数据修改,那么就可以完美解决脑裂问题。