CMAN:使用 SBD(基于存储的死亡)和看门狗作为 STONITH

CMAN:使用 SBD(基于存储的死亡)和看门狗作为 STONITH

我正在基于 CMAN + Pacemaker 集群堆栈构建一个 2 节点集群,但我没有硬件 STONITH 设备。但是两个节点都通过 iSCSI 连接到共享存储,我想使用它来与 SBD 进行隔离。

openAIS 和 Heartbeat 开箱即用地支持 SBD,我已经将 SBD 与 Heartbeat + Pacemaker 集群堆栈一起使用,但现在我需要让它与 CMAN 一起工作。因此,我在 CMAN 的 init 脚本中添加了一些代码来启动/停止 SBD,它似乎工作正常。

关于看门狗:强烈建议使用看门狗运行 SBD。SBD 是此类集群中的关键服务,必须在集群软件启动时一直运行。看门狗有助于确保 - 如果由于某种原因 SBD 进程意外终止,看门狗将不再被喂食,并重新启动节点。因此,我让看门狗内核模块softdog在启动 SBD 之前加载(例如在 Heartbeat 中)。

简而言之,我在 /etc/init.d/cman 中执行以下操作:

  1. 加载内核模块 -modprobe softdog
  2. 启动 SBD-sbd -d <device> -D -W watch

问题是:
当我手动启动 cman 时

service cman start

一切正常,但是当 cman 在启动期间自动启动时,节点会重新启动。

看起来好像看门狗没有被启动,因为节点<watchdog timeout>在它(看门狗)被 SBD 初始化(14:21:29)几秒后(5 秒)就被隔离了,但是日志(/var/log/syslog)是有争议的,说 SBD 正在运行:

1 月 15 日 14:21:28 cs-node1 内核:[12.341755] softdog:软件看门狗计时器:0.08 已初始化。soft_noboot=0 soft_margin=60 秒 soft_panic=0(nowayout=0)
...
1 月 15 日 14:21:29 cs-node1 sbd:[1200]:通知:使用看门狗设备:/dev/watchdog
1 月 15 日 14:21:29 cs-node1 sbd:[1200]:信息:将看门狗超时设置为 5 秒。
...
1 月 15 日 14:21:30 cs-node1 sbd:[1202]:信息:延迟:磁盘 /dev/iscsi/disk2/part1 上的
1 月 15 日 14:21:34 sbd:最后一条消息重复了 3 次
...
1 月 15 日 14:21:34 cs-node1 sbd:[1202]:信息:延迟:磁盘 /dev/iscsi/disk2/part1 上的 1

有什么想法吗?谢谢!

附言:任何声誉超过 300 分的人,请考虑创建以下标签:sbd 或 storage-based-death、stonith 和 cman。

编辑1:

现在我已经创建了一个单独的 init 脚本来管理 SBD,该脚本在 CMAN 之前启动,但一切保持不变 - 它仅在登录后手动启动时才有效。启动过程有什么特别之处我不知道吗?

编辑2:

最近我注意到日志中实际上可能没有这样的消息:

1 月 15 日 14:21:30 cs-node1 sbd:[1202]:信息:延迟:磁盘 /dev/iscsi/disk2/part1 上的
1 月 15 日 14:21:34 sbd:最后一条消息重复了 3 次
...
1 月 15 日 14:21:34 cs-node1 sbd:[1202]:信息:延迟:磁盘 /dev/iscsi/disk2/part1 上的 1

并且节点可能不会在初始化看门狗后 5 秒内重新启动,而更经常在 12 秒后重新启动,但每次都与登录提示符出现的时间完全相同。即使 syslog 中没有消息,SBD 仍在运行(我添加了一个与 SBD 一起启动并监视其进程的后台进程)。

相关内容