集群资源评估
更新时间:2024-09-19
使用百度智能云Elasticsearch前,需要优先结合业务需求和所存数据,评估集群所需的资源容量,包括磁盘容量、单机规格、shard大小和数量等。评估方式如下:
节点数量评估
建议至少选择3个节点,保证ES集群具有较高的节点故障容错能力和更好的可用性。
磁盘评估
磁盘类型选择
SSD云磁盘:适合对性能要求高的场景,具有高IO和高吞吐,适合数据响应度较高的在线分析和搜索场景。核心业务系统、大型线上查询业务建议选择SSD云磁盘。
高性能云磁盘:性能比SSD云磁盘低,价格相对低廉。适合线下测试、大规模冷数据存储分析等对性能要求不敏感的场景。
磁盘容量评估
用户考虑磁盘空间时主要考虑以下几方面:
-
影响ES磁盘空间大小的因素包括:
- 副本分片数量:副本可以增加数据的可靠性和查询并发量,建议副本分片数量至少设置为1( number_of_replicas=1)。
- 索引数据膨胀开销:除原始数据外,ES 需要存储索引、列存数据等,通常比源数据大10%-50%(
_all
参数等未计算)。 - 内部其他开销:用于 segment 合并、ES Translog、日志等内部操作,预留20%。
- 安全阈值:通常至少预留20%~30%的安全阈值。
因此,数据保存在 ES 中实际数据量大概为:
实际数据量 = 源数据 * (1 + 副本数量) * (1 + 数据膨胀) * (1 + 内部其他开销)
≈ 源数据 * (1 + 副本数量) * 1.4
计算副本数量和安全阈值预留空间后,建议申请的存储容量为:
存储容量 = 源数据 * (1 + 副本数量) * 1.4 * (1 + 预留空间)
≈ 源数据 * (1 + 1) * 1.7
≈ 源数据 * 3.4
- 索引数据膨胀具体开销可以使用“mapper-size”插件测试,使用方式:创建索引mapping时设置“_size:{"enable":true}”。
_all
参数默认禁用,如果业务上没有特殊需求,建议无需开启。- 开启
_all
参数,磁盘容量的开销也会增大,在评估磁盘空间时需要相应增加。
单机规格评估
单机规格的大小会影响百度智能云Elasticsearch集群性能。建议参考以下几点来评估集群单机规格。
- 如果需要使用NLP中文分词或向量检索插件,建议单节点内存在8G以上。
- 使用场景不同,单节点磁盘最大容量也会不同。Elasticsearch实例能够容载的数据量与JVM的堆内存大小有关,一般JVM的堆内存会使用50%左右用于处理数据,建议单节点磁盘最大容量按照JVM内存来评估,建议比例如下:
场景 | 说明 | 单节点磁盘最大容量 |
---|---|---|
搜索场景 | 大量查询聚合、数据计算的业务场景 | JVM的堆内存(G)* 0.5 * 50 |
日志场景 | 大量日志写入、离线分析的业务场景 | JVM的堆内存(G)* 0.5 * 100 |
除了小内存机型外,通常情况下BES将JVM的堆内存设置为节点内存的一半,最大不超过30G。集群规格参考示例如下:
规格名称 | CPU(核) | 内存(GB) | 单节点磁盘最大容量 |
---|---|---|---|
bes.g3.c2m8 | 2 | 8 | 搜索场景:100 GB 日志场景:200 GB |
bes.g3.c4m16 | 4 | 16 | 搜索场景:200 GB 日志场景:500 GB |
bes.g3.c8m32 | 8 | 32 | 搜索场景:500 GB 日志场景:1 TB |
bes.g3.c16m64 | 16 | 64 | 搜索场景:1 TB 日志场景:2 TB |
shard 相关评估
在进⾏shard规划前,用户需要考虑:
- 存量数据和增量数据的量级
- 数据的写入TPS和查询QPS
- 集群规模和单节点规格
基于以上考虑,对shard规划提供了一些参考建议。
- 主分片数目在创建索引后不可动态更改,所以建议在创建索引之前就对主分片数量进行合理规划。
- 建议shard的个数(包括副本)要尽可能等于数据节点数,或者是数据节点数的整数倍,保证shard可以在各个节点间均匀分布。
- 通常业务场景下建议单个shard大小保持在10-30GB,日志场景可以保持在20-50GB。分片不宜过大或过小:过大可能使 ES 的故障恢复速度变慢、查询性能降低;过小可能导致非常多的分片,分片越多,ES性能开销也越大,从而导致读写性能差、内存不足等问题。
- 建议单节点上的shard数⽬控制在500个以下,7.x版本的实例默认的单节点shard数量上限为1000个(官⽅不建议调整)。如果规划中单节点shard数量超过上限,建议调整shard规划或扩容节点来降低单节点的shard数量。
- 建议单个节点上同一索引的shard个数不要超5个。
- 当数据量和写入量较大时,为了降低 ES 压力,建议选择多主分片+单副本分片的模式;当数据量较小,且写入量也比较小时,建议使用单主分片+多副本分片或者单主分片+单副本分片的模式。