Elasticsearch 填坑记

前言

技术的发展日新月异,传统企业数据库Oracle、SqlServer、DB2,Mysql等在今日不断的被各种大厂自研数据库取代,当然也有类似Elasticsearch等优秀的满足海量数据所使用的开源数据库。

我司多个日志审计与态势感知项目中,也没有免俗,选择了Elasticsearch作为我们的日志存储与搜索引擎。关于Elasticsearch基础知识就不做更多介绍了,随便搜索下,有大量的介绍和使用文档。

本文主要介绍我们在多个项目中,使用Elasticsearch过程中,各种填坑记录。

在具体的生产环境中,我相信大家不会用Windows作为Elasticsearch的运行服务器的,所以下文基本都是以Linux(Centos7)为主要的运行环境。

以下内容,仅供参考,实际遇到的问题,都需要在运维过程中,去仔细分析,查阅文档。解决问题的方法可能很简单,关键是能准确的定位问题,分析问题。

  • 安装

Elasticsearch安装就不多阐述了,主要记住:创建非root用户,修改linux系统参数,修改jvm运行参数,修改Elasticsearch运行参数,这4个主要部分。

由于Elasticsearch版本迭代比较快,不同的版本个别参数可能已经变更或废弃,所以修改前一定要认真阅读对应版本的官方文档,该参数是否还有效,这个地方是一个坑,需要重点注意。

  • 运行与系统调优

Elasticsearch的安装其实还是比较简单的,但是在实际运行中,各种各样的问题就来了。在实际运行中出现的问题,其实主要还是数据量的问题,随着数据量的增长,就会出现各种资源问题,需要随时解决和调优。

1.内存问题

官方建议Elasticsearch每个节点jvm配置内存不要大于系统总内存的一半同时不要大于32G。

Elasticsearch本身在运行过程中,随着数据量的增加,内存的使用会越来越多,gc回收会越来越慢,最终导致Elasticsearch虽然活着,但不响应任何请求。

这种情况下,扩充节点是个选项,但是大多数的情况,预算是固定的,硬件资源也是固定的,只能采取其他办法。

  • 数据要根据业务做成多索引的方式,因为每个索引都是占用内存的,多索引才有可能关闭部分历史数据索引,释放内存。最好做成定时任务,按照规则关闭不用的索引。
  • 定时对索引进行合并(merge segment)
  • jvm垃圾回收机制可以考虑配置为 UseG1GC
  • 即使按照官方说明配置成32G以下,比如31G,在短时间数据量暴增的情况下,容易带来linux oom问题,如果存在这种情况,建议再配置小一点。

2.文件句柄问题

linux中,所有的一切都与文件有关,实时打开的文件句柄数是有限制的,Elasticsearch可以看着是基于文件的数据库,随着数据量的增加,打开的句柄越来越多,就会导致系统停止对外响应,比如ssh登录不上去等问题。

这种情况,首先建议调整linux内核参数,修改系统打开的最大文件句柄数量。

其次还是要控制索引的数量,不要无限制的增长下去,想办法控制同时打开的文件句柄数量。

3.硬盘问题

硬盘当然是读写速度越快越好,数据量比较大的环境可以考虑冷热数据分离。

需要注意的是当Elasticsearch数据所在的硬盘空间使用超过80%以上时,就可能出现数据不再写入该节点的情况,所以需要定时监测硬盘使用量。

另外,不太建议使用通过网络挂载的硬盘空间。

总的来说硬盘有关的问题相对少点,就不多说了。

4.其他问题

以下的问题,可能是在特定的环境下,特定的版本上出现的。

运行环境,vmware+centos7.4 , kernel 3.x,3个ES节点,各64G内存。

问题1:3个节点中,有2个数据节点频繁宕机,kernel异常日志提示watchdog: BUG: soft lockup - CPU#5 stuck for 23s! [java:5783]。

各种搜索,建议升级内核版本,大于4.13.0-1017。

辛辛苦苦给2个节点升级内核,具体方法,自行百度,升级内核的坑就不多说了。

问题2:升级内核后,问题1基本解决,但是在短时间数据流暴增的情况下,出现OOM问题。

分析原因,应该还是jvm内存设置为31G,es索引底层索引内存请求加上jvm内存请求可能超出系统总物理内存(毕竟还有其他程序也要占用内存),导致OOM问题。解决办法,jvm内存适当调小一点。

当然也可以调整内核参数,取消OOM特性(不建议在生产环境使用)。

问题3:最郁闷的情况,解决完上述两个问题后,系统平均10多分钟就宕机一次,系统日志无报错,只在vcenter控制台上,提示kernel BUG at       drivers/net/vmxnet3/vmxnet3_drv.c:1441!。继续搜索,发现这是vmware的一个bug,在特定情况下出现:

Linux VM is running kernel >= 4.8

HW version of VM is >=13

ESXi version is 6.5

解决办法:

修改虚拟机vmx配置文件,添加vmxnet3.rev.30 = FALSE

或者 设置ethtool -G ethX rx-mini 0,ethX为网卡名称

原文地址:https://www.cnblogs.com/wishma/p/9218668.html

