我在故障转移配置中设置了一个 pacemaker/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 检查?当然,我希望此检查在故障转移后对备用节点生效。
答案1
我建议不要直接在主机上监控这一点。在我们的环境中,我们利用 Pacemaker 来自动执行故障转移。Pacemaker 为我们做的一件事是在故障转移时移动 IP 地址。这确保我们的客户端始终指向主服务器,并有助于使故障转移从客户端看起来透明。
对于 Nagios,我们监控每台主机上的大量服务以密切关注事态,但是我们为虚拟/浮动 IP 地址配置了一个额外的“主机”来监控仅在主主机上运行的 DRBD 设备和服务。
答案2
在我的环境中,我们管理在 drbd 设备上运行的多个服务(传统、lxc 容器、docker 容器、数据库等)。我们使用 opensvc 堆栈(https://www.opensvc.com) 是免费开源的,提供自动故障转移功能。下面是一个使用 drbd 的测试服务,以及一个 redis 应用程序(示例中已禁用)
首先在集群层面,我们可以看到svcmon
输出:
- 2 个节点 opensvc 集群(node-1-1 和 node-1-2)
- 服务 servdrbd 在 node-1-1 上处于启动状态(大写绿色 O),在 node-1-2 上处于待机状态(小写绿色 o)
- node-1-1 是此服务的首选主节点(大写字母 O 附近的抑扬符)
在服务层面svcmgr -s servdrbd print status
, 我们可以看到 :
- 在主节点(左侧)上:我们可以看到所有资源都已启动(或待机;这意味着当服务在另一个节点上运行时,它们必须保持启动状态)。关于 drbd 设备,报告为基本的
- 在辅助节点(右侧):我们可以看到只有备用资源处于启动状态,并且 drbd 设备处于次要状态。
为了模拟问题,我断开了辅助节点上的 drbd 设备,并产生了以下内容警告
重要的是看到服务可用性状态仍然向上,但整体服务状态已降为警告,意思是“好的,生产仍然运行良好,但是出了点问题,看看吧”
一旦你意识到所有 opensvc 命令都可以与 json 输出选择器一起使用(nodemgr daemon status --format json
或者svcmgr -s servdrbd print status --format json
),很容易将其插入 NRPE 脚本,然后只需监控服务状态即可。正如您所看到的,主服务器或辅助服务器上的任何问题都会被捕获。
这样nodemgr daemon status
更好,因为它在所有集群节点上都是相同的输出,并且所有 opensvc 服务信息都在单个命令调用中显示。
如果您对此设置的服务配置文件感兴趣,我将其发布在 pastebin 上这里
答案3
你可以使用检查多重将两个 DRBD 检查作为单个 Nagios 检查运行,并将其配置为在以下情况下返回 OK恰好一个子检查均正常。
但是,当你必须决定将检查附加到哪个主机时,事情就变得棘手了。你可以使用 VIP 将其附加到主机,或者将检查附加到两个主机,然后在每个主机上使用 NRPE/ssh 检查另一个主机,等等。