背景

事情是这样的。一天下午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只处理复杂查询请求。

最新文章

  1. Win 10 文件浏览器无法打开
  2. 使用Tuple来实现多个Model传送至视图
  3. 《深入理解Spark:核心思想与源码分析》(第2章)
  4. 浅析C# new和override的区别
  5. cocoapods for xcode怎么用
  6. mysql数据库主从复制部署笔记
  7. Java 加密 MD5
  8. sql union代替or
  9. Android 之 Shape (圆角输入框)
  10. 网络负载均衡环境下wsHttpBinding+Message Security+Windows Authentication的常见异常
  11. Phaser小游戏
  12. 偶尔发生File has been moved - cannot be read again,其实是个误解
  13. Bootstrap3 概述
  14. GIT的使用流程
  15. [PDOException] PDO::__construct(): php_network_getaddresses: getaddrinfo failed:
  16. 设置和安装 BizTalk Server 2016 的必备组件
  17. RPC远程过程调用实例
  18. ceres入门学习
  19. mongo学习使用记录1
  20. laravel5.4中{{$name}} 和 {{!! $name !!}} 的区别:后者原生输出。前者转义

热门文章

  1. 北京2018网络赛 hihocoder#1828 : Saving Tang Monk II (BFS + DP +多开一维)
  2. CodeForces 988 F Rain and Umbrellas
  3. FZU oj Problem 2082 过路费
  4. hdu2586 How far away ?(lca模版题)
  5. codeforces 19 D. Points(线段树+set二分)
  6. 漫谈JavaScript中的作用域(scope)
  7. spring的嵌套事务
  8. 剑指Offer(三十二):把数组排成最小的数
  9. Storm 系列(四)—— Storm 集群环境搭建
  10. python3接口测试之webservice接口测试第三方库选择及新手问题