写点什么

运维大规模 ES 集群的思考和实践

发布于: 2021 年 01 月 13 日

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎。在开源搜索领域已经遥遥领先其他产品。随着近年来 ES 的快速发展,ES 已经逐步从单一搜索引擎进化成一个全能型的数据产品。在日志监控,全文检索,数据库加速,大数据分析等很多领域得到广泛应用。


▲数据库引擎排名,数据来源:https://db-engines.com/en/ranking▲


京东智联云 ES 支撑了公有云,私有云和京东集团内部的大量 ES 集群。京东商城,京东物流,京东金融等各个业务领域都对 ES 服务有很大量的需求。目前已使用数十万核,上万个节点,数十万亿个文档。


如何利用云厂商的优势,高效,可靠,稳定的运维如此大规模的 ES 集群是我们需要思考和解决的问题。下面我将从几个维度介绍我们的思考和实践。



一、基础设施和服务编排


云厂商相较于用户自建最大的优势在于弹性。弹性给用户带来的不仅仅是方便易用,还有降低成本。京东智联云 ES 依托于云舰的服务编排能力,能够达到快速,灵活的部署集群,支持对集群水平扩缩,垂直变配,存储扩容等弹性能力。另外京东智联云 ES 还提供了云硬盘本地盘对象存储多种存储方式,满足不同场景下的用户需求。

 

另外服务编排还提供了故障自愈能力。物理机故障场景,会自动将故障机器上的 es 节点 failover 到其他节点;es 节点故障场景,会自动尝试重启 es 节点如果仍然无法恢复则会迁移 es 节点到其他物理机节点。

 

二、运维


▲京东智联云ES运维能力▲


1,监控警告

如此大规模的集群,需要全局和指标丰富的运维监控系统,来保障系统运维的可视化。通过我们的运维经验积累,京东智联云的运维监控系统,已经能够实时的发现异常集群,并能够通过各个监控指标分析发现问题的原因。



2,多版本支持

ES 版本特别多,由于历史原因很多旧系统很难升级,且不同用户上云对版本需求差异较大,所以需要支持很多不同的版本。目前支持的大版本有 2.x,5.x,6.x,7.x。多版本的管理复用同一套编排管理系统,能够快速支持新 es 版本上线。

 

3,性能优化

ES 的特点是开箱即用,但 ES 可配置项非常多,对于不同的业务场景和需求,集群需要不同的调优配置,非专业用户往往很难使用的非常合理。下面列举一些常见问题:



4,数据迁移



5,索引生命周期管理

索引生命周期管理是用户很常用的一个管理功能。按天或月周期创建索引,保留一定时间后删除过期索引,永久保留指定时间的索引(例如大促期间的索引)。ES 从 6.6 版本在 x-pack 中开始支持索引生命周期管理功能的测试版本,但低版本不支持该功能。京东智联云 ES 将该功能拓展到所有 ES 版本并提供 UI 化设置,比通过原生 kibana 配置或者 API 配置更加简单实用。



6,探索智能化运维

探索智能化运维,我们的运维知识和经验产品化提供给用户,根据用户的业务场景,综合各项监控指标,给出集群的健康状况和解决建议。例如节点负载不均,分片设置不合理,堆内存占用太高,GC 时间太长,filedata 占比太高,集群负载较高,分片数量太大,写入或者查询线程池队列有堆积或者 reject,集群的读写流量异常波动等。



7,监控指标数据自治系统

自动化运维或者自治运维是终极目标,随着智能化运维能力的提高,通过监控指标数据自治系统就能够自主得出决策并执行,完全不需要人工介入。


三、应用场景优化


ES 的应用场景主要涉及日志检索,数据库加速,监控指标,数据分析等领域。不同的业务场景具有不同的特点,对性能的需求也不尽相同,所以需要针对不同场景有不同的优化方案。


1. 日志检索场景,并发写入量大,实时性要求不高,存储量大,数据有冷热属性。针对这种场景可以提高索引写入缓存大小来提升写入性能;增加 refresh interval 时间间隔来减少 segment 数量;将 translog.durability 使用 HDD 来降低存储成本。


2. 数据库加速场景,对于没有事务性要求,且需要检索海量数据的结构化查询场景,ES 是替代关系型数据库的不错选择。京东主要应用的业务有商品,优惠券,订单,对账,物流等。此场景的特点是延迟敏感,需要高性能,高可用。


3. 监控指标,并发写入量大,时序特性,不需要高可用,数据有冷热属性。


4. 数据分析场景,数据分析维度较多,聚合查询。写入量大,查询量小,但需要聚合查询。京东主要应用的业务有订单交易分析,用户画像等。


四、服务化


专业的人做专业的事,托管 ES 产品第一步解决了用户自己搭建集群管理集群的效率和成本问题,但用户仍然需要了解 ES 的原理知识,调优知识,索引配置,集群配置,分片设置等等和业务无直接关系的知识,使用好 ES 仍然需要很高的门槛。所以托管 ES 产品的第二步就是服务化用户只需要提出业务的需求,不用再关心服务后面 ES 集群的参数。例如用户从自身的业务场景入手,提供写入查询性能指标的期望,另外用户只需要定义索引的 mapping,不需要关心索引的 settings,分片数量等配置信息。从集群的规格配置到索引的合理设置都由后台自动设置和优化。


五、未来思考


给用户提供简单可靠的产品是我们的终极目标。所以未来我们会从两个方面提升优化我们的产品,一是从用户的角度对外呈现产品形态,通过产品服务化更贴近用户的使用习惯,降低用户使用门槛,提供更加简单且实用的使用方式。二是从运维的角度增强后台的自治运维能力,包括智能检测和修复能力,故障自愈能力,自动弹性能力,数据配置托管能力等,做到从托管产品变成托管服务。


推荐阅读:


欢迎点击京东智联云,了解开发者社区

更多精彩技术实践与独家干货解析

欢迎关注【京东智联云开发者】公众号


发布于: 2021 年 01 月 13 日阅读数: 50
用户头像

拥抱技术,与开发者携手创造未来! 2018.11.20 加入

我们将持续为人工智能、大数据、云计算、物联网等相关领域的开发者,提供技术干货、行业技术内容、技术落地实践等文章内容。京东科技开发者社区官方网站【https://developer.jdcloud.com/】,欢迎大家来玩

评论

发布
暂无评论
运维大规模ES集群的思考和实践