DRBD从零到一:网络RAID1的配置指南
问题答案DRBD是什么网络版RAID1,两台服务器之间实时同步块设备什么时候用需要高可用数据存储的场景:数据库、文件服务、虚拟化为什么用省钱(不用买共享存储)、实时同步、对应用透明怎么搭建两台服务器 + drbd-utils + 配置文件 + 初始化 + 挂载DRBD是企业级高可用架构的基石之一,搭配Pacemaker、Corosync等集群软件,可以构建出不输商业存储的HA方案。
开头语:$ sudo apt install happiness —— 执行成功!有效期:丙午马年全年。给各位云原生战友拜年了!
写作背景:之前有用到rsync和lsync,但是只有同步,没有高可用,于是用到DRBD。可以实现高可用。DRBD、rsync、lsyncd 这三个工具完全可以组合使用,形成一个“实时同步 + 定时备份 + 高可用”的完整数据安全体系。
一、DRBD是什么?
DRBD(Distributed Replicated Block Device)是一个基于Linux内核的分布式块设备复制系统,简单说就是在两台服务器之间实时同步数据,像一面“网络镜子”。
1.1 核心定位
把它想象成网络版的RAID1——RAID1是把数据同时写到两块本地硬盘,DRBD则是把数据同时写到本地和远程服务器上。它在系统中的位置处于文件系统和物理磁盘之间:
应用程序 → 文件系统 → DRBD → 本地磁盘
↓
网络传输 → 对端DRBD → 对端磁盘
1.2 工作机制
DRBD采用主从模式运行:
-
主节点(Primary):可以读写数据,应用程序直接操作DRBD设备
-
从节点(Secondary):只能接收主节点同步的数据,不能直接读写
当主节点有数据写入时,DRBD会截获这个写操作,同时写入本地磁盘并通过网络发送给从节点,从节点收到后再写入自己的磁盘。
1.3 三种复制协议
DRBD提供三种复制模式,在性能和安全性之间取舍:
| 协议 | 名称 | 工作原理 | 风险 | 适用场景 |
|---|---|---|---|---|
| A | 异步 | 本地写完就返回,不管对方 | 主节点故障可能丢数据 | 对性能要求极高、可容忍少量丢数据 |
| B | 半同步 | 本地写完且数据发到对方内存就返回 | 双机同时断电可能丢数据 | 介于A和C之间 |
| C | 同步 | 本地和对方都写完才返回 | 最安全,几乎不丢数据 | 生产环境首选 |
企业生产环境一般都用协议C,虽然网络延迟会影响一点写性能,但能保证数据一致性。
二、什么时候用DRBD?
2.1 典型应用场景
-
高可用数据库:MySQL、PostgreSQL等关键数据库,主库宕机后备库能直接拉起服务
-
高可用文件服务器:NFS、Samba等文件共享服务
-
虚拟化存储:KVM、Proxmox等虚拟化平台的共享存储
-
容器持久化:与K8s结合,为有状态应用提供高可用存储
2.2 真实案例
某电商公司用两台服务器跑MySQL,之前靠主从复制做高可用,但主库磁盘坏了还是丢数据。上了DRBD后,数据实时同步到备机,主库宕机直接切备机,数据一条不丢。
三、为什么要用DRBD,不用共享存储?
3.1 DRBD vs 共享存储对比
| 对比项 | 传统共享存储(SAN/NAS) | DRBD |
|---|---|---|
| 成本 | 贵,一套下来几十上百万 | 免费,用服务器本地硬盘即可 |
| 架构 | 需要专用存储网络 | 普通IP网络即可 |
| 单点故障 | 存储控制器可能成瓶颈 | 无单点,数据分散在两台服务器 |
| 扩展性 | 纵向扩展,成本高 | 横向扩展,加服务器就行 |
| 运维复杂度 | 需要专业存储管理员 | Linux运维就能搞定 |
3.2 DRBD的核心优势
-
省钱:不需要昂贵的共享存储柜,普通服务器+本地硬盘就能实现高可用
-
透明:应用程序完全感知不到底层是网络复制,操作/dev/drbd0就像操作本地盘
-
实时:数据同步是实时发生的,不是定期备份
-
成熟:在Linux内核中已经存在十几年,稳定性经过大量生产环境验证
四、从零开始搭建DRBD(Ubuntu 22.04/24.04版)
下面用两台Ubuntu服务器演示,假设:
-
节点A:
drbd01,IP192.168.1.10 -
节点B:
drbd02,IP192.168.1.11 -
数据盘:
/dev/sdb(每台都有,大小相同)
4.1 环境准备(两台都执行)
# 1. 配置主机名解析
cat >> /etc/hosts << EOF
192.168.1.10 drbd01
192.168.1.11 drbd02
EOF
# 2. 安装DRBD软件包
apt update
apt install -y drbd-utils
# 3. 加载内核模块
modprobe drbd
echo "drbd" >> /etc/modules
# 4. 确认数据盘存在(/dev/sdb)
lsblk | grep sdb
4.2 配置DRBD
步骤1:编辑配置文件 /etc/drbd.d/global_common.conf
cat > /etc/drbd.d/global_common.conf << EOF
global {
usage-count no;
}
common {
net {
protocol C; # 使用同步协议
}
}
EOF
步骤2:创建资源配置文件 /etc/drbd.d/r0.res
cat > /etc/drbd.d/r0.res << EOF
resource r0 {
device /dev/drbd0;
disk /dev/sdb;
meta-disk internal;
on drbd01 {
address 192.168.1.10:7788;
}
on drbd02 {
address 192.168.1.11:7788;
}
}
EOF
配置说明:
-
device:DRBD虚拟设备路径 -
disk:实际使用的物理磁盘 -
meta-disk internal:元数据存在磁盘末尾 -
address:监听IP和端口(默认7788)
步骤3:复制配置到另一台节点
# 在drbd01上执行
scp /etc/drbd.d/* root@drbd02:/etc/drbd.d/
4.3 初始化DRBD
步骤1:初始化元数据(两台都执行)
drbdadm create-md r0
# 出现"New drbd meta data block successfully created"表示成功
步骤2:启动DRBD服务(两台都执行)
systemctl start drbd
systemctl enable drbd
步骤3:设置主节点(只在drbd01执行)
drbdadm -- --overwrite-data-of-peer primary r0
步骤4:查看同步状态
watch -n 1 cat /proc/drbd
# 等待状态变为 UpToDate/UpToDate
输出示例:
version: 8.4.11 (api:1/proto:86-101)
GIT-hash: ...
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
ns:1024 nr:0 dw:0 dr:1064 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:1048388
[>....................] sync'ed: 0.2% (1024/1024)M
4.4 创建文件系统并使用
步骤1:在主节点创建文件系统
# 在drbd01上执行
mkfs.ext4 /dev/drbd0
步骤2:挂载使用
mkdir /data
mount /dev/drbd0 /data
df -h /data
步骤3:测试写入
echo "DRBD test" > /data/test.txt
cat /data/test.txt
4.5 测试故障切换
场景:模拟主节点drbd01宕机,将服务切换到drbd02
步骤1:在drbd01上卸载并降级(模拟维护)
umount /data
drbdadm secondary r0
步骤2:在drbd02上升级为主节点
drbdadm primary r0
mkdir /data
mount /dev/drbd0 /data
ls /data # 应该能看到test.txt
步骤3:切换回原主节点
# drbd02上
umount /data
drbdadm secondary r0
# drbd01上
drbdadm primary r0
mount /dev/drbd0 /data
五、与Pacemaker集成实现自动故障转移
手动切换太麻烦,可以用Pacemaker实现自动化。这里给个简要框架:
# 安装Pacemaker
apt install -y pacemaker corosync pcs
# 配置Pacemaker集群(在两台执行)
passwd hacluster # 设置统一密码
pcs host auth drbd01 drbd02 -u hacluster
pcs cluster setup mycluster drbd01 drbd02
pcs cluster start --all
# 配置DRBD资源在Pacemaker中
pcs resource create drbd_r0 ocf:linbit:drbd \
drbd_resource=r0 \
op monitor interval=60s
# 配置为主从克隆资源
pcs resource promotable drbd_r0 \
promoted-max=1 promoted-node-max=1 \
clone-max=2 clone-node-max=1 notify=true
# 配置文件系统资源
pcs resource create fs_data Filesystem \
device=/dev/drbd0 directory=/data fstype=ext4 \
op monitor interval=40s
# 配置资源约束
pcs constraint colocation add fs_data with drbd_r0-clone INFINITY \
with-rsc-role=Promoted
pcs constraint order promote drbd_r0-clone then start fs_data
这样配置后,主节点宕机时Pacemaker会自动把DRBD提升、挂载文件系统,业务无感切换。
六、常见问题与注意事项
6.1 Split-brain(脑裂)
当网络中断导致两台都以为自己是主节点时,数据会不一致。
恢复方法:
# 查看脑裂状态
drbdadm status
# 在确认数据最新的节点上执行
drbdadm primary --force r0
# 在另一节点丢弃数据并重新同步
drbdadm secondary r0
drbdadm -- --discard-my-data connect r0
6.2 防火墙配置
DRBD默认使用TCP端口7788和7789,需要放行:
ufw allow 7788/tcp
ufw allow 7789/tcp
6.3 重要提醒
-
DRBD不是备份:如果主节点误删文件,删除操作会同步到备机,数据就真没了。所以DRBD要和传统备份(rsync、备份软件)配合使用。
-
磁盘大小必须一致:两节点的数据盘容量要一样,否则无法同步。
-
网络质量很重要:同步协议C对网络延迟敏感,建议用专线或独立网卡跑DRBD流量。
七、总结
| 问题 | 答案 |
|---|---|
| DRBD是什么 | 网络版RAID1,两台服务器之间实时同步块设备 |
| 什么时候用 | 需要高可用数据存储的场景:数据库、文件服务、虚拟化 |
| 为什么用 | 省钱(不用买共享存储)、实时同步、对应用透明 |
| 怎么搭建 | 两台服务器 + drbd-utils + 配置文件 + 初始化 + 挂载 |
DRBD是企业级高可用架构的基石之一,搭配Pacemaker、Corosync等集群软件,可以构建出不输商业存储的HA方案。
结束语:本人写一些笔记记录,以及工作中遇到的一些问题,方便之后重复阅读,每个人的搭建和操作都不一样,但是可以参考一下,感谢您的点击和阅读。
更多推荐



所有评论(0)