DRBD(Distributed Replicated Block Device)是Linux内核自带的块设备复制技术,通过镜像机制实现数据的实时同步,是构建低成本、高可靠双机热备与容灾系统的核心工具。
drbd linux 安装配置实战
DRBD的安装配置是使用的基础。环境准备:确保内核版本不低于2.6.33,查看命令uname -r,对于CentOS 7,推荐从ELRepo仓库安装,具体命令如下:
- 导入ELRepo GPG密钥:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org - 安装ELRepo仓库:
yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm - 安装DRBD内核模块和工具:
yum install -y kmod-drbd84 drbd84-utils - 加载模块:
modprobe drbd,并加入开机自启:echo drbd > /etc/modules-load.d/drbd.conf
对于Ubuntu 18.04/20.04,系统自带DRBD模块,只需安装drbd-utils:apt install drbd-utils -y。
配置资源文件:DRBD资源定义在/etc/drbd.d/目录下,以.res以下是一个标准双机配置示例:
resource r0 {
device /dev/drbd0;
disk /dev/sdb1;
meta-disk internal;
net {
sndbuf-size 512k;
max-buffers 4096;
}
syncer {
rate 1000M;
}
on node1 {
address 192.168.1.10:7788;
}
on node2 {
address 192.168.1.20:7788;
}
}
初始化与启动:在所有节点上执行drbdadm create-md r0,然后drbdadm up r0,设定主节点:在选定节点执行drbdadm primary --force r0,此时可以用drbdadm status查看同步状态。首次同步需要时间,取决于磁盘大小和网络带宽。
常见问题:SELinux和防火墙可能阻止DRBD通信,建议关闭SELinux或添加规则,并在防火墙放行7788端口,磁盘分区必须使用完整磁盘或分区,且不能包含文件系统(DRBD会覆盖),对于drbd centos 7 配置,特别注意ELRepo版本与内核的匹配,避免模块加载失败。
drbd linux 高可用机制详解
DRBD通过块设备镜像实现数据复制,其核心是资源角色和复制协议。角色:Primary(可读写,提供数据访问)、Secondary(只读,接收复制数据)。协议:A/B/C,其中C是同步模式,确保写操作在两台主机磁盘都完成后才返回,是生产环境首选。
主从切换与集群集成
单独使用DRBD无法实现自动故障切换,需要配合集群软件如Pacemaker,Pacemaker通过资源代理(OCF)管理DRBD资源,监控节点状态,当主节点宕机时,自动将从节点提升为Primary并挂载文件系统。配置示例:使用pcs命令创建DRBD资源,指定drbddisk和Filesystem等资源组,具体操作包括定义资源组、设置约束,确保资源在主节点上运行。
drbd 脑裂处理与修复
脑裂是DRBD运维中最棘手的故障,当两个节点之间的网络中断,但都试图成为Primary时,就会发生脑裂。检测方法:drbdadm status显示SplitBrain,/proc/drbd也给出明确提示。修复方法:
- 自动修复:通过配置
after-sb-0pri、after-sb-1pri、after-sb-2pri参数,指定策略。net { after-sb-0pri discard-zero-changes; after-sb-1pri discard-secondary; after-sb-2pri disconnect; }这样当脑裂发生时,DRBD会根据策略自动丢弃数据并重新同步,无需人工干预。
- 手动修复:确认数据最新节点,在其上执行
drbdadm primary --force,在另一节点执行drbdadm secondary --discard-my-data,然后等待同步。业内专家指出,手动修复前必须通过文件系统日志或应用层对比数据,避免丢失更新。
双主模式适用场景
双主模式(Primary/Primary)允许同时从两个节点读写,但必须使用分布式锁管理器(DLM)和集群文件系统(如GFS2、OCFS2),这种模式适合对等共享存储,但配置复杂,需要精心调整同步参数,否则容易导致数据不一致。行业共识认为,除非有明确需求,否则建议使用主从模式配合高可用集群。
drbd 性能优化与生产实践
DRBD性能直接影响业务IO,优化需从网络、磁盘、参数三方面入手。
- 网络优化:使用独立网卡或绑定网卡,避免与业务流量争抢,调整
sndbuf-size和rcvbuf-size,建议千兆网络设为512k,万兆网络设为2M,开启TCP offload:ethtool -K eth0 gro on gso on tso on。 - 磁盘优化:使用SSD并启用写缓存(需有电池保护),调整磁盘调度器为
noop或deadline:echo noop > /sys/block/sdb/queue/scheduler。 - DRBD参数调优:
max-buffers:增大可提升吞吐,默认2048,建议设为4096-8192。max-epoch-size:与max-buffers配合,建议设为相同值。rate:同步速率限制,设为物理带宽的70-80%,避免影响业务IO。
典型场景调优建议
- 数据库场景(MySQL/PostgreSQL):使用协议C,并设置
sndbuf-size 1M,max-buffers 8192,将DRBD设备格式化为xfs,挂载选项noatime,nobarrier。据统计,此类配置可将同步延迟控制在毫秒级。 - 异地容灾场景:若网络延迟>10ms,建议使用协议A或B,并在应用层保证数据一致性,启用DRBD的
csums-alg和verify-alg进行数据完整性校验。
drbd vs 分布式存储
| 对比项 | DRBD + Pacemaker | Ceph | GlusterFS |
|---|---|---|---|
| 数据一致性 | 同步协议C保证强一致 | 可配置(一般强一致) | 最终一致 |
| 运维复杂度 | 低,双机即可 | 高,需至少3台、monitor、OSD部署 | 中,结构简单 |
| 性能(延迟) | 极低(毫秒级) | 中等(受网络开销影响) | 中等(受FUSE开销) |
| 扩展性 | 双机,不支持多活 | 良好,支持千节点 |
良好,支持弹性扩展 |
| 成本 | 低(开源免费) | 中(硬件需求高) | 低(开源) |
行业共识认为,DRBD最适合需要低延迟、强一致且规模较小的双机热备场景;对于云原生环境或需要弹性扩展的场景,Ceph或GlusterFS更合适,但DRBD在传统企业数据中心中仍占据重要地位,尤其是金融、制造等对数据一致性要求极高的行业。
DRBD作为Linux内核原生的块设备复制方案,其稳定性和成熟度毋庸置疑,无论是初学者还是资深运维,掌握DRBD的安装配置、高可用机制和性能优化,都是构建高可用存储系统的关键。从单机镜像到双机热备,DRBD始终是连接数据与业务连续性的可靠桥梁。
drbd linux 部署常见问题解答
问题1:drbd linux 配置后如何验证同步是否正常?
使用drbdadm status命令查看资源状态,正常输出示例如下:
r0 role:Primary
disk:UpToDate
peer role:Secondary
disk:UpToDate
connection:Connected
若ds显示UpToDate/UpToDate且st显示Connected,表示同步完成,也可通过cat /proc/drbd查看详细统计,包括数据量、网络性能等。
问题2:drbd 脑裂后如何自动恢复?
在global_common.conf的net段配置自动脑裂策略,
net {
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
}
这样当脑裂发生时,DRBD会根据策略自动丢弃数据并重新同步,无需人工干预,但需注意,自动策略可能丢数据,务必根据业务重要性权衡。
问题3:drbd linux 在云服务器上使用需要注意什么?
云服务器内网带宽通常有限,且磁盘IOPS受虚拟化影响,建议使用同步协议C,但需监控网络延迟,若延迟超过5ms,可考虑改用协议B,确保云平台支持自定义内核模块,部分轻量云主机可能无法加载DRBD模块,云磁盘的写缓存策略需谨慎设置,避免数据丢失。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/502729.html



