You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DRBD双节点脑裂无数据丢失恢复:如何查找最后更新节点?

查找DRBD脑裂场景下最后更新节点的方法

针对你的DRBD主备架构(8.9.10-2版本)搭配Pacemaker、Corosync和PostgreSQL的场景,要在脑裂后确定哪个节点是最后更新的,下面是几个可靠的方法和命令:

1. 利用DRBD元数据查看最后更新时间

DRBD的元数据里直接记录了每个节点的最后写入时间,这是判断的核心依据:

  • 在两个节点上分别执行命令(替换<你的DRBD资源名>为实际资源名):
    drbdadm dump-md <你的DRBD资源名>
    
  • 输出结果中找到类似last update: <时间戳>的字段,对比两个节点的这个时间,时间更晚的节点就是最后写入数据的那个。
  • 想快速过滤结果的话,可以搭配grep:
    drbdadm dump-md <你的DRBD资源名> | grep "last update"
    

重要提醒:一定要确保两个节点的系统时间是同步的(比如配置NTP服务),否则时间戳对比会完全失去参考价值。

2. 通过PostgreSQL日志和工具辅助验证

因为DRBD挂载的是PostgreSQL数据目录,数据库层面的记录也能作为有力佐证:

  • 查看PostgreSQL日志文件(通常在/var/log/postgresql/目录下),找到最后一条写入、提交相关的日志记录,对比两个节点的日志时间。
  • 执行pg_controldata命令(需要切换到PostgreSQL用户或用sudo),查看Latest checkpoint time或Time of latest WAL segment字段,时间较晚的节点即为最后更新的节点:
    sudo -u postgres pg_controldata /var/lib/postgresql/<你的PG版本>/main/
    

3. 检查Pacemaker集群日志辅助回溯

虽然脑裂时集群可能出现双主状态,但Pacemaker的日志能帮你回溯最后一次正常切换的状态:

  • 查看Pacemaker日志里的资源提升记录:
    grep "Promoted" /var/log/pacemaker/pacemaker.log
    
  • 找到最后一条资源被提升为主节点的记录,结合时间做初步判断,但这个只能作为辅助——毕竟脑裂后节点可能自行切换为主,日志记录可能不全。

结合你当前配置的后续建议

你当前的after-sb-2pri disconnect配置会让两个节点在脑裂后断开连接,确定最后更新节点后,你可以按以下步骤恢复(无数据丢失):

  1. 在确认的最后更新节点上执行,将其设为主:
    drbdadm primary <你的DRBD资源名>
    
  2. 在另一个节点上执行,将其设为从并同步数据:
    drbdadm secondary <你的DRBD资源名>
    drbdadm connect --discard-my-data <你的DRBD资源名>
    
  3. 待DRBD同步完成后,再恢复Pacemaker的集群管理。

内容的提问来源于stack exchange,提问作者Mr. Tux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:17:41