本文介绍一个基于严格分层架构的 Elasticsearch 生产集群设计方案,满足 热、温、冷、冷冻 四层存储需求,并结合硬件选型与角色配置说明。
数据层 | 节点角色组合 | 核心功能 | 节点数量 | 分片策略 |
---|---|---|---|---|
热层 | 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 2−3 | 副本数 = 1 = 1 =1 (可降为 0 0 0) |
冷冻层 | data_content + data_frozen |
长期存档、几乎不访问 | 1 − 2 1-2 1−2 | 副本数 = 0 =0 =0 + + + 对象存储 |
# elasticsearch.yml
node.roles: [ data_hot, ingest ]
node.attr.tier: hot
# elasticsearch.yml
node.roles: [ data_content, data_warm ] # 关键:data_content持久化数据
node.attr.tier: warm
index.refresh_interval
(降低刷新频率)。# elasticsearch.yml
node.roles: [ data_content, data_cold ]
node.attr.tier: cold
index.codec: best_compression
(最大化压缩)。# elasticsearch.yml
node.roles: [ data_content, data_frozen ]
node.attr.tier: frozen
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"}
}
层级 | 存储类型 | 单节点容量 | 成本/TB/年 | 适用场景 |
---|---|---|---|---|
热层 | NVMe SSD | 2 − 4 2-4 2−4 T B TB TB | $ 1 , 500 + 1,500+ 1,500+ | 日志、实时监控 |
温层 | SAS SSD | 8 − 16 8-16 8−16 T B TB TB | $ 800 800 800 | 近线业务数据 |
冷层 | HDD(JBOD) | 48 − 96 48-96 48−96 T B TB TB | $ 150 150 150 | 审计日志、历史订单 |
冷冻层 | S3 | ∞ ∞ ∞ | $ 20 20 20 | 合规存档(7年以上) |
❗ 注:成本基于公有云/自建 IDC 混合模型估算,实际需按供应商报价调整。
7.9+
版本中,data_content
角色替代了传统的 data
角色,明确标识该节点存储持久化数据(非时序数据)。data_content
防止误删。data_hot
(可自动清理滚动索引),避免持久化占用高性能资源。实际部署建议:使用 Kubernetes Operators(如 ECK)或 Terraform 实现分层节点自动化部署。