我一直在使用 DataStax OpsCenter (Enterprise) 5.0.0 REST API 和 DSE 4.5.1(Cassandra 2.0.9)来查询 /$cluster_name/nodes 端点,并查看 last_seen 字段中自看到每个给定节点以来的秒数,以查看我是否可以通过 DataStax OpsCenter 的 API 检测到关闭的节点。
对于启动的节点,last_seen 为 0。关闭 Cassandra 进程时,last_seen 开始递增,进程重新启动时重置为 0。
但是,我注意到,如果 DataStax OpsCenter 在节点关闭时关闭,则在其重新启动后 last_seen 仍为 0,这意味着您无法判断节点是否已启动或是否已关闭并且从未见过。
如果 DataStax OpsCenter Agent 发生故障,也会出现同样的问题。如果 Cassandra 进程随后发生故障,last_seen 也保持为 0。
我已经在较旧的 3.2.2 OpsCenter(社区)上与 DSC Cassandra 2.0.1 进行了测试,即使 DataStax OpsCenter 代理先关闭,它似乎仍然能够检测到 Cassandra 进程已关闭并且开始增加 last_seen。
现在,为了稳健性,我实际上使用了 nodetool 的 Cassandra 节点可用性视图,但 DataStax OpsCenter 方法在区分正常运行和宕机的节点/进程方面肯定应该更加稳健?
这是 DataStax OpsCenter 中的一个错误吗?
是否有其他方法可以通过 DataStax OpsCenter REST API 确定节点是否启动/关闭?
ps. 我写了很多 Cassandra 和 DataStax OpsCenter Nagios 插件,所以我遇到了这个,可以在我的 github 上找到它们https://github.com/harisekhon/nagios-plugins。
答案1
从纯粹的经验观察来看,如果节点不可用,API“.../nodes/<node_ip>/mode”将返回 null,否则将返回字符串“normal”(或可能是其他合适的字符串)。将所有节点状态一起解释为“nodes/all/mode”中的 JSON。
请注意,我发现“模式” API 更改和 OpsCenter 显示节点状态更改之间存在一些滞后(几秒钟),但这可能只是我的环境;YMMV。