我在故障转移配置中设置了一个起搏器/corosync ha-cluster,具有两个节点:生产节点和备用节点。有三个 DRBD 分区。到目前为止一切正常。
我在两个节点上都使用 Nagios NRPE 来监控使用 icinga2 作为报告和可视化工具的服务器。现在,由于备用节点上的 DRBD 分区在出现故障转移开关之前不会挂载,因此我总是会收到以下严重警告:
因此,这是一个错误警报。我已经偶然发现了 DISABLE_SVC_CHECK 并尝试实现它,这是一个示例:
echo "[`date +%s`] DISABLE_SVC_CHECK;$host_name;$service_name" >> "/var/run/icinga2/cmd/icinga2.cmd"
是否有一种简单的方法/最佳实践可以在 Nagios 或 Icinga2 的备用节点上禁用对 DRBD 的检查?当然,我希望此检查在故障转移后对备用服务器生效。
我建议不要直接在主机上监控它。在我们的环境中,我们使用 Pacemaker 来自动化故障转移。Pacemaker 为我们做的一件事是在故障转移时移动 IP 地址。这可确保我们的客户端始终指向主节点,并有助于使故障转移在客户端看起来是透明的。
对于 Nagios,我们监控每台主机上的一系列服务以密切关注,但随后我们为虚拟/浮动 IP 地址配置了一个额外的“主机”,以监控仅在主服务器上运行的 DRBD 设备和服务。
在我的环境中,我们管理在 drbd 设备(传统、lxc 容器、docker 容器、数据库等)之上运行的多个服务。我们使用免费和开源的 opensvc 堆栈 ( https://www.opensvc.com ),并提供自动故障转移功能。下面是一个带有 drbd 的测试服务和一个 redis 应用程序(在示例中禁用)
首先在集群级别,我们可以在
svcmon
输出中看到:在服务层面
svcmgr -s servdrbd print status
,我们可以看到:为了模拟问题,我断开了辅助节点上的 drbd 设备,并产生以下警告
重要的是看到服务可用性状态仍然是up,但是整体服务状态降级为warn,意思是“ok,生产仍然运行良好,但是出了点问题,看看”
只要您知道所有 opensvc 命令都可以与 json 输出选择器 (
nodemgr daemon status --format json
或svcmgr -s servdrbd print status --format json
) 一起使用,就很容易将其插入 NRPE 脚本,并仅监视服务状态。正如您所看到的,主要或次要的任何问题都被困住了。更好,
nodemgr daemon status
因为它在所有集群节点上都是相同的输出,并且所有 opensvc 服务信息都显示在单个命令调用中。如果您对此设置的服务配置文件感兴趣,我将其发布在 pastebin此处
您可以使用check_multi将两个 DRBD 检查作为单个 Nagios 检查运行,并将其配置为在其中一个子检查正确时返回 OK。
但是,当您还必须决定要附加支票的主机时,这会变得很棘手。您可以使用 VIP 将其附加到主机,或将检查附加到两个主机,并在每个主机上使用 NRPE/ssh 来检查另一个,等等。