第3章:企业级大规模Elasticsearch集群规划与容量设计 第3章:企业级大规模Elasticsearch集群规划与容量设计3.1 问题定义要解决什么问题在第2章中,我们完成了架构设计,确定了集群拆分策略、节点角色规划和存储架构。现在需要回答一个关键问题:每个集群需要多少节点?每个节点需要多少资源?核心问题:分片数量: 一个索引应该有多少分片?分片大小如何确定?节点数量: 需要多少个Data节点?多少个Master节点?资源配置: 每个节点需要多少CPU、内存、磁盘?成本优化: 如何在满足性能需求的前提下最小化成本?问题的重要性容量规划直接影响:性能: 资源不足导致性能瓶颈,资源过剩导致浪费稳定性: 规划不合理可能导致节点OOM、磁盘满、集群不可用成本: 过度配置导致成本失控,配置不足导致频繁扩容扩展性: 规划需预留扩展空间,应对业务增长错误规划的代价:分片过小(1GB): 分片数过多,Master压力大,性能下降分片过大(100GB): 查询慢,故障恢复慢堆内存过大(64GB): 失去压缩指针优化,性能反而下降资源不足: 频繁扩容,运维成本高常见误区误区1: “分片越多越好,并行度高”真相: 分片过多导致Master压力大,建议单节点分片数不超过1000误区2: “堆内存越大越好”真相: 堆内存超过31GB失去压缩指针优化,建议不超过31GB误区3: “容量规划一次到位”真相: 需要根据业务增长动态调整,建议预留30-50%扩展空间3.2 核心概念分片策略设计分片大小黄金法则: 10-50GB为什么是10-50GB?分片过小(10GB)的问题:分片数过多,Master节点压力大每个分片都有固定开销(Lucene索引结构)查询时需要合并更多分片结果,性能下降示例: 1TB数据,1GB分片 = 1000个分片,Master压力大分片过大(50GB)的问题:单个分片查询慢,无法并行故障恢复慢(需要恢复大分片)分片分配不灵活,难以均衡负载示例: 1TB数据,100GB分片 = 10个分片,查询慢最佳实践:日志场景: 20-40GB分片搜索场景: 10-30GB分片时序数据: 30-50GB分片分片数量计算公式公式:分片数 = 数据总量(GB) / 单分片容量(GB)示例计算:场景1: 日志分析(10TB/天,保留90天)总数据量 = 10TB × 90天 = 900TB = 900,000GB 单分片容量 = 30GB 分片数 = 900,000 / 30 = 30,000个分片 假设副本数 = 1 总分片数 = 30,000 × 2 = 60,000个分片(主+副本) 假设单节点分片上限 = 1,000 节点数 = 60,000 / 1,000 = 60个Data节点场景2: 电商搜索(1亿商品,QPS 10000)总数据量 = 1亿商品 × 1KB/商品 = 100GB 单分片容量 = 20GB 分片数 = 100 / 20 = 5个分片 副本数 = 2(高可用) 总分片数 = 5 × 3 = 15个分片 节点数 = 15 / 500 = 3个Data节点(保守估计)单节点分片上限规划官方建议: 单节点分片数不超过1000实际考量:堆内存: 每个分片约占用10-50MB堆内存CPU: 分片数过多导致查询时CPU竞争磁盘IO: 分片数过多导致磁盘IO竞争推荐上限:小分片(10GB): 单节点不超过500个中分片(30GB): 单节点不超过1000个大分片(50GB): 单节点不超过1500个计算公式:单节点分片上限 = 堆内存(GB) × 20示例: 31GB堆内存 → 单节点分片上限 ≈ 620个副本数量决策副本的作用:高可用: 主分片故障时,副本提升为主分片负载分担: 读请求可以分发到副本分片