如何查询容器化部署的Ignite 2.13物理服务器数量?
统计Ignite 2.13中物理服务器数量的可行思路
由于Ignite的sys.Nodes视图默认仅返回容器自身的IP,要统计物理服务器数量,核心是获取每个容器所属的宿主机唯一标识,再基于该标识分组统计,以下是具体可行思路:
自定义注入宿主机IP到节点属性
这是最可靠的方案。在启动容器内的Ignite节点时,通过JVM参数或配置注入宿主机的IP地址:- 启动命令示例:
ignite.sh -Dignite.physical.host=宿主机实际IP - 之后通过SQL查询提取该自定义属性并去重统计:
SELECT COUNT(DISTINCT JSON_VALUE(ATTRS, '$.ignite.physical.host')) AS physical_server_count FROM sys.Nodes;
也可以在Ignite的
NodeConfiguration中配置userAttributes字段,提前写入宿主机IP,效果一致。- 启动命令示例:
利用容器网络模式特性(局限性较强)
- 如果容器采用host网络模式,Ignite节点的
HOST_ADDRESS字段会直接返回宿主机IP,此时直接执行去重统计即可:SELECT COUNT(DISTINCT HOST_ADDRESS) AS physical_server_count FROM sys.Nodes; - 若采用桥接模式,容器IP属于宿主机的桥接子网(如Docker默认的172.17.0.0/16),但不同物理机的桥接子网可能重复,仅通过IP段推断宿主机的可靠性极低,不推荐。
- 如果容器采用host网络模式,Ignite节点的
基于宿主机的其他唯一标识(如主机名)
类似注入IP的思路,启动Ignite时注入宿主机的主机名:-Dignite.physical.hostname=宿主机主机名,再通过SQL按主机名字段去重统计,适合宿主机主机名全局唯一的场景。
内容的提问来源于stack exchange,提问作者Stephen Hilton
相关产品推荐
相关产品推荐

