📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

此 API 用于显示集群中所有节点的自定义属性信息。

API #

GET /_cat/nodeattrs

API 的作用 #

返回集群中每个节点的属性信息,包括:

  • 节点信息:节点名称、ID、进程 ID、主机名、IP 地址、端口
  • 节点属性:节点的自定义属性名称和对应的值

节点属性用于在节点上存储自定义的键值对信息,常用于:

  • 标记节点的物理位置(如机房、机架)
  • 标记节点的硬件特性(如 SSD/HDD)
  • 标记节点的业务用途(如热数据/冷数据)
  • 控制分片分配策略

API 的参数 #

此 API 没有路由参数。

查询字符串参数 #

参数类型是否必需默认值描述
formatstring可选text响应格式
可选值:json, yaml, text
full_idboolean可选false是否显示完整的节点 ID
hstring可选默认列指定显示的列,逗号分隔
helpboolean可选false显示帮助信息
localboolean可选false是否从本地节点获取信息
master_timeouttime可选30s等待主节点响应的超时时间
sstring可选-排序列
支持 :asc:desc
vboolean可选false详细模式,显示列头

返回的字段信息 #

列名别名描述默认显示
nodename节点名称
idnodeId节点唯一 ID
pidp进程 ID
hosth主机名
ipiIP 地址
portpo传输端口
attrattr.name属性名称
valueattr.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

使用场景 #

  1. 容量规划:查看节点属性,规划资源分配
  2. 分片分配:基于节点属性控制分片分布
  3. 故障隔离:确保副本分布在不同的故障域
  4. 数据分层:实现热数据/温数据/冷数据分离
  5. 硬件优化:根据硬件特性分配不同的负载

注意事项 #

  1. 此 API 只支持 GET 方法
  2. 每个节点的每个属性会单独显示为一行
  3. 节点 ID 默认只显示前 4 个字符,使用 full_id=true 显示完整 ID
  4. 节点属性需要在配置文件或启动参数中设置
  5. 修改节点属性需要重启节点

最佳实践 #

  1. 一致性命名:使用统一的属性命名规范
  2. 文档记录:记录节点属性的含义和用途
  3. 合理规划:根据业务需求合理设计属性
  4. 避免频繁变更:节点属性变更需要重启节点
  5. 测试验证:在生产环境应用前充分测试

相关文档 #