【ELasticsearch】节点角色分离最佳实践

本文介绍一个基于严格分层架构的 Elasticsearch 生产集群设计方案,满足 冷冻 四层存储需求,并结合硬件选型与角色配置说明。

1.集群架构设计

数据层节点角色组合核心功能节点数量分片策略
热层data_hot + ingest实时写入、高频检索 ≥ 3 ≥ 3 3副本数 ≥ 1 ≥1 1
温层data_content + data_warm近期访问数据、中等频率查询 ≥ 3 ≥ 3 3副本数 = 1 =1 =1
冷层data_content + data_cold历史数据归档、低频查询 2 − 3 2-3 23副本数 = 1 = 1 =1 (可降为 0 0 0
冷冻层data_content + data_frozen长期存档、几乎不访问 1 − 2 1-2 12副本数 = 0 =0 =0 + + + 对象存储

2.节点角色配置详解

2.1 热层节点(Hot)

# elasticsearch.yml
node.roles: [ data_hot, ingest ]
node.attr.tier: hot
  • 硬件规格
    • CPU16核+(高频处理器,如 Intel Xeon Gold 63xx)
    • 内存64GB+(堆内存分配 ≤ 30GB,剩余给 OS Cache)
    • 磁盘NVMe SSD × 2(RAID 0),单盘 1 - 2 TB。NVMe 提供百万级 IOPS,应对高并发写入/实时查询。
  • 磁盘策略:单节点多磁盘条带化(提升 IO 吞吐)。

2.2 温层节点(Warm)

# elasticsearch.yml
node.roles: [ data_content, data_warm ]  # 关键:data_content持久化数据
node.attr.tier: warm
  • 硬件规格
    • CPU8核(中端处理器)
    • 内存32GB(堆内存 ≤ 16GB)
    • 磁盘SAS SSD × 4(RAID 10),单盘 2 - 4 TB。SAS SSD 成本低于 NVMe,但仍有数千 IOPS,适合中等查询负载。
  • 优化:关闭 index.refresh_interval(降低刷新频率)。

2.3 冷层节点(Cold)

# elasticsearch.yml
node.roles: [ data_content, data_cold ]
node.attr.tier: cold
  • 硬件规格
    • CPU4核(低功耗处理器)
    • 内存16GB(堆内存≤8GB)
    • 磁盘7200rpm HDD × 6(JBOD),单盘 8 -16 TB。HDD 每 TB 成本仅为 SSD 的 1 / 5 1/5 1/5,容量优先,容忍高延迟。
  • 策略:设置 index.codec: best_compression(最大化压缩)。

2.4 冷冻层节点(Frozen)

# elasticsearch.yml
node.roles: [ data_content, data_frozen ]
node.attr.tier: frozen
  • 硬件规格
    • CPU4核(共享资源)
    • 内存16GB
    • 磁盘SATA HDD × 1 (512GB 缓存盘) + 对接对象存储(如 AWS S3)。本地磁盘仅作缓存,长期数据存于对象存储(每 TB 成本 < < < $ 20 20 20)。
  • 集成:使用 Elasticsearch 的 Searchable Snapshots 特性。

3.分层存储流动逻辑

ILM策略触发滚动
30天后
90天后
卸载索引
新数据写入
热层节点
索引移至温层
索引移至冷层
创建快照上传至S3
冷冻层按需挂载查询

4.关键配置说明

  • ILM 策略示例
    PUT _ilm/policy/tiered_policy
    {
      "policy": {
        "phases": {
          "hot": {"actions": {"rollover": {"max_size":"50gb"}}},
          "warm": {"min_age":"3d", "actions": {"allocate": {"require": {"tier":"warm"}}}},
          "cold": {"min_age":"30d", "actions": {"allocate": {"require": {"tier":"cold"}}}},
          "frozen": {"min_age":"90d", "actions": {"searchable_snapshot": {"snapshot_repository":"s3_repo"}}}
        }
      }
    }
    
  • 节点属性分配
    • 启动参数中添加:-Enode.attr.tier=hot(各层对应值不同)
  • 冷冻层集成对象存储
    PUT _snapshot/s3_repo
    {
      "type": "s3",
      "settings": {"bucket": "my-frozen-archive"}
    }
    

5.硬件选型对比表

层级存储类型单节点容量成本/TB/年适用场景
热层NVMe SSD 2 − 4 2-4 24 T B TB TB$ 1 , 500 + 1,500+ 1,500+日志、实时监控
温层SAS SSD 8 − 16 8-16 816 T B TB TB$ 800 800 800近线业务数据
冷层HDD(JBOD) 48 − 96 48-96 4896 T B TB TB$ 150 150 150审计日志、历史订单
冷冻层S3 ∞ ∞ $ 20 20 20合规存档(7年以上)

:成本基于公有云/自建 IDC 混合模型估算,实际需按供应商报价调整。

6.为什么需要 data_content 角色 ?

  • 核心作用:在 7.9+ 版本中,data_content 角色替代了传统的 data 角色,明确标识该节点存储持久化数据(非时序数据)
  • 分层必要性:温 / 冷 / 冷冻层的数据需长期保留,必须用 data_content 防止误删。
  • 与热层分离:热层使用 data_hot(可自动清理滚动索引),避免持久化占用高性能资源。

7.架构优势总结

  • 成本优化:SSD 使用量减少 70 % + 70\%+ 70%+,存储成本下降 5 5 5 倍(热 → 冷冻层)
  • 性能隔离:避免高 IO 负载(热层)影响归档查询(冷冻层)
  • 扩展灵活:每层独立扩容(如冷层优先加磁盘,热层优先加 CPU)
  • 合规就绪:冷冻层依托对象存储实现 WORM(Write Once Read Many)

🚀 实际部署建议:使用 Kubernetes Operators(如 ECK)或 Terraform 实现分层节点自动化部署。

### Elasticsearch 冷热数据架构与冷数据迁移最佳实践 在设计Elasticsearch集群时,采用冷热分离的数据存储策略能够显著提升性能并降低成本。对于冷数据的处理,通常会将其迁移到成本较低、读写频率不高的节点上。 #### 节点角色定义 为了实现高效的冷热分离,在部署Elasticsearch集群之前应该规划好各个节点角色分配: - **Hot Nodes**: 配备高性能硬件资源(如SSD硬盘),用于索引新产生的实时数据以及执行查询操作。 - **Warm/Cold Nodes**: 使用性价比更高的磁盘设备(HDD),适合保存历史较久远但仍需保持在线访问能力的历史数据。 #### 数据生命周期管理 (ILM) 通过配置Index Lifecycle Management (ILM),可以自动化完成从热到温再到冷阶段的数据流转过程[^1]。具体措施如下: - 当满足一定条件后自动触发rollover动作创建下一个时间序列化的索引; - 达到设定阈值之后将旧版本的索引转移到指定类型的节点组内; ```json PUT _ilm/policy/my_policy { "policy": { "phases": { "hot": { "actions": { "rollover": { "max_size": "50gb", "max_age": "30d" } } }, "warm": {}, "cold": { "min_age": "90d", "actions": { "allocate": { "number_of_replicas": 0, "include": "_tier_preference=data_cold" } } } } } } ``` 此段代码展示了如何设置一个简单的 ILM Policy 来控制索引在其生命周期内的行为变化。其中`_tier_preference=data_cold`参数指定了当达到最小年龄(`min_age`)时应将该索引移动到标记为 `data_cold` 的节点上去。 #### 手动迁移方案 如果不想依赖于内置的ILM特性,则可以通过手动方式调整分片位置来达成相同目的: - 利用 `_cluster/allocation/explain` API 获取当前集群状态下的分片分布详情; - 结合实际需求编写脚本批量修改特定索引下各分片所在的主机名或IP地址; 需要注意的是这种方式相对复杂且容易出错,建议优先考虑利用官方提供的工具和服务来进行维护工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据与AI实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值