导读:本期聚焦于新井创作的《Linux 高可用集群中如何配置 DRBD 实现存储块级实时复制?》,敬请观看详情。存储单点故障是搭建 Linux 高可用集群时最容易被忽视的环节,一旦承载业务数据的服务器宕机,即使应用层切换再快也无济于事。DRBD 通过在内核网络块设备层面实现块级实时同步,让两台服务器的磁盘数据始终保持一致,主节点故障时备节点可以立即接管数据继续提供服务。本文围绕 DRBD 的核心原理展开,详细讲解双节点环境下从安装软件包、编写全局配置与资源定义、初始化元数据、创建文件系统,到提升主备角色的完整操作流程,同时分析主备模式与双主模式的适用差异,并补充脑裂预防、同步速率调优以及心跳网络分离等生产环境的实用经验,帮助你搭建一套真正可靠的存储高可用方案。

DRBD 全称 Distributed Replicated Block Device,即分布式复制块设备,它是 Linux 内核层面的一种软件化、无共享架构的存储复制方案。简单来说,DRBD 会把本地磁盘上的一个块设备实时镜像到另一台服务器的对应块设备上,两台机器之间通过专用网络不断同步数据块。当主节点因为硬件故障或系统崩溃而不可用时,备节点上的数据几乎是完整且最新的,配合 Pacemaker 等集群资源管理器,就能实现业务几乎无感知的故障切换。相比共享存储阵列,DRBD 不需要昂贵的 SAN 设备,两台普通服务器加一条交叉网线就能跑起来,这也是它在中小规模高可用场景中流行的原因。

Linux 高可用集群中如何配置 DRBD 实现存储块级实时复制?

DRBD 的核心原理与架构模式

理解 DRBD 的关键在于明白它工作在块设备层,而不是文件系统层。它会在内核中注册一个虚拟块设备,例如 /dev/drbd0,上层的文件系统和应用程序直接读写这个虚拟设备,DRBD 驱动负责把每一次写操作通过内部逻辑传递给本地磁盘,同时把数据块封装成报文发送给对端节点。对端节点收到数据后写入自己的底层磁盘,并根据配置的同步协议决定何时向主节点确认。

DRBD 提供三种同步协议,区别在于确认时机的不同。协议 A 是异步复制,主节点本地写完就确认,数据可能在网络中还在传输,性能最好但可能丢最新数据;协议 B 是半同步,主节点数据包发出后即确认;协议 C 是完全同步,只有对端落盘确认后主节点才向上层返回写入成功,这是生产环境最常用的选择,能保证单节点故障时数据零丢失。绝大多数数据库、业务数据的复制场景都建议使用协议 C,除非对性能要求极高且能容忍少量数据丢失。

在部署形态上,DRBD 分为单主模式和双主模式。单主模式下同一时刻只有一个节点可以挂载文件系统写入,是最安全、最常见的方式,通常与 Pacemaker 配合由集群自动切换主备角色。双主模式要求底层文件系统支持集群锁,比如 GFS2 或 OCFS2,两个节点可以同时读写同一块设备,适用于需要负载均衡的特殊场景,但配置复杂度和排障难度都会明显上升。初次接触 DRBD 建议先从单主模式入手。

双节点环境下的完整配置步骤

下面以两台 CentOS/RHEL 系服务器为例,主机名分别为 node1 和 node2,各准备一块空闲磁盘分区(例如 /dev/sdb1),并配置好主机名解析。首先在两个节点上安装 DRBD 软件包并加载内核模块:

# 两节点均执行
yum install -y drbd90-utils kmod-drbd90
modprobe drbd
lsmod | grep drbd   # 确认模块已加载

接下来编写全局配置文件 /etc/drbd.d/global_common.conf,这个文件定义全局参数和通用选项。需要注意 net 段中的 verify-alg 用于数据校验,cram-hmac-algshared-secret 用于节点间通信认证,生产环境务必开启认证:

global {
    usage-count no;
}
common {
    net {
        protocol C;
        cram-hmac-alg sha256;
        shared-secret "MySecretKey123";
    }
    disk {
        on-io-error detach;
        resync-rate 200M;
    }
}

然后为复制资源单独创建一个资源文件,例如 /etc/drbd.d/r0.res。资源文件定义了资源的名字、两个节点各自使用的底层设备和监听端口。两端端口可以相同也可以不同,但必须保证防火墙放行:

resource r0 {
    on node1 {
        device    /dev/drbd0;
        disk      /dev/sdb1;
        address   192.168.10.11:7789;
        meta-disk internal;
    }
    on node2 {
        device    /dev/drbd0;
        disk      /dev/sdb1;
        address   192.168.10.12:7789;
        meta-disk internal;
    }
}

