Elasticsearch实战-磁盘IO被打满

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Elasticsearch实战-磁盘IO被打满

背景


事情是这样的。一天下午4点42分左右。业务反馈我开发的服务在测试环境出现问题,返回资源数据是0。查日志发现是ES访问超时。相当于数据库挂了。持续了20多分钟自己恢复。


咨询了ES团队,最终得到下面的答复:


当前集群现状:

1)当前集群数据IO最高的索引为XXX,数据量很小(100mb)


2)但是读写都很大(读>1000QPS,写>1000QPS) ,使用的是线下环境的机器


3)索引分了10个片,4个副本问题


分析:


1)线下环境的机器之前了解到测试环境硬盘性能本来就很差,这个需要业务SRE一块来确定


2)查询的时候,会一次性查询10个片,这样可能会查10台机器的数据,很容易出现木桶

效应,造成集群的性能下降


3)写入的时候,虽然是做了10个分片,看起来能加大写能力,但是机器数少,导致结果是每台机器分布了5个分片,等效于只做了2个分片,完全没有扩大写的能力


建议:


1)升级硬件,换成SSD


2)分片改成2个,这样读能力比以前肯定有提升,写能力等价


3)数据量很小,建议直接换成Redis


我自己做了调查。测试环境ES有十台VM(非本地ESB磁盘)作为服务器。其中一台IO被打满。其他机器负载、IO都很低。对于这个问题,ES团队给出的答复是:


ES的服务负载均衡、发现机制是自己写的,一般不会出现问题,


Client仅仅对官方的客户端做了简单的封装,


当然最好是可以对官方的客户端进行改造,


但是我们现在的人力明显不行,只能继续沿用老的客户端使用;


我们预计在10月份左右会出一个自研的客户端,


会尽量避免出现一台机器导致部分查询出现问题,


但是也避免不了,


ES内部的服务发现机制,我们改变不了,除非改ES


调查


1.需要换成本地磁盘,测试环境也是我们的正式环境。是否能直接替换成物理机?多少台合适?怎么可以平滑替换?


没有必要换成物理机。因为ES内存最多能用32G。内存多出来的是浪费用不上,有物理机也是隔成VM来用。


原来10台VM是足够的,只需要同等数量替换。


有机器替换功能。替换时原理是先申请机器部署。然后点击机器替换。会一台台的将分片赶到新机器上。一台下完自动下线老机器。


2.我们测试环境有10台服务器,10个分片,4个副本,写/读QPS大概是7:6。究竟几个分片几个索引更合理?


因为每个分片和副本是同步写。写比例大,副本多会对性能有很大影响。分片替换需要重建索引,很难平滑。所以只将副本数减少为一个分片1个。


3.程序方面有没有可以优化的?


在ES上层增加tair缓存。在进行数据更新操作时是单个数据读取。采用tair有更好的事务性,并减少了对ES的压力。ES只处理复杂查询请求。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
1月前
|
监控 并行计算 数据处理
构建高效Python应用:并发与异步编程的实战秘籍,IO与CPU密集型任务一网打尽!
在Python编程的征途中,面对日益增长的性能需求,如何构建高效的应用成为了每位开发者必须面对的课题。并发与异步编程作为提升程序性能的两大法宝,在处理IO密集型与CPU密集型任务时展现出了巨大的潜力。今天,我们将深入探讨这些技术的最佳实践,助你打造高效Python应用。
38 0
|
19天前
|
网络协议 物联网 API
Python网络编程:Twisted框架的异步IO处理与实战
【10月更文挑战第26天】Python 是一门功能强大且易于学习的编程语言,Twisted 框架以其事件驱动和异步IO处理能力,在网络编程领域独树一帜。本文深入探讨 Twisted 的异步IO机制,并通过实战示例展示其强大功能。示例包括创建简单HTTP服务器,展示如何高效处理大量并发连接。
39 1
|
20天前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
192 2
|
18天前
|
网络协议 调度 开发者
Python网络编程:Twisted框架的异步IO处理与实战
【10月更文挑战第27天】本文介绍了Python网络编程中的Twisted框架,重点讲解了其异步IO处理机制。通过反应器模式,Twisted能够在单线程中高效处理多个网络连接。文章提供了两个实战示例:一个简单的Echo服务器和一个HTTP服务器,展示了Twisted的强大功能和灵活性。
29 0
|
2月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
130 5
|
3月前
|
NoSQL Redis 数据库
Redis AOF重写问题之同一数据产生两次磁盘IO如何解决
Redis AOF重写问题之同一数据产生两次磁盘IO如何解决
Redis AOF重写问题之同一数据产生两次磁盘IO如何解决
|
4月前
|
索引
Elasticsearch 查看磁盘占用 查看指定索引磁盘占用
【7月更文挑战第2天】Elasticsearch 查看磁盘占用 查看指定索引磁盘占用
|
2月前
crash —— 获取系统的磁盘IO统计数据
crash —— 获取系统的磁盘IO统计数据
|
4月前
|
并行计算 监控 数据处理
构建高效Python应用:并发与异步编程的实战秘籍,IO与CPU密集型任务一网打尽!
【7月更文挑战第16天】Python并发异步提升性能:使用`asyncio`处理IO密集型任务,如网络请求,借助事件循环实现非阻塞;`multiprocessing`模块用于CPU密集型任务,绕过GIL进行并行计算。通过任务类型识别、任务分割、避免共享状态、利用现代库和性能调优,实现高效编程。示例代码展示异步HTTP请求和多进程数据处理。
56 8
|
4月前
|
存储 数据采集 数据处理
数据处理神器Elasticsearch_Pipeline:原理、配置与实战指南
数据处理神器Elasticsearch_Pipeline:原理、配置与实战指南
175 12