集群与节点

集群与节点配置 #

本页介绍 easysearch.yml 中与集群身份和节点角色相关的配置项。这些都是静态设置,修改后需要重启节点生效。


集群名称 #

cluster.name: easysearch
项目说明
参数cluster.name
默认值easysearch
属性静态
说明集群的唯一名称。所有节点必须配置相同的集群名称才能组成一个集群。不同环境(开发、测试、生产)应使用不同的集群名称以防止节点误加入

注意事项

  • 集群名称不能包含冒号(:,建议仅使用小写字母、数字和连字符。
  • 集群名称一旦投入使用后不建议更改,因为它会影响数据目录结构。
  • 同一网络中如果有多个集群,务必确保集群名称各不相同。

示例

# 开发环境
cluster.name: dev-cluster

# 生产环境
cluster.name: prod-search

节点名称 #

node.name: node-1
项目说明
参数node.name
默认值主机名(hostname)
属性静态
说明节点在集群中的唯一标识符。如果未显式设置,默认使用机器主机名。用于日志输出、集群状态显示、API 返回信息中。建议使用有意义的名称便于运维定位

命名建议

  • 采用统一的命名规则,例如 <角色>-<编号><机房>-<角色>-<编号>
  • 名称在集群中必须唯一

示例

# 按角色命名
node.name: master-1
node.name: data-hot-1
node.name: data-warm-2

# 按机房命名
node.name: bj-data-01
node.name: sh-master-02

# 使用环境变量
node.name: ${HOSTNAME}

节点角色 #

node.roles: [master, data, ingest, remote_cluster_client]
项目说明
参数node.roles
默认值[master, data, ingest, remote_cluster_client]
属性静态
说明决定节点在集群中承担的功能。默认情况下节点拥有所有角色

可选角色 #

角色缩写功能适用场景
masterm参与主节点选举,管理集群状态(索引创建/删除、分片分配等)每个集群建议 3 个专用 master 节点
datad存储索引数据,执行 CRUD、搜索和聚合操作主要计算与存储工作负载
ingesti执行 ingest pipeline(文档预处理)有复杂预处理需求时可独立部署
remote_cluster_clientr充当跨集群搜索/复制的客户端需要跨集群查询时启用
searchs执行搜索操作专用搜索节点场景

缩写字母会在 GET _cat/nodes 输出的 node.role 列中显示。

旧版配置兼容 #

以下旧版布尔配置已废弃,建议迁移到 node.roles

旧配置等价 node.roles 写法
node.master: truenode.roles 中包含 master
node.data: truenode.roles 中包含 data
node.ingest: truenode.roles 中包含 ingest
node.master: false + node.data: falsenode.roles: [](协调节点)

架构建议 #

小规模集群(3 节点)— 所有节点同时承担所有角色:

# 所有节点使用相同配置
node.roles: [master, data, ingest]

中大规模集群(10+ 节点)— 角色分离:

# 专用 Master 节点(3 个,不存储数据,资源占用低)
node.roles: [master]

# 专用 Data 节点(可水平扩展)
node.roles: [data, ingest]

# 专用协调节点(无数据、无 master 资格,仅做请求路由和结果聚合)
node.roles: []

冷热分层集群 — 搭配 node.attr.temp 使用:

# 热节点(SSD,接收实时写入)
node.roles: [data]
node.attr.temp: hot

# 温节点(大容量 HDD,存储历史数据)
node.roles: [data]
node.attr.temp: warm

# 冷节点(归档)
node.roles: [data]
node.attr.temp: cold

自定义节点属性 #

node.attr.zone: cn-hangzhou-a
node.attr.rack: rack-01
node.attr.temp: hot
项目说明
参数node.attr.<key>
默认值
属性静态
说明自定义的键值对属性,附加到节点上。可用于分片分配感知(Shard Allocation Awareness)和分片分配过滤

常用场景 #

可用区感知 #

确保主分片和副本分布在不同的可用区,提高容灾能力:

# 节点配置(easysearch.yml)
node.attr.zone: cn-hangzhou-a

搭配集群设置 API 启用分配感知:

PUT /_cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.awareness.attributes": "zone"
  }
}

机架感知 #

node.attr.rack: rack-01

冷热分层 #

# 热节点
node.attr.temp: hot

# 温节点
node.attr.temp: warm

搭配索引生命周期管理或手动分配:

PUT /old-logs-*/_settings
{
  "index.routing.allocation.require.temp": "warm"
}

查看节点属性 #

GET _cat/nodeattrs?v

系统启动配置 #

bootstrap.system_call_filter #

bootstrap.system_call_filter: false
项目说明
参数bootstrap.system_call_filter
默认值true
属性静态
说明是否启用 Linux 系统调用过滤(seccomp)。设为 false 时禁用系统调用过滤。在某些运行环境(如 Docker、虚拟机、某些云平台)中可能需要禁用以避免启动失败

禁用场景

  • 在不支持 seccomp 的容器环境中运行
  • 某些云计算平台有限制
  • 开发和测试环境

生产环境建议保持启用(true)以增强安全性。


完整配置示例 #

三节点通用集群 #

# ---- node-1 ----
cluster.name: prod-cluster
node.name: node-1
node.roles: [master, data, ingest]
node.attr.zone: zone-a

# ---- node-2 ----
cluster.name: prod-cluster
node.name: node-2
node.roles: [master, data, ingest]
node.attr.zone: zone-b

# ---- node-3 ----
cluster.name: prod-cluster
node.name: node-3
node.roles: [master, data, ingest]
node.attr.zone: zone-a

角色分离集群 #

# ---- master-1 ----
cluster.name: prod-cluster
node.name: master-1
node.roles: [master]

# ---- data-hot-1 ----
cluster.name: prod-cluster
node.name: data-hot-1
node.roles: [data, ingest]
node.attr.temp: hot

# ---- data-warm-1 ----
cluster.name: prod-cluster
node.name: data-warm-1
node.roles: [data]
node.attr.temp: warm

延伸阅读 #