如何通过Control Script或Ignite REST API获取集群运行服务器节点数?
获取Ignite集群运行服务器节点数量的方法
以下是几种无需查看日志即可获取Ignite集群运行服务器节点数的方案,优先覆盖你提到的control script和REST API方式:
1. 使用Control Script获取拓扑节点数
Ignite的control.sh脚本提供了--topology参数,可直接输出集群拓扑快照,从中提取当前运行的服务器节点数量。在K8s环境下的命令示例:
runningServerNodes=$(kubectl --kubeconfig config.conf exec <ignite-node> -n {client_name} -- /opt/ignite/apache-ignite/bin/control.sh --topology | grep "Servers" | cut -d ':' -f2 | sed 's/^ *//g')
该命令会返回拓扑中所有处于运行状态的服务器节点总数(包含基线内和基线外的节点)。如果仅需基线内的运行节点,可结合--baseline命令过滤状态为ONLINE的节点:
onlineBaselineNodes=$(kubectl --kubeconfig config.conf exec <ignite-node> -n {client_name} -- /opt/ignite/apache-ignite/bin/control.sh --baseline | grep -A10 "Baseline nodes" | grep "ONLINE" | wc -l)
2. 使用Ignite REST API获取节点数
Ignite REST API的/ignite?cmd=topology接口可返回集群拓扑的JSON数据,通过解析该数据即可统计服务器节点数量。假设REST服务端口为默认的8080,示例请求及解析命令:
# 发送请求并解析服务器节点数 runningServerNodes=$(curl -s http://<ignite-rest-node-ip>:8080/ignite?cmd=topology | jq '[.topologyNodes[] | select(.isClient == false)] | length')
返回的JSON中,topologyNodes数组包含所有节点信息,通过isClient: false筛选出服务器节点,再统计数量即可。
3. 客户端代码直接获取
如果是Ignite客户端应用,可直接通过Ignite SDK提供的API获取集群拓扑信息,无需依赖外部脚本或REST请求。以Java客户端为例:
Ignite ignite = Ignition.start(); // 获取当前运行的服务器节点数量 int serverNodeCount = ignite.cluster().forServers().nodes().size();
关于你的临时方案
你当前的命令仅获取基线节点总数,但基线节点可能包含已下线的节点,若需要的是当前正在运行的服务器节点数,上述前两种方案会更准确。
内容的提问来源于stack exchange,提问作者curious_soul
相关产品推荐
相关产品推荐

