---
title: "查询节点属性"
date: 2026-03-12
lastmod: 2026-03-12
description: "介绍如何使用 Cat API 查询 Easysearch 集群中节点的自定义属性信息。"
tags: ["Cat API", "节点", "属性", "集群管理"]
summary: "此 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 可选 - 排序列"
---
此 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` | 属性值 | ✓ |
## 请求示例
```bash
# 查询所有节点属性
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 格式
```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` 配置文件中设置:
```yaml
# 设置节点属性
node:
attr:
data: hot
rack: rack1
zone: zone-a
storage_type: ssd
```
或者在启动时通过命令行参数设置:
```bash
bin/easysearch -Enode.attr.data=hot -Enode.attr.rack=rack1
```
## 常见节点属性用途
### 1. 数据分层存储
根据数据热度分配分片:
```yaml
# 热数据节点
node.attr.data: hot
node.attr.storage_type: ssd
# 冷数据节点
node.attr.data: cold
node.attr.storage_type: hdd
```
### 2. 机架感知
避免单点故障,确保副本分布在不同机架:
```yaml
# 机架 A
node.attr.rack: rack1
node.attr.zone: zone-a
# 机架 B
node.attr.rack: rack2
node.attr.zone: zone-b
```
### 3. 分片分配控制
使用节点属性控制分片分配:
```json
{
"settings": {
"index.routing.allocation.require.data": "hot",
"index.routing.allocation.require.zone": "zone-a"
}
}
```
### 4. 硬件特性标记
标记节点的硬件特性:
```yaml
# 高性能节点
node.attr.cpu: high
node.attr.memory: 64gb
node.attr.storage: ssd
# 标准节点
node.attr.cpu: standard
node.attr.memory: 32gb
node.attr.storage: hdd
```
## 分片分配感知配置
配置集群以感知节点属性,实现智能分片分配:
```yaml
# 机架感知
cluster.routing.allocation.awareness.attributes: rack
# 多层感知(机架 + 区域)
cluster.routing.allocation.awareness.attributes: rack,zone
# 强制感知(确保副本分布在不同的属性值上)
cluster.routing.allocation.awareness.force.data.values: hot,warm,cold
```
## 使用场景
1. **容量规划**:查看节点属性,规划资源分配
2. **分片分配**:基于节点属性控制分片分布
3. **故障隔离**:确保副本分布在不同的故障域
4. **数据分层**:实现热数据/温数据/冷数据分离
5. **硬件优化**:根据硬件特性分配不同的负载
## 注意事项
1. 此 API 只支持 GET 方法
2. 每个节点的每个属性会单独显示为一行
3. 节点 ID 默认只显示前 4 个字符,使用 `full_id=true` 显示完整 ID
4. 节点属性需要在配置文件或启动参数中设置
5. 修改节点属性需要重启节点
## 最佳实践
1. **一致性命名**:使用统一的属性命名规范
2. **文档记录**:记录节点属性的含义和用途
3. **合理规划**:根据业务需求合理设计属性
4. **避免频繁变更**:节点属性变更需要重启节点
5. **测试验证**:在生产环境应用前充分测试
## 相关文档
- [查询节点](./get-node.md)
- [获取节点信息](./get-node-info.md)
- [查询分片分配](./get-shard-allocation.md)
- [更新集群设置](./update-cluster-settings.md)