配置文件写好后,将 global_common.conf 和 r0.res 原样拷贝到另一节点,保证两边的配置完全一致。接着在两个节点上初始化 DRBD 元数据并启动资源。元数据是 DRBD 记录数据块同步状态的内部结构,选择 internal 方式时它会存放在底层分区的末尾,因此分区不需要预先创建文件系统,也不需要格式化,更不要挂载:

# 两节点均执行:初始化元数据
drbdadm create-md r0

# 两节点均执行:启用资源
drbdadm up r0

# 仅在 node1 上执行:将 node1 提升为初始主节点并开始首次全量同步
drbdadm primary r0 --force

# 查看同步进度,等待状态变为 UpToDate/UpToDate
cat /proc/drbd
drbdadm status r0

首次全量同步的时间取决于磁盘容量和复制速率设置,可以用 drbdadm status 观察进度百分比。同步完成后,只有主节点可以对 /dev/drbd0 进行格式化和挂载操作,注意这里格式化的是 drbd 设备而不是底层分区:

# 仅在 node1(主节点)执行
mkfs.xfs /dev/drbd0
mkdir -p /data
mount /dev/drbd0 /data
echo "test data" > /data/hello.txt

主备切换验证与 Pacemaker 集成

手动验证切换是检验配置是否正确的关键一步。在 node1 上先卸载文件系统并把角色降级为备节点,再在 node2 上执行升级和挂载操作:

# node1 上执行
umount /data
drbdadm secondary r0

# node2 上执行
drbdadm primary r0
mount /dev/drbd0 /data
cat /data/hello.txt   # 应能看到 node1 上写入的内容

如果 node2 上能正常读到之前写入的文件,说明复制链路工作正常。生产环境中不应该靠手工执行这些命令来完成切换,而是把 DRBD 资源、文件系统和虚拟 IP 一起交给 Pacemaker 管理。Pacemaker 会监测节点健康状态,一旦主节点失联,自动在备节点上执行升级和挂载,整个过程在几十秒内完成,业务系统只需重连虚拟 IP 即可恢复服务。

与 Pacemaker 集成时有一个常见坑点需要特别注意:DRBD 的角色提升必须在文件系统挂载之前完成,因此资源之间要配置 colocation 和 order 约束,保证提升主角色、挂载文件系统、启动 IP 三个动作按正确顺序执行。另外要合理设置 fencing 策略,避免出现两个节点同时认为自己是主节点的脑裂场景,脑裂一旦发生,两端数据各自演进,后续只能人工判断保留哪一端数据,另一端的数据将被覆盖丢弃。

生产环境的调优与避坑经验

第一个建议是使用专用的同步网络。DRBD 的复制流量直接决定写入延迟,如果和数据流量、业务流量混用一张网卡,网络拥塞时数据库写入会被明显拖慢。有条件的话单独配一块千兆或万兆网卡跑同步流量,配置文件中 address 字段绑定这个专用网段的 IP 即可。条件允许时还可以做双链路冗余,配合 DRBD 的多路径配置防止单网卡故障引发降级。

第二个关注点是同步速率的平衡。首次全量同步或故障恢复后的重新同步阶段,如果 resync-rate 设置过高,会占满磁盘 IO 和网络带宽,影响线上业务;设置过低则恢复窗口拉长,风险敞口变大。可以在运行期动态调整同步参数,例如在线把同步速率临时提到 300M 加快追赶,追平后再降回来。此外开启 c-plan-ahead 相关的动态速率控制参数,让 DRBD 根据网络状况自动调节同步速度,是更省心的做法。

最后是脑裂的预防与处理。脑裂通常发生心跳网络中断但业务口正常的场景,两个节点都尝试变成主节点。预防手段包括:至少两条独立的心跳链路、配置 DRBD 的磁盘超时与 on-no-data-accessible 策略、在集群层启用 STONITH 强制隔离疑似故障节点。一旦 drbdadm status 显示 StandAloneWFConnection 等异常状态,不要急于强制提升,先排查网络和对端状态,谨慎使用 drbdadm connect --discard-my-data 放弃数据较旧一端的变更,让数据较新的一端重新接管。养成定期查看 /proc/drbd 状态、定期演练故障切换的习惯,才能真正保证这套高可用方案在关键时刻靠得住。

DRBD配置高可用集群存储复制修改时间:2026-09-14 00:13:11

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/20260914/56336.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。