DRBD分布式复制块设备详解:原理、工作模式与双节点配置实战指南
一、什么是DRBD
DRBD全称Distributed Replicated Block Device,即分布式复制块设备。它是一种基于软件实现的块设备级数据同步方案,自Linux内核2.6.33版本起被正式集成进主线内核。DRBD运行在内核空间,能够在两台独立主机之间实现块设备数据的实时镜像和同步,整个过程对上层应用完全透明。
DRBD的核心作用
DRBD的主要功能是将两台服务器的块设备数据保持完全一致。当一台服务器上的DRBD设备发生写入操作时,数据会被自动复制到另一台服务器上,从而实现数据的高可用保护。这一特性使得DRBD成为构建高可用集群系统的理想存储底层方案。
二、DRBD的工作原理
DRBD的工作机制非常巧妙。当应用程序向挂载了DRBD设备的节点写入数据时,数据流经内核缓冲区时会被DRBD模块拦截并复制成两份:
- 第一份数据写入本地物理磁盘
- 第二份数据通过TCP/IP网络传输到远程节点
远程节点的DRBD模块接收到数据后,会将其写入本地对应的块设备中。整个复制过程完全在内核层面完成,不需要任何用户态程序的参与,因此效率非常高。
DRBD的两大组成部分
- 内核模块:负责实际的数据传输与同步控制,是整个系统的核心引擎
- 用户空间管理工具:提供配置和管理接口,用于定义资源、设置同步策略、监控运行状态
三、DRBD的工作模式
根据实际业务需求,DRBD提供了两种不同的工作模式:
单主模式
这是最常用的模式,也是默认模式。在该模式下,任何时候只有一个节点(主节点)可以对DRBD资源进行读写操作,另一个节点(备节点)只能被动接收同步数据。这种模式非常适合经典的主备高可用架构,比如搭配Keepalived或Pacemaker使用。
双主模式
该模式下两个节点都可以同时对DRBD资源进行读写操作。需要注意的是,双主模式必须配合分布式锁管理器(DLM)和集群文件系统(如GFS、OCFS2)一起使用,否则会出现数据冲突问题。此功能从DRBD 8.0版本开始支持,适用于需要双向同步的特殊场景。
四、DRBD配置实战:双节点部署
下面我们通过一个具体的实例,演示如何在两台CentOS服务器上搭建DRBD环境。
实验环境说明
项目 | 节点1 | 节点2 |
|---|---|---|
主机名 | node1.a.org | node2.a.org |
IP地址 | 192.168.0.202 | 192.168.0.204 |
DRBD磁盘分区 | /dev/sda5 | /dev/sda5 |
分区大小 | 1GB | 1GB |
第一步:前期环境准备
配置主机名解析
在两台节点的/etc/hosts文件中添加以下内容,确保主机名能被正确解析:
192.168.0.202 node1.ipipp.com node1
192.168.0.204 node2.ipipp.com node2设置主机名
分别在两台节点上执行对应命令:
- 在node1上执行:
hostname node1.ipipp.com - 在node2上执行:
hostname node2.ipipp.com
执行完毕后,使用uname -n命令验证主机名是否设置正确。
第二步:安装DRBD软件包
如果你的系统内核版本低于2.6.33,需要单独安装DRBD的内核模块和用户空间工具,并且两者版本必须保持一致。这里以DRBD 8.3版本为例:
yum -y --nogpgcheck localinstall drbd83-8.3.8-1.el5.CentOS.i386.rpm kmod-drbd83-8.3.8-1.el5.centos.i686.rpm对于内核版本高于2.6.33的系统,只需要安装用户空间管理工具即可,因为内核模块已经内置。
第三步:配置DRBD
复制配置文件模板
首先将系统自带的示例配置文件复制到/etc目录下:
cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc编辑全局配置文件
打开/etc/drbd.d/global_common.conf文件,进行以下关键配置:
全局设置
global {
usage-count no; # 关闭使用统计上报
}公共配置
common {
protocol C; # 使用同步协议C,数据写入两端磁盘后才返回成功
handlers {
pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh";
pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh";
split-brain "/usr/lib/drbd/notify-split-brain.sh";
}
disk {
on-io-error detach; # I/O错误时将设备分离
}
net {
cram-hmac-alg sha1; # 启用HMAC-SHA1加密认证
shared-secret "your_secret_key"; # 设置共享密钥
}
syncer {
rate 100M; # 限制同步速率为100MB/s
}
}第四步:定义DRBD资源
创建一个新的资源定义文件,例如/etc/drbd.d/r0.res,内容如下:
resource r0 {
on node1.ipipp.com {
device /dev/drbd0;
disk /dev/sda5;
address 192.168.0.202:7788;
meta-disk internal;
}
on node2.ipipp.com {
device /dev/drbd0;
disk /dev/sda5;
address 192.168.0.204:7788;
meta-disk internal;
}
}第五步:初始化DRBD设备
在两台节点上依次执行以下命令:
- 创建元数据:
drbdadm create-md r0- 启动DRBD服务:
/etc/init.d/drbd start- 查看同步状态:
cat /proc/drbd- 在其中一个节点上设置为主节点:
drbdadm -- --overwrite-data-of-peer primary r0此时两台节点之间的数据同步就会自动开始。可以通过/proc/drbd文件实时监控同步进度。
五、DRBD使用注意事项
网络环境要求
DRBD依赖网络进行数据传输,因此网络质量和带宽直接影响同步性能。建议使用千兆以上网络环境,并配置独立的网卡用于数据同步,避免与业务流量争抢带宽。
磁盘性能匹配
两个节点的磁盘性能最好保持一致,否则慢速磁盘会成为整个系统的瓶颈。SSD搭配HDD的做法会导致严重的性能下降。
脑裂问题处理
当两个节点之间的网络中断后又恢复时,可能会出现脑裂现象。需要提前配置好脑裂检测和自动恢复脚本,或者在发生脑裂时手动干预修复。
六、总结
DRBD作为一种成熟的开源块设备复制技术,为Linux环境下的高可用存储提供了坚实的基础。通过本文的介绍,你应该对DRBD的工作原理、工作模式以及实际配置有了全面的了解。在实际生产环境中,DRBD通常与其他高可用软件(如Pacemaker、Corosync)配合使用,共同构建完整的高可用集群解决方案。只要按照正确的步骤配置,DRBD就能稳定地为你提供数据安全保障。