此 API 用于显示集群中所有节点的自定义属性信息。
API #
GET /_cat/nodeattrs
API 的作用 #
返回集群中每个节点的属性信息,包括:
- 节点信息:节点名称、ID、进程 ID、主机名、IP 地址、端口
- 节点属性:节点的自定义属性名称和对应的值
节点属性用于在节点上存储自定义的键值对信息,常用于:
- 标记节点的物理位置(如机房、机架)
- 标记节点的硬件特性(如 SSD/HDD)
- 标记节点的业务用途(如热数据/冷数据)
- 控制分片分配策略
API 的参数 #
此 API 没有路由参数。
查询字符串参数 #
| 参数 | 类型 | 是否必需 | 默认值 | 描述 |
|---|---|---|---|---|
format | string | 可选 | text | 响应格式 可选值: json, yaml, text |
full_id | boolean | 可选 | false | 是否显示完整的节点 ID |
h | string | 可选 | 默认列 | 指定显示的列,逗号分隔 |
help | boolean | 可选 | false | 显示帮助信息 |
local | boolean | 可选 | false | 是否从本地节点获取信息 |
master_timeout | time | 可选 | 30s | 等待主节点响应的超时时间 |
s | string | 可选 | - | 排序列 支持 :asc 和 :desc |
v | boolean | 可选 | false | 详细模式,显示列头 |
返回的字段信息 #
| 列名 | 别名 | 描述 | 默认显示 |
|---|---|---|---|
node | name | 节点名称 | ✓ |
id | nodeId | 节点唯一 ID | ✗ |
pid | p | 进程 ID | ✗ |
host | h | 主机名 | ✗ |
ip | i | IP 地址 | ✗ |
port | po | 传输端口 | ✗ |
attr | attr.name | 属性名称 | ✓ |
value | attr.value | 属性值 | ✓ |
请求示例 #
# 查询所有节点属性
GET /_cat/nodeattrs
# 显示列头
GET /_cat/nodeattrs?v
# 使用 JSON 格式
GET /_cat/nodeattrs?format=json
# 只显示特定列
GET /_cat/nodeattrs?h=node,attr,value
# 显示完整节点 ID
GET /_cat/nodeattrs?full_id=true
# 按属性名称排序
GET /_cat/nodeattrs?s=attr:asc
# 显示帮助信息
GET /_cat/nodeattrs?help
响应示例 #
文本格式(默认) #
node attr value
data-node-1 data hot
data-node-1 rack rack1
data-node-1 zone zone-a
data-node-2 data cold
data-node-2 rack rack2
data-node-2 zone zone-b
data-node-3 data warm
data-node-3 rack rack3
data-node-3 zone zone-a
文本格式(带列头) #
node id pid host ip port attr value
data-node-1 4b2c 1234 192.168.1.100 10.0.0.1 9300 data hot
data-node-1 4b2c 1234 192.168.1.100 10.0.0.1 9300 rack rack1
data-node-1 4b2c 1234 192.168.1.100 10.0.0.1 9300 zone zone-a
data-node-2 8f3a 5678 192.168.1.101 10.0.0.2 9300 data cold
data-node-2 8f3a 5678 192.168.1.101 10.0.0.2 9300 rack rack2
JSON 格式 #
[
{
"node": "data-node-1",
"attr": "data",
"value": "hot"
},
{
"node": "data-node-1",
"attr": "rack",
"value": "rack1"
},
{
"node": "data-node-1",
"attr": "zone",
"value": "zone-a"
}
]
设置节点属性 #
节点属性可以在 easysearch.yml 配置文件中设置:
# 设置节点属性
node:
attr:
data: hot
rack: rack1
zone: zone-a
storage_type: ssd
或者在启动时通过命令行参数设置:
bin/easysearch -Enode.attr.data=hot -Enode.attr.rack=rack1
常见节点属性用途 #
1. 数据分层存储 #
根据数据热度分配分片:
# 热数据节点
node.attr.data: hot
node.attr.storage_type: ssd
# 冷数据节点
node.attr.data: cold
node.attr.storage_type: hdd
2. 机架感知 #
避免单点故障,确保副本分布在不同机架:
# 机架 A
node.attr.rack: rack1
node.attr.zone: zone-a
# 机架 B
node.attr.rack: rack2
node.attr.zone: zone-b
3. 分片分配控制 #
使用节点属性控制分片分配:
{
"settings": {
"index.routing.allocation.require.data": "hot",
"index.routing.allocation.require.zone": "zone-a"
}
}
4. 硬件特性标记 #
标记节点的硬件特性:
# 高性能节点
node.attr.cpu: high
node.attr.memory: 64gb
node.attr.storage: ssd
# 标准节点
node.attr.cpu: standard
node.attr.memory: 32gb
node.attr.storage: hdd
分片分配感知配置 #
配置集群以感知节点属性,实现智能分片分配:
# 机架感知
cluster.routing.allocation.awareness.attributes: rack
# 多层感知(机架 + 区域)
cluster.routing.allocation.awareness.attributes: rack,zone
# 强制感知(确保副本分布在不同的属性值上)
cluster.routing.allocation.awareness.force.data.values: hot,warm,cold
使用场景 #
- 容量规划:查看节点属性,规划资源分配
- 分片分配:基于节点属性控制分片分布
- 故障隔离:确保副本分布在不同的故障域
- 数据分层:实现热数据/温数据/冷数据分离
- 硬件优化:根据硬件特性分配不同的负载
注意事项 #
- 此 API 只支持 GET 方法
- 每个节点的每个属性会单独显示为一行
- 节点 ID 默认只显示前 4 个字符,使用
full_id=true显示完整 ID - 节点属性需要在配置文件或启动参数中设置
- 修改节点属性需要重启节点
最佳实践 #
- 一致性命名:使用统一的属性命名规范
- 文档记录:记录节点属性的含义和用途
- 合理规划:根据业务需求合理设计属性
- 避免频繁变更:节点属性变更需要重启节点
- 测试验证:在生产环境应用前充分测试





