tigercn 2019-06-28
随着业务的增长与发展,不同的Elasticsearch集群承担着多厚多样的功能需求。尤其是当集群规模增长、业务庞大时,需要耗费大量的精力运维集群。阿里云Elasticsearch研发了一套智能运维系统,可通多专家经验与数据驱动两个重要抓手帮助用户运维集群、提升业务的稳定性。本篇文章将结合运维常见问题展开阿里云Elasticsearch智能运维系统最佳实践的介绍。
最坏的情况,Elasticsearch集群(后简称ES集群)崩溃,无法正常承担各项业务。导致ES集群崩溃的大多数原因是master节点、数据节点的宕机,而出现这些情况绝不是“空穴来风”,智能运维系统要帮助用户做的便是“有迹可寻”,从而“有则改之,无则加勉”。
以ES集群的数据节点与master节点为例,当有任何一个节点负载过高,都可能导致单节点宕机从而挑战集群的可用性。而通过系统自动与用户手动触发的方式,智能运维系统可帮助用户监测过去一段时间内节点负载情况,若存在危险,则提示用户原因与解决方案,帮助用户提前获知、拯救集群于崩溃边缘。
索引的副本一方面是保证数据的可靠性,保证在数据丢失的状态下依旧可以恢复如初,一方面副本数的增加可提高查询的性能。在存储空间占用过满时,极有可能导致索引副本丢失,检查副本的存在状态,可帮助用户提高数据的可靠性。在集群重启的过程中,只有在副本数量完整时才能保证服务的持续进行。
在写操作进行的过程中,可能因集群压力,堆积过多的读写任务,而对于用户来说可能会产生所有写入均返回失败的误区。如果在此情况下继续增加写入,则可能会引起集群的崩溃。通过推荐用户调用线程池查看实际成功、失败任务情况,使用分批写入的方式解决写入堆积困境,给集群减压。
如何在固定配置的情况下更大程度发挥集群可用性能,是用户最关心的问题。从Elasticsearch内部逻辑与架构,数据节点是任务载体与执行依托,shard是索引与搜索的主要承担者,副本是提升性能的重要抓手,分批写入与防止稀疏是必备方式。如何提升集群性能,智能运维系统从数据节点负载、shard合理性以及用户操作规范三个面入手,帮助用户挖掘集群能力。
在各数据节点负载均衡的条件下,性能会趋向于最优的实践。如果发生单节点负载过高,与其他节点产生较大差异,则高负载节点可能成为“拖油瓶”,拉低整体集群数据节点任务执行,甚至存在脱离集群的风险。通过检测数据节点间的负载偏离情况,能引导用户均衡负载,提升性能的同时保障稳定性。
不同的ES集群应用场景对性能承载着不同的需求。索引的载体就是shard,搜索结果的返回也是多个shard共同的返回结果。Shard数与节点间的负载均衡、查询性能和存储空间利用均有着非常重要的关系。智能运维可读取用户索引shard、节点shard,并检测是否因索引segment过多导致碎片化,引发离线数据写入过慢,从而提示用户在适当的时间执行段合并操作,从而提升离线数据的写入速度。帮助推荐用户最佳的shard指定情况、在合适的时机执行段合并,从而均衡负载、提升性能、节省空间。
在保证index:type=1:1的状态时,能有效防止稀疏数据的产生,从type个数诊断科可帮助用户合理化设置,辅以禁用dynamic映射自定义映射类型、别名的日常使用以及使用分批(bulk)合理操作的基本方式,帮助用户规范化、便捷化操作,加之集群状态频繁变更的监测,可提示用户减少读写,避免对集群造成更大的压力,引发更大的风险。
综上,是智能运维系统在诊断集群异常与提升集群性能作出的检测、析因、建议的主要实践。辅之以集群状态走势的监测图,从各个状态诊断项的个数变化,向用户展示最近时间段内的集群整体情况,从而全局查看,并增强知识提取、常见问题归纳的统计。
不同的ES集群在使用智能运维系统时会有不同的诊断结果,在ES集群变更的过程中,智能运维系统可持续跟进,给出用户ES集群各个状态的异常探测、风险规避与调优推荐,从而帮助用户合理化、科学化、便捷化运维集群。
本文为云栖社区原创内容,未经允许不得转载。
另外一部分,则需要先做聚类、分类处理,将聚合出的分类结果存入ES集群的聚类索引中。数据处理层的聚合结果存入ES中的指定索引,同时将每个聚合主题相关的数据存入每个document下面的某个field下。