关于LinBit DRBD Protocol C复制模式的功能理解与验证咨询
DRBD Protocol C 工作机制与测试现象解析
对Protocol C核心逻辑的正确理解
你对Protocol C的核心定义理解准确:只有当数据成功写入本地磁盘,且远程节点确认数据已写入其磁盘后,DRBD才会向发起写入的应用返回操作完成信号。但这个逻辑的生效前提是DRBD集群节点间通信正常,当节点通信中断时,DRBD的IO处理行为会切换到异常模式,这就是你测试中出现“主节点仍能写入”的原因。
测试现象的原因分析
双节点DRBD集群中,当从节点被强制断开(如断网、网卡禁用)后,主节点并不会立即阻断写入操作,而是进入异步待同步状态:
- 主节点会正常完成本地磁盘的写入,并向应用返回写入成功(因为本地IO已经完成),但原本需要远程节点返回的写入确认会被挂起。
- 这段时间内的所有写入操作都会被DRBD标记为“待同步”数据,暂存于本地的同步日志或直接写入磁盘。
- 当从节点恢复通信后,DRBD会自动触发增量同步,将中断期间主节点产生的待同步数据完整同步到从节点,最终实现数据一致性。
你提到的“last man standing”机制针对的是3节点及以上的集群场景,用于在仅剩一个节点时允许其继续提供服务,双节点场景下默认不会触发该机制,但也不会直接阻断主节点写入——若未配置集群管理工具(如Pacemaker)的STONITH(Shoot The Other Node In The Head)机制,主节点会保持可写入状态,这是DRBD默认的容错策略。
如何验证Protocol C的正常工作逻辑
要验证Protocol C“本地+远程写入完成才返回成功”的核心特性,需在节点通信正常的场景下测试:
- 在从节点模拟磁盘IO阻塞,例如执行命令:
dd if=/dev/zero of=/dev/drbd0 bs=1M count=1000 conv=fdatasync - 此时在主节点执行写入操作(如
cp命令或文件写入),会发现主节点的写入请求被阻塞,直到从节点的磁盘IO完成并返回写入确认,主节点的写入操作才会完成——这才是Protocol C在正常状态下的典型表现。
总结
- 你对Protocol C的核心工作逻辑理解正确,但未考虑节点通信中断时的异常处理策略。
- 双节点DRBD集群中,从节点强制断开后,主节点默认会继续处理写入并缓存待同步数据,待节点恢复后完成同步,这是DRBD的默认容错行为。
- 若需要实现“节点通信中断时主节点无法写入”,需结合DRBD的资源约束配置或集群管理工具的STONITH机制来实现。
内容的提问来源于stack exchange,提问作者Killa
相关产品推荐
相关产品推荐

