DRBD 分布式复制块设备指南

📑 目录

  1. [什么是 DRBD?](#什么是 DRBD?)
  2. 名词解释(命令与术语)
  3. 相关概念与方案一览
  4. [DRBD 架构与工作原理](#DRBD 架构与工作原理)
  5. [DRBD 配置详解](#DRBD 配置详解)
  6. [DRBD 部署实战](#DRBD 部署实战)
  7. [DRBD 与 Corosync 集成](#DRBD 与 Corosync 集成)
  8. [DRBD 状态监控](#DRBD 状态监控)
  9. 常见问题与故障排查
  10. [DRBD 性能优化](#DRBD 性能优化)
  11. 最佳实践
  12. 总结
  13. 官方文档与参考

🎯 什么是 DRBD?

核心概念

DRBD (Distributed Replicated Block Device) 是一种分布式复制块设备,工作在 Linux 内核层面的块级数据复制解决方案。

生活类比

  • DRBD 就像是两台打印机之间的"同步复印功能"
  • 主节点 = 你正在使用的打印机
  • 从节点 = 备用打印机,自动接收所有打印任务
  • 块级复制 = 复印整页内容,而不是逐字抄写

官方定义简述 (来源:LINBIT DRBD User Guide):DRBD 是一种基于软件、无共享(shared-nothing)的复制存储方案,将块设备(硬盘、分区、逻辑卷等)的内容在多个主机之间镜像 。复制是实时、透明 的,应用无需感知数据存于多台主机;支持同步或异步镜像------同步时写完成要等所有(已连接)主机都写完才返回,异步时本地写完即可返回(通常早于传到对端)。


📖 名词解释(命令与术语)

以下对文档中出现的命令、配置项、状态字段做简要解释,并配上生活例子,便于记忆。

常用命令

命令/名称 全称或含义 说明 生活例子
drbdadm DRBD Administration 高层管理工具,从 /etc/drbd.conf 读配置并调用 drbdsetup/drbdmeta 像「项目经理」:看图纸(配置)派活,不亲自拧螺丝
drbdsetup DRBD Setup 直接配置内核中的 DRBD 模块,参数需命令行传入 像「现场工人」:直接动手调设备,一般用 drbdadm 即可
drbdmeta DRBD Metadata 创建、导出、修改 DRBD 元数据结构 像「档案员」:管元数据这本「账」,普通运维很少直接敲
drbdadm create-md Create Metadata 在底层设备上初始化 DRBD 元数据(首次建资源必做) 像「给新本子写扉页」:在磁盘上划出一块记「谁和谁在同步、哪些块已同步」
drbdadm up Up (bring up) 启动资源,建立网络连接,使设备可用 像「开门营业」:把资源拉起来、和对端连上
drbdadm primary Primary role 将本节点提升为主节点,可挂载、读写 像「接过话筒」:只有主能挂文件系统、写数据
drbdadm secondary Secondary role 将本节点降为从节点,仅接收同步 像「交还话筒」:不能再挂载,只当备份接收数据
drbdadm connect --discard-my-data Connect, discard my data 脑裂恢复时本节点丢弃本地数据、以对端为准 像「以对方账本为准,我这本作废」

配置与概念

名词 含义 生活例子
resource 一个复制单元的名字,对应一份「镜像对」 像给一对同步文件夹起名,如 mysqlweb
device DRBD 虚拟块设备,如 /dev/drbd0 像「虚拟U盘」:上层当普通块设备用,底层在两边同步
protocol A/B/C 复制协议:A 异步、B 半同步、C 同步 见下文「复制模式对比」
meta-disk internal/external 元数据写在数据盘末尾 / 单独分区 internal=笔记写在书最后一页;external=另备一本笔记本
cs (connection state) 连接状态:Connected、SyncSource、WFConnection 等 像「电话是否接通、是否正在传文件」
ro (role) 角色:Primary/Secondary 谁在「主」谁在「从」
ds (disk state) 磁盘状态:UpToDate、Inconsistent、Diskless 像「本地数据是否和对端一致、是否缺盘」
syncer 同步器配置(速率、活动日志等) 像「传文件的限速和记录本」

DRBD vs RAID 对比

RAID
同服务器复制
相同物理位置
总线传输
DRBD
跨服务器复制
不同物理位置
网络传输

特性 DRBD RAID1(镜像)
复制范围 跨服务器,可异地 同一服务器内
传输方式 网络复制 磁盘总线复制
距离限制 理论无限制(受网络延迟影响) 受限于线缆长度
灾难恢复 防止机房级灾难 只能防止单盘故障
性能影响 受网络带宽影响 几乎无影响
成本 需要两台独立服务器 只需一台服务器

生活类比

  • DRBD = 把一份文件同时传给北京和上海的朋友
  • RAID1 = 在同一个房间里复印两份文件

DRBD vs 其他复制方式 对比

维度 DRBD rsync / 文件同步 存储阵列复制(如 SAN 双活)
层级 块设备层 文件/目录层 存储设备层
实时性 实时块级同步 定时或触发,非实时 实时(视产品)
一致性 块一致,可配合任意文件系统 依赖同步时点,可能不一致 由阵列保证
主从切换 需提升 Primary,配合集群 需应用层或脚本切换 通常由阵列/多路径决定
典型场景 双机 HA、数据库镜像 备份、批量同步文件 企业存储高可用
生活例子 两台电视同步播同一节目 定期把 U 盘拷到移动硬盘 商场总机房和分机房存储柜同步

🔀 相关概念与方案一览

一、容易混淆的概念

块复制、主从、同步、脑裂等说法在不同技术里含义略有差别,稍作梳理有助于和 DRBD 一起理解。

1. 主/从在不同产品里指什么
产品/场景 「主」的含义 「从」的含义 备注
DRBD Primary:可挂载、读写,数据同步源 Secondary:仅接收同步,不可挂载 单主时仅一个 Primary,双主需配合集群 FS
MySQL 主从 主库:接受写、binlog 源 从库:只读、拉取 binlog 重放 应用层主从;DRBD 在块层,不关心库内容
Pacemaker 资源 Master:资源运行并承担主角色 Slave:资源运行但从角色 谁当主由 Pacemaker 管,DRBD 负责块镜像
数据库 Active/Passive Active:对外服务 Passive:待机接管 常与 DRBD 单主一起用:主节点 Active+Primary,从节点 Passive+Secondary

可以简单记:DRBD 的主从管的是「谁有权写这块盘 」,数据库的主从管的是「谁处理写请求」。实践中主库往往跑在 DRBD Primary 上,从库在 Secondary 上,二者配合使用。

2. 「同步」在块、库、文件里的不同含义
维度 DRBD Protocol C 数据库半同步复制 文件同步(rsync/scp)
层级 块设备 事务/日志 文件/目录
「同步」指 写块在本地和对端都落盘后返回 事务在从库落盘(或从库确认收到)后返回 某次同步任务完成时点一致
一致性粒度 块一致 事务一致 文件级,非实时
切换后 块连续、可挂 FS 从库可提升为主库 需再次同步或脚本切换
3. 脑裂(Split-Brain)在几种场景下的含义
场景 含义 常见应对
DRBD 两边都变成 Primary 并写入,数据分歧 人工选一边,另一边 discard-my-data 或以对方为准
集群(Pacemaker) 网络分区后两边都认为自己是多数派 Quorum、Fencing(STONITH)
数据库主从 误把从库当主写,或双主同时写 避免双写、用 GTID/位点做一致性选择

二、块级与高可用存储的生态

DRBD 做的是块级、主机间镜像;同一类需求下还会遇到下面这些方案,放在一起看会更有数。

块级复制 / 高可用存储
软件/方案 类型 特点 简要说明
DRBD 内核块设备镜像 双机(或多机)块同步,主从或双主+集群 FS,配置清晰 成熟、与 Pacemaker 集成好,适合双机 HA
Ceph RBD 分布式块存储 多副本、多节点、自愈,需 Ceph 集群 规模大、多节点时更合适;双机简单 HA 用 DRBD 更轻
GlusterFS(块) 通常用文件层 Gluster 以文件/卷为主,块需另配(如 QEMU 等) 纯块复制场景 DRBD 更直接
ZFS zfs send / receive 文件系统层复制 快照+增量流式同步,非实时 适合备份与异地;要实时双机写则用 DRBD
LVM 镜像 单机块镜像 同机多盘镜像,不能跨主机 跨机需 DRBD 或存储阵列
StarWind vSAN 商业/虚拟化 常用于 Hyper-V/VMware,块镜像+仲裁 商业方案;DRBD 为开源替代
存储阵列复制(如 EMC SRDF、HP 3PAR) 阵列级 阵列间同步,与主机无关 有预算、已有阵列时可考虑;DRBD 为纯软件、无专用硬件
按需求看更贴合的方案
需求 更贴合的方案 生活例子
两台服务器、块级实时镜像、开源 DRBD 两台电脑共用一个「虚拟硬盘」,实时抄写
多节点、自愈、规模大 Ceph 一个仓库多处分店,自动补货、自愈
定期备份、可接受非实时 ZFS send/receive、rsync 定期把账本复印一份寄到分公司
已有 SAN、阵列级容灾 阵列复制 总仓和分仓的货架自动同步
虚拟化环境、商业预算 StarWind 等 现成的「双机热备」商业方案

🏗️ DRBD 架构与工作原理

DRBD 在 Linux 内核中的位置

🖥️ 用户空间

应用程序
📁 文件系统

ext4/xfs
🔄 DRBD 内核模块

块设备层
⏱️ 磁盘调度层
💾 磁盘驱动

/dev/sdb
📡 网络协议栈

TCP/IP
🔌 网络接口

eth0

DRBD 复制模式

协议C_同步
✏️ 主节点写数据
💾 本地+从节点都写
🤝 双方确认
✅ 返回成功
协议B_半同步
✏️ 主节点写数据
💾 本地写完成
⏳ 等待从节点确认
✅ 返回成功
协议A_异步
✏️ 主节点写数据
💾 本地写完成
✅ 立即返回成功
📤 后台同步到从节点

协议 名称 说明 性能 安全性
Protocol A 异步复制 本地写完即返回,后台同步 ⭐⭐⭐ 最高 ⭐ 最低
Protocol B 半同步复制 本地写完+收到从节点确认 ⭐⭐ 中等 ⭐⭐ 中等
Protocol C 同步复制 双方都写完才返回 ⭐ 最低 ⭐⭐⭐ 最高

复制协议 A/B/C 详细对比

项目 Protocol A Protocol B Protocol C
何时返回「写成功」 本地落盘 + 数据进本机 TCP 发送缓冲区 本地落盘 + 对端已收到数据包(未必落盘) 本地与对端都落盘
主节点宕机可能丢数据 可能丢(缓冲区未传完的) 通常不丢(对端已收到) 不丢
双机同时断电 可能丢最近写入 可能丢最近写入 不丢
生活例子 发微信,点发送就显示「已发送」 快递「已签收」才算完成,但签收后仓库可能还没入库 两人各拿一本账本,两边都写完这一笔才翻页
典型用途 异地容灾、长距离复制 折中延迟与安全 同机房双机 HA(推荐)

DRBD 角色状态

Secondary Primary 同步源
等待连接
同步目标
等待连接
初始状态
提升为主
降级为从
连接状态
SyncSource
WFConnection
SyncTarget
✅ 主节点可以挂载文件系统

✅ 可以读写数据
❌ 从节点不能挂载

📥 只能接收同步数据

角色 说明 能否挂载 能否读写
Primary 主节点,可以读写 ✅ 可以 ✅ 可以
Secondary 从节点,只接收数据 ❌ 不可以 ❌ 不可以

重要概念:DRBD 的双主模式(两个都是 Primary)需要配合集群文件系统(如 GFS2、OCFS2)使用!

单主 vs 双主模式 对比

维度 单主(Single-Primary) 双主(Dual-Primary)
同一时刻 Primary 数量 1 个 2 个(需显式启用)
文件系统 任意(ext4、XFS 等) 必须集群文件系统(GFS2、OCFS2)
典型场景 故障转移、主备 HA 双机同时读写、在线迁移等
生活例子 一个话筒,谁当主谁拿着 两人各拿一本账,由「集群文件系统」协调谁写哪一页

⚙️ DRBD 配置详解

配置文件结构

DRBD 的主配置文件是 /etc/drbd.conf,通常采用包含方式组织:

bash 复制代码
# /etc/drbd.conf
include "drbd.d/*.conf";

资源配置示例

bash 复制代码
# /etc/drbd.d/mysql.res
resource mysql {
    protocol C;                    # 使用同步复制
    on node1.magedu.com {
        device    /dev/drbd0;      # DRBD 设备名
        disk      /dev/sdb1;       # 本地物理磁盘
        address   192.168.1.10:7789; # 监听地址
        meta-disk internal;        # 元数据存储方式
    }
    on node2.magedu.com {
        device    /dev/drbd0;
        disk      /dev/sdb1;
        address   192.168.1.11:7789;
        meta-disk internal;
    }
    disk {
        on-io-error   detach;      # I/O 错误时的行为
        fencing       resource-only; # 资源级别隔离
    }
    net {
        cram-hmac-alg   sha1;      # 数据认证算法
        shared-secret   "my-secret-key"; # 认证密钥
        after-sb-0discard-zero-changes; # 脑裂恢复策略
    }
    syncer {
        rate           100M;       # 同步速率限制
        al-extents     337;        # 活动日志大小
    }
}

配置参数解析

部分 参数 说明 生活类比
resource 资源名称 定义一个 DRBD 资源,如 mysql、web 给同步任务起个名字
protocol 复制协议 A/B/C 三种模式 同步方式约定
device DRBD 设备 /dev/drbd0/dev/drbd1 虚拟的"同步设备"
disk 物理磁盘 本地实际磁盘分区 实际存储数据的"盘子"
address 监听地址 IP:端口,用于节点间通信 两台机器的"电话号码"
meta-disk 元数据 internal 或外部路径 记录同步状态的"笔记本"

元数据说明

**元数据(Metadata)**是 DRBD 用来记录同步状态、数据位图等信息的数据。
📋 元数据内容
📝 活动日志 AL
🗺️ 位图 Bitmap
🏷️ 同步标记 Generation
记录最近写入
标记哪些块已同步
识别数据版本

元数据存储方式

方式 说明 优点 缺点
internal 存储在数据磁盘末尾 简单,不需要额外分区 占用数据磁盘空间
external 单独的元数据分区 独立存储,数据分区完整 需要额外分区配置

internal vs external 对比

维度 internal external
元数据位置 数据盘末尾一块区域 单独分区或指定设备
分区数量 只需一块数据分区 至少一块数据 + 一块元数据
数据区 略小于整盘(末尾给元数据) 数据分区 100% 给数据
生活例子 书的最后一页当目录 另备一本「目录本」
适用 简单部署、省分区 要最大化数据空间或独立备份元数据时

生活类比

  • 元数据 = 你笔记本上记录的"哪页写了什么"
  • internal = 笔记记在书的最后一页
  • external = 另外拿一个小本子记录

🚀 DRBD 部署实战

环境准备

bash 复制代码
# 两台服务器
# node1: 192.168.1.10
# node2: 192.168.1.11

# 1. 安装 DRBD 软件(两台都执行)
yum install drbd kmod-drbd drbd-utils -y

# 2. 准备磁盘分区(两台都执行)
# 假设使用 /dev/sdb 作为 DRBD 磁盘
fdisk /dev/sdb
# 创建一个主分区 sdb1

# 3. 加载 DRBD 模块(两台都执行)
modprobe drbd
lsmod | grep drbd

# 4. 设置开机自动加载
echo "modprobe drbd" >> /etc/rc.local
chmod +x /etc/rc.local

初始化 DRBD 资源

bash 复制代码
# 1. 创建 DRBD 资源配置(两台都创建相同配置)
cat > /etc/drbd.d/mysql.res << 'EOF'
resource mysql {
    protocol C;
    on node1 {
        device    /dev/drbd0;
        disk      /dev/sdb1;
        address   192.168.1.10:7789;
        meta-disk internal;
    }
    on node2 {
        device    /dev/drbd0;
        disk      /dev/sdb1;
        address   192.168.1.11:7789;
        meta-disk internal;
    }
}
EOF

# 2. 初始化元数据(两台都执行,只在第一次执行)
# 名词:create-md = 在底层磁盘上创建 DRBD 元数据,像「给新本子写扉页」
drbdadm create-md mysql

# 输出类似:
# Writing meta data...
# initializing activity log
# NOT initialized bitmap
# New drbd meta data block successfully created.

# 3. 启动 DRBD 服务(两台都执行)
drbdadm up mysql

# 或者
systemctl start drbd
systemctl enable drbd

# 4. 查看状态(两台都执行)
cat /proc/drbd

# 输出示例:
# version: 8.4.11-1
# srcver: 8AC9F04B8C41A9F4661FB0BE0992E6D1E8F2F236
# 0: cs:Connected ro:Secondary/Secondary ds:Diskless/Diskless C r-----
#    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:100

建立主从关系

bash 复制代码
# 在 node1 上执行,将其设为主节点
# 名词:primary = 提升为主角色,只有主才能挂载文件系统并读写
drbdadm -- --overwrite-data-of-peer primary mysql

# 或者(若对端无数据或已协商好)
drbdadm primary mysql

# 查看状态(node1)
cat /proc/drbd

# 输出应该显示:
# ro:Primary/Secondary
# ns:4 nr:4 dw:4 dr:4 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

创建文件系统并挂载

bash 复制代码
# 在主节点(node1)上执行

# 1. 创建文件系统
mkfs.ext4 /dev/drbd0

# 2. 挂载文件系统
mkdir /data
mount /dev/drbd0 /data

# 3. 写入测试数据
echo "Hello from DRBD" > /data/test.txt

# 4. 查看文件
cat /data/test.txt

# 5. 卸载文件系统
umount /data

切换主节点测试

bash 复制代码
# 在 node1 上降级为从节点
drbdadm secondary mysql

# 在 node2 上升级为主节点
drbdadm primary mysql

# 在 node2 上挂载文件系统
mkdir /data
mount /dev/drbd0 /data

# 查看测试数据
cat /data/test.txt

# 应该能看到:Hello from DRBD

🔄 DRBD 与 Corosync 集成(高可用 MySQL)

集群架构

节点2
节点1
集群层
📤📥 数据同步
📡 Corosync 心跳传递
🎛️ Pacemaker 资源管理
🌐 VIP 192.168.1.100
🔄 DRBD Primary
🗄️ MySQL Running
🌐 VIP 备用
🔄 DRBD Secondary
🗄️ MySQL Stopped

配置 DRBD 资源(Pacemaker)

bash 复制代码
# 1. 配置 DRBD 资源(在任一节点执行)
pcs resource create drbd_mysql ocf:linbit:drbd \
    drbd_resource=mysql \
    op monitor interval=15s role=Master \
    op monitor interval=30s role=Slave

# 2. 配置主从资源
pcs resource master ms_drbd_mysql drbd_mysql \
    master-max=1 master-node-max=1 \
    clone-max=2 clone-node-max=1 \
    notify=true

# 3. 配置文件系统资源
pcs resource create fs_mysql ocf:heartbeat:Filesystem \
    device="/dev/drbd0" \
    directory="/data" \
    fstype="ext4" \
    op monitor interval=20s

# 4. 配置 VIP 资源
pcs resource create vip_mysql ocf:heartbeat:IPaddr2 \
    ip=192.168.1.100 cidr_netmask=24 \
    op monitor interval=10s

# 5. 配置 MySQL 资源
pcs resource create mysql systemd:mysqld \
    op monitor interval=20s timeout=30s

# 6. 配置资源组
pcs resource group add mysql-group vip_mysql fs_mysql mysql

# 7. 配置约束
# MySQL 组必须在 DRBD 主节点上运行
pcs constraint colocation add mysql-group with ms_drbd_mysql INFINITY
pcs constraint order promote ms_drbd_mysql then start mysql-group \
    kind=Mandatory

# 8. 查看集群状态
pcs status

📊 DRBD 状态监控

常用监控命令

bash 复制代码
# 查看 DRBD 详细状态
drbdadm status mysql

# 查看连接状态
drbdadm cstate mysql

# 查看角色状态
drbdadm role mysql

# 查看同步状态
drbdadm dstate mysql

# 查看详细信息
drbdadm show mysql

# 查看 /proc/drbd
cat /proc/drbd

状态字段解读

📊 cat /proc/drbd 输出
📡 cs 连接状态
👤 ro 角色状态
💾 ds 磁盘状态
Connected 已连接
SyncSource 正在同步
WFConnection 等待连接
Primary/Secondary 主/从
Secondary/Primary 从/主
Primary/Primary 主/主
UpToDate/UpToDate 双方一致
UpToDate/Inconsistent 从节点不一致
Diskless/Diskless 双方无盘

字段 含义 常见值
cs 连接状态 Connected, SyncSource, SyncTarget, WFConnection
ro 角色状态 Primary/Secondary, Secondary/Primary
ds 磁盘状态 UpToDate, Inconsistent, Outdated, Diskless
ns 网络发送字节数
nr 网络接收字节数
dw 磁盘写入字节数
dr 磁盘读取字节数
al 活动日志
bm 位图
lo 本地计数

连接状态详解

状态 说明 解决方案 生活例子
Connected 正常连接 ✅ 无需操作 电话接通,正常通话
WFConnection 等待连接 检查网络、防火墙、对端是否启动 电话拨号中,对方还没接
SyncSource 正在同步数据(源) 等待同步完成 你这头在传文件给对方
SyncTarget 正在同步数据(目标) 等待同步完成 你这头在收对方传的文件
StandAlone 单机状态 检查配置文件,重启 DRBD 电话挂了,单机模式

⚠️ 常见问题与故障排查

脑裂 (Split-Brain)

什么是脑裂?
📡 网络中断
⚠️ 两个节点都认为自己是主
✏️ 数据同时写入
❌ 数据不一致 脑裂
📡 网络恢复
🔍 两个主节点互相发现
🛑 DRBD 拒绝连接 需手动解决

生活例子 :像两个值班经理同时收到「对方今天请假」的误报,都以为只有自己在岗,都去改同一本账,结果两份修改对不上;网络恢复后两边一碰头发现都是「主」,DRBD 会拒绝自动连接,必须人工决定以哪边为准、丢弃哪边数据。

脑裂的原因

  • 网络中断但两个节点都存活
  • 人为配置错误(两边都设为 Primary)
  • Corosync/Pacemaker 配置不当

解决脑裂的步骤

生活例子 :像两本账本写岔了,必须决定「以哪本为准」;选定的那一本保留,另一本按「准」的那本重抄(即丢弃本地数据、以对端为准同步)。

bash 复制代码
# 1. 确定哪个节点的数据是最新的(最重要!)
# 检查最后修改时间、数据量等

# 2. 在"错误"的节点上丢弃本地数据(以对端为准)
drbdadm secondary mysql
drbdadm connect --discard-my-data mysql

# 3. 在"正确"的节点上接受连接
drbdadm connect mysql

# 4. 等待同步完成
# watch cat /proc/drbd

# 5. 验证数据一致性

预防脑裂的方法

方法 说明 生活类比
Fencing STONITH 隔离 出问题时直接断电
仲裁设备 第三方投票 找第三个裁判来投票
双主模式 + 集群文件系统 GFS2/OCFS2 两个人同时写,用文件系统协调

同步速度慢

bash 复制代码
# 查看当前同步速率
cat /proc/drbd | grep sync

# 临时调整同步速率
drbdsetup /dev/drbd0 syncer -r 200M

# 永久调整(配置文件)
syncer {
    rate 200M;
}

磁盘 I/O 错误

bash 复制代码
# 查看错误日志
dmesg | grep drbd
tail -f /var/log/messages

# 常见错误:I/O error, detached
# 解决:检查磁盘健康状态
smartctl -a /dev/sdb

📈 DRBD 性能优化

同步速率调优

bash 复制代码
# 配置示例
disk {
    # 磁盘瓶颈时的行为
    on-io-error detach;
    # I/O 屏障算法
    barrier none;
    # 最大从节点数
    max-bio-buffers 2048;
}

net {
    # 网络缓冲区大小
    sndbuf-size 1M;
    rcvbuf-size 1M;
    # 最大连接数
    max-epoch-size 8000;
    # 超时设置
    timeout 100;
    connect-int 10;
    ping-timeout 9;
}

syncer {
    # 同步速率
    rate 100M;
    # 活动日志大小
    al-extents 337;
    # 验证速率
    verify-rate 50M;
}

性能对比

配置项 默认值 优化值 说明
rate 根据带宽 100M-1G 网络好时可以调大
al-extents 123 337 活动日志越大,重同步越快
sndbuf-size 动态 1M 固定大小减少协商
rcvbuf-size 动态 1M 固定大小减少协商

💡 最佳实践

生产环境建议

  1. 使用 Protocol C:确保数据安全
  2. 配置 Fencing:防止脑裂
  3. 定期测试切换:确保 HA 正常工作
  4. 监控同步延迟:及时发现网络问题
  5. 备份重要数据:DRBD 不是备份的替代品

DRBD 不是备份!

🔄 DRBD
实时同步 镜像
💾 备份
定期快照 历史版本
🗑️ 误删文件
DRBD 两边都没了
备份 可以恢复

特性 DRBD 备份
实时性 实时同步 定期备份
目的 高可用 灾难恢复
历史版本
防误删 ❌ 无效 ✅ 有效

生活类比

  • DRBD = 两台电视同时播放同一个节目
  • 备份 = 录制节目,可以回看之前的

📚 官方文档与参考

以下为 DRBD 的官方与常用文档,便于深入配置与排错。

项目 说明 链接
LINBIT DRBD User Guide 9.0 DRBD 9 官方用户指南(英文,含复制模式、资源、角色、Pacemaker 集成等) linbit.com/drbd-user-guide
DRBD 8.4 User Guide DRBD 8.4 用户指南(旧版,与本文配置语法接近) linbit.com Users Guide 8.4
LINBIT 文档中心 用户指南、快速参考、PDF 下载 linbit.com/drbd-user-guide
Linux 内核 DRBD 内核内 DRBD 说明(含 DRBD 9 数据结构与数据流) kernel.org DRBD
LINBIT GitHub 官方文档源码(含 8.4 / 9 版) LINBIT/linbit-documentation

🎯 总结

DRBD 是 Linux 平台上最成熟的块级数据复制解决方案,与 Corosync + Pacemaker 配合可以实现真正的高可用集群。

核心要点记忆口诀

  • DRBD 复制在块层,文件系统看不出来
  • 主从角色要分清,只有主能挂载读写
  • 三种协议选 C,数据安全最重要
  • 脑裂预防用 Fencing,仲裁设备来投票
  • DRBD 不是备份,定期备份不能忘

生活类比总结

  • DRBD = 实时复印机
  • Primary = 正在用的打印机
  • Secondary = 备用打印机
  • Protocol C = 收到确认才算完成
  • Split-Brain = 两个人同时修改同一份文件

最后提醒:DRBD 的双主模式需要配合集群文件系统(GFS2/OCFS2),不要在两个独立节点上同时挂载 ext4 文件系统写入数据!

相关推荐
时艰.2 小时前
分布式 ID 服务实战
java·分布式
黄俊懿1 天前
【架构师从入门到进阶】第一章:架构设计基础——第二节:架构设计原则
分布式·后端·中间件·架构
没有bug.的程序员1 天前
分布式配置深潜:Spring Cloud Config 与 Git 集成内核、版本回滚机制与多环境治理实战指南
java·分布式·git·spring cloud·分布式配置·版本回滚
草履虫建模1 天前
Java面试应对思路和题库
java·jvm·spring boot·分布式·spring cloud·面试·mybatis
Re.不晚1 天前
Redis——分布式锁
数据库·redis·分布式
Coder_Boy_1 天前
从单体并发工具类到分布式并发:思想演进与最佳实践(二)
java·spring boot·分布式·微服务·设计模式
weed0001 天前
LLM Xinference 安装使用(支持CPU、Metal、CUDA推理和分布式部署)
分布式
PD我是你的真爱粉1 天前
RabbitMQ架构实战2️⃣:分布式事务下的跨服务数据同步
分布式·架构·rabbitmq
雨言yyds2 天前
Kafka
分布式·kafka