腾讯云Elasticsearch集群规划及性能优化实践

随着腾讯云 Elasticsearch 云产品功能越来越丰富,ES 用户越来越多,云上的集群规模也越来越大。我们在日常运维工作中也经常会遇到一些由于前期集群规划不到位,导致后期业务增长集群规模大了之后带来的各种各样的集群可用性及稳定性问题。

 

这里列举下其中比较典型的几种集群规划问题:

 

节点规格规划问题:集群数量很大,但是每个节点的配置很低;

索引分片规划问题:索引很小,但是设置了几十个分片,或者索引很大,只设置了两三个分片;

分片数量规划问题:集群中包含 10万+ 的分片。

 

正所谓磨刀不误砍柴工,只有前期做好充分的集群评估规划工作,后期才能省去大量的运维工作。且能够长期保证集群的高可用和高稳定性。

 

本文结合我们在给腾讯云 ES 集群日常运维工作中遇到的各种集群问题及总结沉淀的一些运维经验,来介绍下如何规划好集群容量及索引配置,以及所遵循的一些原则和经验。文章作者:吴容,腾讯云Elasticsearch研发工程师。

 

二、集群规模及索引规划

 

 

1. 集群规模评估

 

(1)评估什么?

 

集群规模的评估主要评估以下三个方面:

 

第一,计算资源评估,计算资源的评估主要是评估单节点的CPU和内存。

 

ES的计算资源一般消耗在写入和查询过程,经过总结大量ES集群的运维经验,2C8G 的配置大概能支持 5k doc/s 的写入,32C64G 的配置大概能支撑 5w doc/s的写入能力。

 

第二,存储资源评估,存储资源的评估主要是评估磁盘的类型及容量大小。

 

例如ES集群使用什么类型的磁盘,SSD或者高性能云盘。以及每块盘的容量大小,是选择单盘多容量,还是多盘少容量。而对于冷热分离的集群,则默认使用SSD作为热节点,高性能云盘作为温节点。

 

另外腾讯云ES支持单节点挂载多块云硬盘,且经过性能压测,3块盘相比于1块盘,吞吐量大约有2.8倍的提升。因此如果对写入速度及IO性能要求较高,可选择挂载多块 SSD 磁盘。

 

腾讯云Elasticsearch集群规划及性能优化实践

ES冷热分离多盘集群示意图

 

第三,节点数量评估,节点数量的评估主要是评估集群数据节点的数量。

 

在同等集群性能的情况下,建议优先选择高配置少节点的集群。例如 32C64G*3 节点的集群相比于 8C16G*12 节点的集群,在集群稳定性和扩容的便捷性上都有一定的优势。

 

因为高配置的集群如果遇到性能瓶颈需要扩容,则只需要横向扩容,即向集群中加入更多同等配置的节点即可;而低配置的集群在扩容节点配置时,则需要纵向扩容。

 

目前云上的纵向扩容方式有两种:

 

第一种是滚动重启方式扩容,这对集群稳定性会有一定的影响。

 

第二种是数据迁移方式扩容,其原理是先向集群中加入同等数量的高配置节点,然后将低配置节点上的数据迁移到新节点上,最后再将低配置节点剔除集群,所以这种扩容流程时间会比较长,且成本较高。

 

腾讯云Elasticsearch集群规划及性能优化实践

数据迁移方式纵向扩容示意图

 

(2)根据什么评估?

 

集群规模评估主要根据以下三点来评估:

 

具体的业务场景,如日志分析、指标监控、搜索业务;

业务预计的查询及写入QPS;

索引的数据总量。

  (3)集群规模评估准则

 

这里结合我们的运维经验,给出集群规模评估的几点参考建议:

 

32C64G单节点配置通常可承载5W次/s的写入;

写入量和数据量较大时,优先选择32C64G的节点配置;

1T的数据量预计需消耗2-4GB的内存空间;

搜索场景优先选择大内存节点配置;

存储容量 = 源数据 * (1 + 副本数量) * 1.45 * (1 + 预留空间) ≈ 源数据 * (1 + 副本数量) * 2.2.

  2. 索引配置评估

 

(1)评估什么?

 

索引配置的评估主要评估两点:

 

第一,如何划分索引?

 

在使用 index 时,建议做好定期切换索引的计划。对于日志场景来说,写入不大的情况下建议按天创建索引,而写入较大的情况下,则建议按小时创建索引。

 

定期滚动索引的好处主要包括:能够控制单个索引的大小,提升读写性能;同时能够方式单个索引太大,影响故障恢复的时间;另外也能避免热索引过大,从而影响快照备份恢复的时间。

 

第二,如何设置索引主分片数?

 

云上的索引主分片数默认是5个,具体的大小则需要业务根据具体的场景及数据量来优化。下面会给出具体的一些准则和经验。

 

(2)根据什么评估?

 

索引配置的评估同样也要结合具体的业务场景及索引的数据量来评估,尤其是单日新增的数据量。

 

(3)索引配置评估准则

 

索引配置的评估可根据下面几点准则进行评估:

 

单个分片大小控制在 30-50GB;

集群总分片数量控制在 3w 以内;

1GB 的内存空间支持 20-30 个分片为佳;

一个节点建议不超过 1000 个分片;

索引分片数量建议和节点数量保持一致;

集群规模较大时建议设置专用主节点;

专用主节点配置建议在 8C16G 以上;

如果是时序数据,建议结合冷热分离+ILM 索引生命周期管理。

 

特别需要说明的是集群分片总数的大小控制上,我们经过一些性能测试发现:当集群的总分片数超过 10w 个以后,创建索引时间会增长到分钟级。

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgjfd.html