时间: 2024-10-14 22:26:36

Elasticsearch 填坑记的相关文章

UiAutomator2.0升级填坑记

UiAutomator2.0升级填坑记 SkySeraph May. 28th 2017 Email:[email protected] 更多精彩请直接访问SkySeraph个人站点:www.skyseraph.com 啰嗦 Google Android Developers 在2015年3月就发布了UiAutomator 2.0版本(下文简称U2),而公司的核心产品中用到还是UiAutomator老版本(下文简称U1),业界用U2的也不是很多,虽然有诸多问题和不便(如高版本OS中不支持Remo

minikube windows hyperx填坑记

minikube windows hyperx填坑记 安装了一天半,还是没行,先放弃 开始 minikube start --vm-driver=hyperv --hyperv-virtual-switch=k8svswitch --cpus=4 --memory=4096 --docker-env HTTP_PROXY=http://192.168.31.77:1080 --docker-env HTTPS_PROXY=http://192.168.31.77:1080 --docker-en

技术填坑记

人生就是不断的填坑,再填坑,下面的填坑记录说不定就能帮助你. 1)SQL server 自带发email功能 测试发给我自己,一切看起来正常.发给小组成员,每个人都能收到了,看起来今天终于可以正常下班了. 可是,测试环境(当然会将所有人的邮件都设定为我们测试小组的成员了)发给某种类型的人的时候,程序不工作了.当初使用的update语句是自己编写的,当然不存在邮箱格式错误的可能. 真是百思不得琪姐啊,只好在小组里面找之前踩过坑的同事了解,询问是否碰到过同样的问题,还好的是我们IT人员都没有藏着掖着

Flexbox微信踩坑填坑记

Flexbox的大名很早就有了解过,只是之前一直是开发PC端的页面,对这个东西还不是很敢造次去用.近期的项目是移动端开发,正好,内心一激动,就大大咧咧地开始用flexbox布局了.中间踩过的一些坑,以及将来可能还会踩到的坑,都在这里记录一下. 关于flexbox,有一篇文章讲的还是很透彻的,图文并茂,有兴趣的戳链接了解下.一篇很屌很好的文章 在用flexbox之前,很多人最关心的应该还是兼容性的问题.个人一直觉得,前端程序员的使命,就是要推进终端用户去使用最先进的浏览器.当然,现实是骨感的,我们

支付开发填坑记之微信支付

微信支付,支持的支付方式比较多:有扫码支付,刷卡支付,APP支付和公众号支付.其中,APP和网站上最常用的就是APP支付和公众号支付.前者集成在APP中,后者主要是为微信用户提供了另一种支付方式(需要在微信的内置浏览器中打开页面,再调起微信支付). 微信支付,支持的支付方式比较多:有扫码支付,刷卡支付,APP支付和公众号支付.其中,APP和网站上最常用的就是APP支付和公众号支付.前者集成在APP中,后者主要是为微信用户提供了另一种支付方式(需要在微信的内置浏览器中打开页面,再调起微信支付).

Android 项目开发填坑记 - 获取系统语言(兼容7.0)

如果移动端访问不佳,请访问–> Github版 关键词:Android7.0 .系统语言 .顺序不一致 获取系统当前语言是一个比较常用的功能,在 Android 7.0 系统上旧函数获取到的当前系统语言并不正确,或者说从 Android 7.0 起,Android 系统语言的规则变了. 背景 下面是未适配 Android 7.0 的代码: // 获取 Locale 的方式有二 Locale locale = getResources().getConfiguration().locale; Lo

.net core 填坑记之—格式转换问题

最近在将项目从.net 迁移到.net core环境中,迁移完成后,发布于Windows平台上进行测试,所有功能均能正常运行. 为了项目能够在正式环境也能正常运行,提前进行Linux环境部署(Centos7)预发布,就在预发布后进行代码的基本测试后, 发现日志中出现了string转datetime错误,按道理说相同的代码,相同的测试用例, 不应该出现不同的结果!!!???~ ~想到Linux和Windows还是有些差异性,会不会是运行环境的问题,经过调试发现,在linux中将datetime直接

Java Web 开发填坑记- 如何正确的下载 Eclipse

一直以来,做 Java web 开发都是用 eclipse , 可是到 eclipse 官网一看,我的天 http://www.eclipse.org/downloads/eclipse-packages/ 那么多应该下载哪一个?这是一个问题? 其实 eclipse 为每一种开发者,都提供了不同的版本.

Appium1.6.4 真机运行ios10.3.1 填坑记

期间在学习自动化测试的过程中,无意接触到Appium这个跨平台 多语言绑定的工具.感觉兼容性不错,就试了下.一番下来,感觉我再也不想用开源的工具了.到处都是红色的错误,依赖太多.每一个依赖都有可能因为某个改动就导致错误,而且debug需要去读各个库的文档.哎,免费是需要付出时间代价的,然而这种工具还是要依赖google的UIAutomator2和Apple的XCUITest.想想何苦去倒腾了,不过发现造轮子是现在的趋势.不过大公司一般都会有自己的库或者框架,不想依赖别人.很多初创公司更热衷开源的