DRBD可实现双机磁盘毫秒级镜像,但“秒级”非默认值,取决于网络带宽、磁盘IO、协议选择(推荐protocol C)及syncer rate参数配置;初始全量同步可能耗时数分钟,增量同步在局域网中通常稳定于毫秒级延迟。

DRBD 能实现双机磁盘秒级镜像,但「秒级」不是默认值,而是取决于网络带宽、磁盘IO能力、同步协议选择和 syncer 配置;不调优的话,初始全量同步可能耗时数分钟甚至更久,而后续增量同步在局域网中通常能稳定在毫秒级延迟。
drbdadm initialize 之前必须确保的三件事
DRBD 启动失败绝大多数源于这三项没做干净:
- 两节点时间差必须
< 1s(用chronyd或ntpd同步,systemctl enable --now chronyd,别只跑一次ntpdate) -
/etc/hosts中主机名必须与hostname -s输出完全一致,且双向可解析(ping node1和ping node2都要通) - 底层磁盘设备(如
/dev/sdb1)必须未挂载、未被 LVM 使用、无文件系统(blkid /dev/sdb1应无输出,否则用wipefs -a /dev/sdb1清除)
resource 配置里 protocol C 和 rate 的实际影响
选同步协议不是“越强越好”——protocol C 是唯一能保证主从数据强一致的选项,但它会把写延迟暴露给上层应用;若网络抖动或备节点磁盘慢,write() 系统调用就会卡住。此时 rate 参数就起关键作用:
-
rate 50M;表示每秒最多同步 50MB,防止占满千兆网卡(理论极限约 110MB/s),也避免压垮备节点磁盘 - 若实测延迟高,可先设为
rate 10M;,等初始同步完成后再用drbdadm adjust r0动态调高 - 千万别写成
rate 0;(意为不限速),尤其在千兆以下网络或机械盘环境下,极易引发超时和脑裂
drbdadm create-md 失败的常见原因和绕过方法
drbdadm create-md r0 报错最常卡在元数据写入阶段,典型错误是 Can not create metadata on /dev/sdb1: Device or resource busy:
- 检查是否遗漏了
blockdev --setro /dev/sdb1(DRBD 8.4+ 要求设备只读才能初始化元数据) - 确认没加载
dm_mod或lvm2模块干扰(lsmod | grep -E 'dm|lvm',有则rmmod) - 若仍失败,改用
drbdadm --force create-md r0强制写入(仅限测试环境,生产慎用) - 成功后务必执行
drbdadm up r0,再用cat /proc/drbd看状态是否为Secondary/Secondary
首次同步完成后怎么验证镜像一致性
不能只看 cat /proc/drbd 显示 UpToDate/UpToDate 就认为完事——那只是 DRBD 自己的状态,不代表底层数据真一致:
- 在主节点执行
dd if=/dev/urandom of=/tmp/testdata bs=1M count=100,然后md5sum /tmp/testdata记下 hash - 将该文件写入 DRBD 设备:
dd if=/tmp/testdata of=/dev/drbd0 bs=1M - 切换主节点:
drbdadm primary r0(原主)→drbdadm secondary r0(原备)→drbdadm primary r0(原备,现主) - 在新主节点上
dd if=/dev/drbd0 of=/tmp/checkdata bs=1M count=100,再md5sum /tmp/checkdata对比
真正难的是跨节点 IO 调度竞争和内核模块版本对齐——kmod-drbd90 必须严格匹配当前运行内核版本(uname -r),哪怕小版本差一个 patch,modprobe drbd 都可能静默失败,dmesg | tail 才是唯一可信的日志源。


















