搜索结果正在快递途中

【工程实践】Elasticsearch 集群架构设计实战指南

默认分类 | 作者 search_engineer | 发布于4 小时前 | | 阅读数:45

大家好,我是 @search_engineer,今天分享 Elasticsearch 集群架构设计的实战经验。

为什么需要关注集群架构?

随着业务增长,单节点的 Elasticsearch 很快会遇到瓶颈。合理的集群架构设计可以:

  • 支撑海量数据存储
  • 提供高可用服务
  • 实现水平扩展
  • 优化资源利用率

常见集群架构模式

模式一:基础三节点架构

适合场景:中小型企业,数据量 < 10TB

┌─────────┐  ┌─────────┐  ┌─────────┐
│  Master │  │  Master │  │  Master │
│  + Data │  │  + Data │  │  + Data │
└─────────┘  └─────────┘  └─────────┘
   Node 1      Node 2      Node 3

配置要点:

  • 3 个节点,每个既是 Master 又是 Data
  • 最小高可用配置,可容忍 1 个节点故障
  • 副本数设置为 1

模式二:读写分离架构

适合场景:写入量大,查询延迟要求高

┌─────────┐  ┌─────────┐  ┌─────────┐
│  Master │  │  Hot    │  │  Warm   │
│  Node   │  │  Node   │  │  Node   │
└─────────┘  └─────────┘  └─────────┘
  专用于管理   新数据/高频查询  旧数据/低频查询

优势:

  • 热节点使用 SSD,保证查询性能
  • 温节点使用 HDD,降低存储成本
  • 自动迁移旧数据到温节点

模式三:大规模分片架构

适合场景:数据量 > 100TB,PB 级存储

┌─────────┐     ┌─────────┐
│  Master │────→│  Master │
│  Node   │     │  Node   │
└─────────┘     └─────────┘
     │                │
     └────────────────┘
            │
    ┌───────┴───────┐
    ↓               ↓
┌─────────┐     ┌─────────┐
│  Data   │     │  Data   │
│  Node   │     │  Node   │
│ (Rack 1)│     │ (Rack 2)│
└─────────┘     └─────────┘

关键配置:

  • 专用 Master 节点(3-5 个)
  • 数据节点按机架分布
  • 跨机架副本分配,防止单点故障

节点角色规划

角色 职责 配置建议
Master 集群管理、元数据维护 4-8GB 内存,不存储数据
Data 数据存储、查询执行 大内存(32GB+),大磁盘
Ingest 数据预处理 中等配置,可复用 Data 节点
Coordinating 查询聚合、路由 中等配置,可复用 Master 节点

容量规划公式

数据节点数量计算

节点数 = 总数据量 / 单节点容量 + 冗余节点

示例:
- 总数据量:50TB
- 单节点容量:10TB
- 冗余:2 个节点
- 节点数 = 50/10 + 2 = 7 个

分片数量规划

总分片数 = 数据节点数 × 每节点分片数

建议:
- 每节点分片数 ≤ 20(查询密集型)
- 每节点分片数 ≤ 50(日志型)
- 单分片大小:20-50GB

实际案例:电商搜索平台

业务需求:

  • 商品数据:5 亿文档
  • 日增量:1000 万文档
  • 查询 QPS:5000
  • 查询延迟:P99 < 100ms

架构设计:

Master 节点:3 台(4C8G)
Hot Data 节点:6 台(16C64G + SSD)
Warm Data 节点:4 台(8C32G + HDD)

索引策略:

  • 按月份分索引
  • 近 3 个月数据在 Hot 节点
  • 历史数据自动迁移到 Warm 节点
  • 副本数:Hot 2 个,Warm 1 个

监控与运维

关键监控指标

  • 集群健康状态(Green/Yellow/Red)
  • 节点 JVM 内存使用率
  • 磁盘使用率
  • 查询延迟(P50/P99)
  • 索引速率

常用运维命令

# 查看集群健康
GET /_cluster/health

# 查看节点状态
GET /_cat/nodes?v

# 查看分片分布
GET /_cat/shards?v

# 查看索引统计
GET /_cat/indices?v

总结

ES 集群架构设计的核心原则:

  1. 高可用:至少 3 个 Master 节点,副本数 ≥ 1
  2. 可扩展:数据节点可随时扩容
  3. 成本优化:冷热分离,降低存储成本
  4. 性能保障:合理规划分片,避免过多过小分片

参考资源

讨论

你的 ES 集群是什么架构?遇到过哪些坑?欢迎在评论区交流!


本文由 @search_engineer 原创发布,转载请注明出处。


[尊重社区原创,转载请保留或注明出处]
本文地址:http://searchkit.cn/article/15676


0 个评论

要回复文章请先登录注册