如何对集群的容量进行规划
一个集群总共需要多少个节点?一个索引需要设置几个分片?规划上需要保持一定的余量,当负载出现波动,节点出现丢失时,还能正常运行。
做容量规划时,一些需要考虑的因素:
- 机器的软硬件配置
- 单条文档的大小│文档的总数据量│索引的总数据量((Time base数据保留的时间)|副本分片数
- 文档是如何写入的(Bulk的大小)
- 文档的复杂度,文档是如何进行读取的(怎么样的查询和聚合)
做容量规划之前应该先对业务的性能需求做一个评估。
评估业务的性能需求: - 数据吞吐及性能需求
- 数据写入的吞吐量,每秒要求写入多少数据?
- 查询的吞吐量?
- 单条查询可接受的最大返回时间?
- 了解你的数据
- 数据的格式和数据的Mapping
- 实际的查询和聚合长的是什么样的
常见用例:
- 搜索: 固定大小的数据集
- 搜索的数据集增长相对比较缓慢
- 日志: 基于时间序列的数据
- 使用ES存放日志与性能指标。数据每天不断写入,增长速度较快
- 结合Warm Node 做数据的老化处理
硬件配置:
- 选择合理的硬件,数据节点尽可能使用SSD
- 搜索等性能要求高的场景,建议SSD
- 按照1∶10-20的比例配置内存和硬盘
- 日志类和查询并发低的场景,可以考虑使用机械硬盘存储
- 按照1:50的比例配置内存和硬盘
- 单节点数据建议控制在2TB以内,最大不建议超过5TB
- JVM配置机器内存的一半,JVM内存配置不建议超过32G
- 不建议在一台服务器上运行多个节点
内存大小要根据Node 需要存储的数据来进行估算
- 搜索类的比例建议: 1:16
- 日志类: 1:48——1:96之间
假设总数据量1T,设置一个副本就是2T总数据量 - 如果搜索类的项目,每个节点31*16 = 496 G,加上预留空间。所以每个节点最多400G数据,至少需要5个数据节点
- 如果是日志类项目,每个节点31*50= 1550 GB,2个数据节点即可
部署方式:
- 按需选择合理的部署方式
- 如果需要考虑可靠性高可用,建议部署3台单一的Master节点
- 如果有复杂的查询和聚合,建议设置Coordinating节点
集群扩容: - 增加Coordinating / Ingest Node
- 解决CPU和内存开销的问题
- 增加数据节点
- 解决存储的容量的问题
- 为避免分片分布不均的问题,要提前监控磁盘空间,提前清理数据或增加节点