这篇文章主要包括以下几个点展开,一个是内存分配的问题,一个是节点数的问题,一个是分片数量的问题,还有就是磁盘的问题。这是我目前遇到的一些最需要考虑的问题,我看了很多文章,进行一些摘录。
# # 集群规模和容量规划预估方法
容量规划——预估集群中每个节点的分片数、内存及存储资源。
吞吐量规划——以预期的延迟和吞吐量估算处理预期操作所需的内存,计算和网络资源。
以上的任何一个问题,都会直接成为瓶颈。
# # 磁盘相关,容量评估
第一,问自己几个问题:
您每天将索引多少原始数据(GB)?
您将保留数据多少天?
每天增量数据是多少?
您将强制执行多少个副本分片?
您将为每个数据节点分配多少内存?
您的内存:数据比率是多少?
第二,预留存储以备错误。(Elastic 官方推荐经验值)
预留 15%警戒磁盘水位空间。
为错误余量和后台活动预留+ 5%。
保留等效的数据节点以处理故障。
第三,容量预估计算方法如下:
总数据量(GB) = 原始数据量(GB) /每天 X 保留天数 X 净膨胀系数 X (副本 + 1)
磁盘存储(GB) = 总数据量(GB)* ( 1 + 0.15 + 0.05)
数据节点 = 向上取证(磁盘存储(GB)/ 每个数据节点的内存量 / 内存:数据比率)+ 1
Tips:腾讯云 在 2019 4 月的 meetup 分享中建议:磁盘容量大小 = 原始数据大小 * 3.38。
# # 分片数的问题
分片预估
第一,问自己几个问题:
您将创建多少索引?
您将配置多少个主和副本分片?
您将在什么时间间隔旋转索引?
您将保留索引多长时间?
您将为每个数据节点分配多少内存?
第二,经验值(Elastic 官方推荐)
每 GB JVM 堆内存支持的分片数不超过 20 个。
每个分片大小不要超过 50GB。推荐阅读:https://www.elastic.co/cn/blog/how-many-shards-should-i-have-in-my-elasticsearch-cluster
Tips:
将小的每日索引整合为每周或每月的索引,以减少分片数。
将大型(> 50GB)每日索引分拆分成小时索引或增加主分片的数量。
第三,分片预估方法如下:
总分片数 = 索引个数 X 主分片数 * (副本分片数 +1)X 保留间隔
# # 节点数
总数据节点个数 = 向上取整(总分片数 / (20 X 每个节点内存大小))
# # 总结
对于集群规划,我的理解是从计算数据量开始的,这个时候就要确定硬盘的大小了,加上冷热分备的原理,这里可以考虑使用固态硬盘来做提升,这个问题也是我最关心的。后边会出一个使用固态硬盘的数据对比。
整体来讲的话是一个倒推的过程:
确定数据的总量以后,就可以根据分片原则确定分片数量(原则是上限为50G,20~30G为最佳);
所以(总的预估的数据量 + 预估增长的总量) / 20 = 总分片数
再根据每跟个分片都要占有一定大小堆内存的原则,可以确定总的堆内存(原则就是:每 GB JVM 堆内存支持的分片数不超过 20 个)
所以 : 总的堆内存 = 总分片数 / 20
最后根据每个节点堆内存的分配不要超过32G 的原则
所以 节点数 = 总的堆内存 / 31
PS ~ 待补充
# # 使用固态硬盘对集群带来的提升
# # 在预算的基础上,增加节点,带来的提升
# # 在预算的基础上,增加堆内存带来的提升
参考:https://blog.csdn.net/laoyang360/article/details/103545432