存储容量预估:
副本数量:副本有利于增加数据的可靠性,但同时会增加存储成本。默认和建议的副本数量为1。
注意:实例的磁盘容量不等于可使用的数据空间大小
Elasticsearch和OpenSearch通常可以将数据压缩20~30%。
1GB原始数据-> 1*1.2(Json转换因子)*0.8(压缩) -> 0.96压缩比。
磁盘空间使用率(一般建议为70%)。
索引开销:可以使用 cat/indices?v API 和 __pri.store.size_ 值计算确切的开销计算,通常比源数据大 10%
操作系统预留空间:默认操作系统会保留5%的文件系统供您处理关键流程、系统恢复以及防止磁盘碎片化问题等
因此
存储容量 = 源数据 * (1 + 副本数量) * 0.96 / (1 - 磁盘使用率)*(1 *索引开销)*(1 *预留空间) ≈ 源数据 * 2 * 0.96 / 0.7 *1.1 *1.05 = 源数据*3.168。根据原始数据大小,至少要预留大概3倍以上的空间
节点数量预估:
集群建议最大节点数 = 单节点 CPU * 5
单节点磁盘最大容量:
搜索类场景:单节点磁盘最大容量 = 单节点内存大小(GB)* 10。
日志类等场景:单节点磁盘最大容量 = 单节点内存大小(GB)* 50。
通用类等场景:单节点磁盘最大容量 = 单节点内存大小(GB)* 30。
配置 最大节点数 单节点磁盘最大容量 (查询) 单节点磁盘最大容量 (日志)
4 核 16G 20 160 GB 800 GB
8 核 32G 40 320 GB 1.5 TB
16 核 64G 80 640 GB 2 TB
分片数量规划:
适用场景:
日志类,写入频繁,查询较少,单个分片 30G 左右
搜索类,写入少,查询频繁,单个分片不超过 20G
每个 Elasticsearch 索引被分为多个分片,数据按哈希算法打散到不同的分片中。由于索引分片的数量影响读写性能和故障恢复速度,建议提前规划。
分片使用概要:
在单节点上,最大分片数量为 1000
单个分片大小尽量保持在 10-50G 之间为最佳体验,一般推荐在 30G 左右.
分片过大可能使故障恢复速度变慢
分片过小可能导致非常多的分片,因为每个分片会使用占用一些 CPU 和内存,从而导致读写性能和内存不足的问题。
当分片数量超过数据节点数量时,建议分片数量接近数据节点的整数倍,便于将分片均匀的分布到数据节点中。