Debian 13 Trixie 上的 DRBD
Debian 13 Trixie 上的 DRBD
一、 基本原理:DRBD 架构与机制
本节确立 DRBD (Distributed Replicated Block Device) 的基本技术原则,定义其架构组件、核心模型和关键操作模式。
1.1 核心定义:“网络 RAID-1” 模型
DRBD 是一个为 Linux 平台设计的开源、分布式复制存储系统 1。它本质上是一种块设备,通过 IP 网络将其数据实时镜像到一个对等节点 1。对 DRBD 最常见的类比是“网络 RAID 1” 2。
DRBD 的架构实现是其关键特性和主要优势所在。它被实现为一个 Linux 内核模块 1,位于 Linux I/O 调度器和文件系统之间 2。这种在内核块层运行的设计带来了两个主要后果:
性能: 它实现了高效、低开销的数据路径 1,这对于I/O性能至关重要。
透明性: 复制过程对上层应用(如数据库、虚拟机或文件系统)完全透明 1。应用只是向一个虚拟块设备(例如 /dev/drbd0)写入数据,而感知不到该写操作正被实时镜像到另一台机器。
1.2 企业用例:高可用性 (HA) 与软件定义存储 (SDS)
DRBD 的传统和主要用例是构建高可用性 (HA) 计算机集群 1。它为“无共享” (Shared-Nothing) 架构 1 中的主动/被动集群提供存储层 8。
DRBD 经常用于为高可用数据库、消息队列和虚拟机 (VM) 镜像托管提供后端支持 1。LINBIT 的文档特别指出,DRBD 能够很好地支持“频繁的小型写操作” 1。这一性能特征直接解释了它为何适用于高性能事务性工作负载(如数据库的预写日志或消息队列的日志),使其区别于那些为大型流式 I/O 优化的解决方案。
从 DRBD 9 开始,其用例已从传统的两节点 HA 扩展。它现在支持多节点复制,用于“创建更大的软件定义存储 (SDS) 池” 1,通常通过 LINSTOR 这样的存储管理软件进行自动化管理 6,以集成到 Kubernetes 或 OpenStack 等云平台中 5。
1.3 逻辑组件:内核模块、用户态工具与系统集成
DRBD 系统由三个主要部分组成:内核模块、用户态管理应用程序和集成脚本/单元 1。
drbd-utils 软件包提供的用户态工具本身是分层的:
drbdadm: 高级封装工具,供用户和管理员使用。它读取配置文件并调用底层命令 10。
drbdsetup: 直接与内核模块交互的底层工具。drbdadm 会将其高级命令转换为一个或多个 drbdsetup 调用 10。
drbdmeta: 用于创建和管理 DRBD 磁盘上元数据的底层工具 10。
这种命令层级结构对于故障排查至关重要。手册页明确指出,用户通常应该只与 drbdadm 交互 13。对于需要调试配置或内核交互问题的管理员而言,drbdadm --dry-run 选项 11 是一个关键工具,它能准确显示 drbdadm 如何将一个高级命令(如 up r0)转换为底层的 drbdsetup 和 drbdmeta 调用。
1.4 配置术语:资源 (Resource)、卷 (Volume) 与连接 (Connection)
DRBD 9 的配置基于三个核心概念 10:
资源 (Resource): 顶层实体,代表一个“复制组” 14。在配置文件中定义为 resource r0 {... }。
卷 (Volume): 资源中包含的一个或多个独立的复制块设备(例如 /dev/drbd0)9。
连接 (Connection): 资源内部定义的、用于在两个主机(节点)之间通信的网络链路 10。
DRBD 9 中的“卷”概念是一项重要增强。它允许在单个资源中管理多个相关的块设备,并确保跨这些设备的“写保真度” (write fidelity) 14。一个典型的企业用例是数据库:数据文件和事务日志可能位于不同的块设备上。通过将它们配置为同一资源下的 volume 0 和 volume 1,DRBD 保证了复制流的写序一致性,这对于灾难恢复至关重要 10。
1.5 复制协议分析 (A, B, C)
DRBD 支持三种复制协议,它们定义了系统何时向应用程序确认“写入完成” 4。
协议 A (异步): 本地写入完成且数据进入本地节点的网络发送队列后,立即向应用程序确认写入。不等待远程节点的任何确认 4。
协议 B (半同步): 本地写入完成且远程节点确认“已收到数据”(即数据已进入远程节点的内存)后,向应用程序确认写入。不等待数据写入远程磁盘 16。
协议 C (同步): 必须等待本地磁盘写入完成和远程磁盘写入完成两者均完成后,才向应用程序确认写入 1。
协议的选择是写入延迟(性能)和恢复点目标 (RPO)(数据丢失风险)之间必须做出的直接权衡。
协议 C 1 是唯一能保证 RPO 为零的协议,是所有要求强一致性、零数据丢失的 HA 集群的标准选择。但它的延迟最高,因为每次应用写入都必须等待一个完整的网络往返和一次远程磁盘写入。
协议 A 4 提供最低的延迟(接近本地磁盘),但数据丢失风险最高。它主要用于长距离复制的灾难恢复 (DR) 场景,此时高延迟使得协议 C 不可行 4。
协议 B 16 是一个中间选项,可防止主节点完全故障,但不能防止两个节点同时断电。
表 1: DRBD 复制协议比较
二、 Debian 13 "Trixie" 生态系统中的 DRBD 组件
本节详述 DRBD 在 Debian 13 稳定版环境中的具体软件包、版本和系统级集成点。
2.1 Debian 13 平台状态
Debian 13 (代号 "Trixie") 是当前的稳定版本,于 2025 年 8 月 9 日正式发布 18。它提供预计 5 年的支持周期 18,使其成为部署企业级 HA 负载的合适平台。
2.2 DRBD 组件可用性:主线内核模块与 drbd-utils
DRBD 内核模块已包含在默认的 Debian 内核中(“shipped with Debian kernels”)3。这免去了用户单独安装或编译内核模块包的需求。
运行 DRBD 所需的用户态工具由 drbd-utils 软件包提供 3。在 Debian 13 "Trixie" 的稳定版软件仓库中,drbd-utils 的确切版本为 9.22.0-1.1 20。
9.22.0-1.1 是一个 DRBD 9 版本,这意味着所有现代 DRBD 9 的特性(如多节点支持、卷、Quorum 机制)都是 Debian 13 上的标准支持功能。所有 DRBD 8.x 的文档和配置语法均已过时。
Debian 平台的一个关键稳定性特性是内核模块版本与 drbd-utils 软件包版本之间经过测试的紧密耦合。drbdadm 工具会检查加载的内核模块版本,并据此使用 DRBD 8 或 DRBD 9 的解析器 23。内核更新 24 或工具版本不匹配 23 都可能导致解析错误或服务启动失败。Debian 通过将模块内置于内核 3 并提供一个专门针对该内核编译和测试的 drbd-utils 包 20 来解决此问题。管理员应避免从上游或其他来源手动安装二进制文件,以免破坏这种经过测试的依赖关系。
2.3 权威文件系统布局与配置
Debian 13 上的 DRBD 9 配置遵循模块化、“基于 include”的布局 4。
主配置文件 /etc/drbd.conf 通常只是一个框架,内容如下:
include "/etc/drbd.d/global_common.conf";
include "/etc/drbd.d/*.res";
4
/etc/drbd.d/global_common.conf: 此文件用于存放 global {... } 和 common {... } 配置块,用于定义全局参数和所有资源的默认值 4。
/etc/drbd.d/*.res: 此目录用于存放资源定义文件。最佳实践(“preferred” 4 和 “useful” 10)是为每个资源(如 r0)创建一个单独的 .res 文件(例如 /etc/drbd.d/r0.res)。
这种模块化布局是企业可管理性的最佳实践,而不仅仅是建议。单一的“扁平化配置文件...很快会变得混乱且难以管理” 4。DRBD 的配置“被设计为每个集群节点都可以包含整个集群配置的相同副本” 10,模块化的 *.res 文件结构极大地简化了配置同步(例如使用 csync2 10),确保了集群的健康运行。
2.4 Systemd 集成框架
Debian 13 中的 drbd-utils 软件包提供了一套用于资源管理的 systemd 单元 26。
drbd.service 单元是一个“用于旧式 init 脚本的包装器”,它试图管理“所有”资源。Debian 的 manpage 26 明确建议:“您通常应该禁用此单元 (You should usually disable this unit)。”
drbd.service 是一个为不熟悉 systemd 的管理员准备的“陷阱”。它无法参数化,也“没有有用的方法来等待”资源就绪 26。更重要的是,它会与 Pacemaker 26 或 DRBD Reactor 26 等现代 HA 管理器产生冲突。
在 Debian 13 上,正确的、systemd 原生的资源管理方式是使用模板单元(templated units):
drbd@.target: 用于启动/停止特定资源的模板目标(例如 drbd@r0.target)26。
drbd-wait-promotable@.service: 等待资源连接到对等方并获得 UpToDate 数据访问权限后,才允许提升 (promote) 的模板服务 28。
drbd-promote@.service: 执行将资源实际提升为 Primary 角色的模板服务 29。
表 2: Debian 13 中的 DRBD Systemd 单元
三、 参考实现:在 Debian 13 上部署两节点集群
本节提供了一个完整的、可验证的步骤,用于部署一个功能性的两节点 DRBD 集群。所提供的命令是完整的,可直接执行。
3.1 部署前规划与系统先决条件
节点: 两台运行 Debian 13 "Trixie" 18 的服务器,主机名分别为 node1 和 node2。
网络: 建议使用专用的低延迟网络用于 DRBD 复制(“best practice”)30。示例 IP:node1 (192.168.10.11), node2 (192.168.10.12)。
防火墙: 必须配置防火墙,允许 DRBD 复制端口(例如 TCP 7788 及更高端口)上的通信 2。
存储: 两个节点上必须有大小完全一致的后端块设备(例如 /dev/sdb)。这可以是裸磁盘、分区或 LVM 逻辑卷 2。
时间: 节点必须使用 NTP (Network Time Protocol) 保持时间同步 30。
3.2 安装和验证用户态工具
操作: 在 两台节点 上,安装 drbd-utils 软件包。
代码:
Bash
sudo apt update
sudo apt install -y drbd-utils
验证: 确认安装了正确的 DRBD 9.x 版本 20。
Bash
drbdadm --version
3.3 准备后端块设备
操作: 在 两台节点 上,确保所选的后端设备(例如 /dev/sdb)上没有任何旧的元数据或文件系统。此步骤是破坏性的 31。
代码 (以 /dev/sdb 为例):
Bash
# 警告:此命令将销毁 /dev/sdb 上的所有数据。
sudo wipefs -a /dev/sdb
3.4 配置文件实施 (node1 和 node2)
操作: 在 两台节点 上创建以下配置文件。它们的内容必须完全一致。
文件: /etc/drbd.conf 4
Ini, TOML
include "/etc/drbd.d/global_common.conf";
include "/etc/drbd.d/*.res";
文件: /etc/drbd.d/global_common.conf 4
Ini, TOML
global {
usage-count yes;
}
common {
net {
protocol C; # 使用同步复制
}
options {
# 禁止在挂载时自动提升,以便由集群软件控制 [31, 32]
auto-promote no;
}
}
auto-promote no; 选项是部署任何 HA 集群时的关键设置 32。默认情况下,DRBD 9 可以在设备被挂载时自动将资源提升为 Primary 31。在受管集群中,这非常危险,可能导致裂脑。设置 auto-promote no; 可确保只有集群管理器(Pacemaker/Reactor)或显式的 drbdadm 命令才能触发提升,这是更安全、必需的策略 26。
文件: /etc/drbd.d/r0.res 2
Ini, TOML
resource r0 {
volume 0 {
device "/dev/drbd0"; # 虚拟块设备
disk "/dev/sdb"; # 真实的后端设备
meta-disk internal; # 元数据存储在同一设备上
}
on node1 {
node-id 0;
address 192.168.10.11:7788;
}
on node2 {
node-id 1;
address 192.168.10.12:7788;
}
connection {
host "node1" port 7788;
host "node2" port 7788;
net {
protocol C;
}
}
}
3.5 资源初始化与首次同步 (分步)
操作: 在 两台节点 上,初始化 DRBD 元数据 4。
Bash
sudo drbdadm create-md r0
操作: 在 两台节点 上,启动资源。这将加载设备并尝试连接到对等方 4。
Bash
sudo drbdadm up r0
操作: 在 任一节点 上检查状态。此时状态应为 Inconsistent/Inconsistent 4。
Bash
sudo drbdadm status r0
操作: 仅在一个节点 (例如 node1) 上执行,强制将该资源提升为 Primary。这将指定它作为初始同步的源 4。
Bash
sudo drbdadm primary --force r0
--force 标志在此场景中是必需的且安全的 4。当两个节点的数据都是 Inconsistent 时 4,DRBD 会拒绝提升任何一方。--force 选项 4 打破了这种僵局,声明“我知道数据不一致,但此节点是初始同步的权威来源(即使是空的)”,从而触发初始的全量同步 4。在已运行的集群上使用此命令极其危险,但对于首次初始化是必需的。
操作: 监控同步进度。等待其完成。
Bash
sudo drbdsetup status r0 --verbose
# 或重复运行:
# sudo drbdadm status r0
验证: 同步完成后,两端的状态都应显示 disk:UpToDate 17。
3.6 创建文件系统、挂载与服务准备
操作: 在 Primary 节点 (node1) 上,在虚拟 DRBD 设备上创建文件系统 17。
Bash
sudo mkfs.xfs /dev/drbd0
操作: 在 Primary 节点 (node1) 上,挂载新的文件系统 17。
Bash
sudo mkdir -p /data
sudo mount /dev/drbd0 /data
操作: 执行一次简单的写操作。
Bash
sudo touch /data/testfile
ls -l /data
3.7 验证:手动故障切换与数据完整性测试
操作: 此过程通过将 Primary 角色(和挂载点)手动移动到 node2 来验证复制功能是否正常 17。
代码 (在 node1 - Primary):
Bash
sudo umount /data
sudo drbdadm secondary r0
代码 (在 node2 - Secondary):
Bash
sudo drbdadm primary r0
sudo mkdir -p /data
sudo mount /dev/drbd0 /data
验证 (在 node2):
Bash
ls -l /data/testfile
预期结果: 应该能在 node2 上看到在 node1 上创建的 testfile 文件,确认复制和故障切换工作正常 35。
四、 高可用性 (HA) 集成框架
本节分析在生产环境中实现 DRBD 自动故障切换的两种主要方法。
4.1 标准集成:Pacemaker/Corosync 集群堆栈
“经典”的企业 HA 堆栈涉及 DRBD(用于存储)、Corosync(用于消息/成员资格)和 Pacemaker(作为集群资源管理器,CRM)2。
在此模型中,Corosync 提供集群成员资格和法定票数 (Quorum) 8。Pacemaker 是“大脑” 8,负责管理所有资源:它启动/停止 DRBD、挂载/卸载文件系统、启动/停止上层应用(如 NFS、MySQL),并控制虚拟 IP 17。
Pacemaker 将 DRBD 作为一种“可提升的克隆” (Promotable Clone) 资源进行管理,这是集成的基础。SUSE HA 指南 17 中显示了 Pacemaker 的配置命令:它首先使用 ocf:linbit:drbd 资源代理定义一个 primitive 资源,然后创建该原语的 clone,并设置元数据 promotable="true"。一个“克隆”资源是 Pacemaker 知道存在于所有节点上的资源 8。“可提升的克隆”是一种特殊的克隆,它具有两种角色:“Promoted”(对应 DRBD Primary)和“Unpromoted”(对应 DRBD Secondary)。Pacemaker 的核心任务是强制执行 promoted-max="1" 17,确保在任何时候集群中只有一个节点被提升为 Primary,从而在资源管理层防止裂脑。
4.2 轻量级替代方案:DRBD Reactor 与基于 Systemd 的自动化
DRBD Reactor 是由 LINBIT 开发的一个轻量级的、基于事件的管理框架 33。它被设计为在专注于 DRBD 的场景中“替代或补充” Pacemaker 33。它“监控 DRBD 设备的状态” 33 并触发预定义的操作。
Pacemaker 和 Reactor 在 HA 哲学上有所不同。Pacemaker 是一个“集中式”的管理器 8,拥有一个需要同步的集群信息库 (CIB) 42,并主动控制所有事物。
相比之下,DRBD Reactor 采用了一种“委托式”的哲学 33。它“将所有复杂性转移到其他现有组件” 33:
决策制定: 它依赖 DRBD 自身的 Quorum 机制 42。Reactor 的 "Promoter" 插件只是简单地询问 DRBD:“你是否拥有 Quorum 并且可以被提升?” 42。
执行: 它依赖 systemd 42。如果 DRBD 回答“是”,Reactor 的任务就是 systemctl start 一个预定义的 systemd 目标(例如 drbd-services@r0.target)42。所有的服务依赖关系(挂载、启动数据库等)都由 systemd 自身的依赖逻辑处理。
这使得 Reactor 成为一个简单的“单一二进制守护进程” 42,充当 DRBD 事件和 systemd 动作之间的“垫片” (shim) 43,而不是一个功能完备的集群管理器。
五、 核心运维、管理与弹性策略
本节涵盖日常管理命令、性能调优的关键概念以及裂脑 (Split-Brain) 规避。
5.1 核心管理与状态命令
drbdadm 是主要的高级管理命令 11,而 drbdsetup 是用于获取详细状态的低级命令 4。
drbdadm status 提供角色和连接状态的高级视图 4。
drbdsetup status --verbose --statistics 提供详细的内核级性能计数器,如磁盘读写、网络发送/接收的数据以及 I/O 挂起情况 4。
所有配置文件的权威参考是 man drbd.conf-9.0 45。
表 3: 核心 DRBD 管理命令
5.2 性能与再同步参数
disk 配置块中的 al-extents (Activity Log,活动日志) 是一个关键的性能调优参数 13。
活动日志是一个“热”区域,它保存最近写入活动的元数据更新,从而减少元数据写入次数 46。较大的 AL 可以提高写入性能,但在节点恢复时必须完全重新同步,因此“活动日志的大小是决定恢复所需时间的主要因素” 13。这是一个直接的权衡:更快的运行时 I/O 对应更慢的恢复时间。
net 配置块中的 resync-rate 2 和 c-max-rate 等参数控制 DRBD 用于再同步和复制的最大带宽,以防止 DRBD 流量占满网络。
5.3 裂脑规避策略与 Fencing (STONITH)
“裂脑” (Split-Brain) 是一种故障状态,由于网络隔离,两个节点都认为自己是 Primary 角色,并独立接受写入,导致数据分歧和损坏 4。
Fencing (隔离) 是防止这种情况的机制。最常见的形式是 STONITH (“Shoot The Other Node In The Head”) 8。Fencing 是一种“确保节点无法运行服务”的能力 8,通常通过强制关闭电源或重启故障节点来实现。一个安全的 HA 集群必须包含 fencing resource-and-stonith 策略 4。
DRBD 9 提供了另一种或补充的机制:DRBD Quorum (法定票数) 4。
传统的 STONITH 8 部署起来很复杂,它需要带外硬件(如 SBD 设备 41 或 BMC)。LINBIT 的文档 32 称两节点集群(必须依赖 STONITH)是“一个复杂的集群环境”。
相比之下,DRBD 9 的内置 Quorum 机制 4 在软件层面解决了同样的问题。这需要第三个节点,但该节点可以是“无盘” (diskless) 的仲裁节点 4。失去 Quorum(即无法看到多数节点)的节点将自动拒绝提升或自行降级。LINBIT 文档 4 指出:“通过使用 DRBD Quorum,您不必求助于 Fencing 或 STONITH 解决方案。” 现代的 HA NFS 指南 30 将“一个三节点集群......一个用于 DRBD Quorum 目的的无盘节点”列为硬性要求。这是在 Debian 13 上部署新 DRBD 集群的推荐最佳实践。
六、 综合与结论
在 Debian 13 "Trixie" 上部署 DRBD 代表了一种成熟、现代且功能强大的高可用性存储解决方案。该平台受益于 DRBD 9 内核模块被直接包含在主线内核中 3,以及一个支持所有现代 DRBD 9 特性的 drbd-utils 软件包 (版本 9.22.0-1.1) 20。
核心结论总结:
Systemd 集成: 管理是 systemd 原生的。管理员必须弃用旧的 drbd.service 26,并专门使用模板单元(drbd@.target, drbd-wait-promotable@.service)进行安全的资源管理 28。
配置布局: 模块化配置(/etc/drbd.d/)是确保可管理性的强制标准 4。
HA 编排: 存在两条清晰的自动化路径:功能全面的传统 Pacemaker/Corosync 堆栈 8,以及轻量级、与 systemd 集成的 DRBD Reactor 33。
弹性最佳实践: 仅有两节点的集群已不再是推荐模式。DRBD 9 在 Debian 13 上的“最佳实践”是采用三节点集群(或两节点加一个无盘仲裁节点),利用 DRBD 内置的 Quorum 机制。这提供了强大的裂脑保护,且无需部署复杂的传统硬件 Fencing 4。
Works cited
DRBD - LINBIT, accessed November 16, 2025,
DRBD | Administration Guide | SLE HA 12 SP5 - SUSE Documentation, accessed November 16, 2025,
DrBd - Debian Wiki, accessed November 16, 2025,
DRBD 9.0 en - LINBIT, accessed November 16, 2025,
LINBIT | Technology Overview - simplyblock, accessed November 16, 2025,
LINBIT Offers Official DRBD Basics Training, accessed November 16, 2025,
LINBIT Software Download Page For LINSTOR And DRBD Linux Driver, accessed November 16, 2025,
Pacemaker Explained - ClusterLabs, accessed November 16, 2025,
LINSTOR User Guide - LINBIT, accessed November 16, 2025,
drbd.conf-9.0(5) — drbd-utils — Debian testing - Debian Manpages, accessed November 16, 2025,
drbdadm-9.0(8) — drbd-utils — Debian testing - Debian Manpages, accessed November 16, 2025,
drbdadm - Administration tool for DRBD - Ubuntu Manpage, accessed November 16, 2025,
drbdsetup-9.0(8) — drbd-utils — Debian testing, accessed November 16, 2025,
DRBD 8.4 en - LINBIT, accessed November 16, 2025,
drbdsetup - Setup tool for DRBD - Ubuntu Manpage, accessed November 16, 2025,
Drbd-Tutorial Tutorails | PDF | Replication (Computing) | Linux Distribution - Scribd, accessed November 16, 2025,
DRBD | Administration Guide | SLE HA 15 SP7 - SUSE Documentation, accessed November 16, 2025,
Debian -- News -- Debian 13 "trixie" released, accessed November 16, 2025,
Debian -- Details of package drbd-utils in trixie, accessed November 16, 2025,
Debian -- Package Search Results -- drbd-utils, accessed November 16, 2025,
Debian -- Details of source package drbd-utils in trixie, accessed November 16, 2025,
Debian -- Software Packages in "trixie", Subsection admin, accessed November 16, 2025,
Parsing error and DRBD versions - LINBIT Community, accessed November 16, 2025,
Update DRBD kernel module after a node has rebooted into a new kernel - IBM, accessed November 16, 2025,
Differences between drbd utils and kernel module versions (#15867) · Issue - alpine · GitLab, accessed November 16, 2025,
drbd.service(7) — drbd-utils — Debian testing, accessed November 16, 2025,
[DRBD-user] drbd-utils v9.18.0 - Mailing Lists - LINBIT, accessed November 16, 2025,
Automatically Mount a DRBD Device at Boot | Knowledge Base, accessed November 16, 2025,
Linstor HA with Proxmox: systemd "degraded" after reboot of backup ..., accessed November 16, 2025,
Highly Available NFS Exports with DRBD & Pacemaker - LINBIT, accessed November 16, 2025,
Administration Guide | SLE HA 15 SP7 - SUSE Documentation, accessed November 16, 2025,
Managing DRBD By Using systemd Units - LINBIT, accessed November 16, 2025,
DRBD Reactor - LINBIT, accessed November 16, 2025,
drbd.conf-9.0: Drbd configuration files. - Carta.tech, accessed November 16, 2025,
DRBD | Administration Guide | SUSE Linux Enterprise High Availability Extension 12 SP5, accessed November 16, 2025,
drbdadm - Utility for DRBD administration. - Ubuntu Manpage, accessed November 16, 2025,
Highly Available NFS Storage with DRBD and Pacemaker | SLE HA ..., accessed November 16, 2025,
8.4. Initialize DRBD - ClusterLabs, accessed November 16, 2025,
Administration Guide - SUSE Linux Enterprise High Availability 15 SP3, accessed November 16, 2025,
Data Replication Across Geo Clusters via DRBD | SUSE Linux Enterprise High Availability 12 SP1, accessed November 16, 2025,
Highly Available NFS Storage with DRBD and Pacemaker | SLE HA 15 SP7, accessed November 16, 2025,
High Availability with DRBD Reactor & Promoter - LINBIT, accessed November 16, 2025,
DRBD Reactor – Design & Features - LINBIT, accessed November 16, 2025,
Using a Cluster Resource Manager and DRBD to Minimize System Maintenance Downtime, accessed November 16, 2025,
Getting Information About DRBD Options | Knowledge Base - LINBIT, accessed November 16, 2025,
drbdsetup-9.0: Configure the DRBD kernel module | Man Page | System Administration - ManKier, accessed November 16, 2025,
Administration Guide | SLE HA 12 SP5 - SUSE Documentation, accessed November 16, 2025,