弹性搜索(elasticsearch)进阶--服务维护

时间:2022-04-09 21:44:20

##系统配置#
由于es再设计的时候就注重尽量减少调优项,基本不需要开发人员依据运行环境进行专门的调优操作。

但是有些默认值,需要运维人员根据机器值进行设定,es也很亲和的给出了设置值的计算方式。

内存设置

首要的就是内存。es提供的索引检索和聚合计算两个功能都是比较耗内存的操作,而且完全在内存中计算速度自然最快。

所以内存方面,一个是合理的给es分配内存,一方面是,减少内存和交换区发生交换行为,这方面es建议关闭交换区。

es建议分配给es的内存为可用内存的50%,留下另外的50%给lucene。

设置给es的内存,定义ES_HEAP_SIZE环境变量即可。该变量告诉es,同时设置Xmx和Xms都为给定的大小。

es关闭交换区,在/elasticsearch/config/elasticsearch.yml文件中释放

bootstrap.mlockall: true

的注释。

在centos上设置ES_HEAP_SIZE,有多种方式,我常用的方式是在/etc/profile中添加export

export ES_HEAP_SIZE=4096m

然后在命令行窗口执行

source /etc/profile

使命令行窗口重新读取配置信息。

打开文件数

由于现在的linux服务器大多默认一个程序允许打开的文件数都是1024,所以对于需要打开很多文件的服务(tfs,hdfs,es),都需要调大这个数值,一般建议的是大于64,000,常见的是65,535。

在centos上调大这个数值,在/etc/security/limits.conf文件的末尾添加如下两行

elasticsearch - nofile 65535
elasticsearch - memlock unlimited

也可以把elasticsearch替换成*号,像这样:

* - nofile 65535
* - memlock unlimited

表示对所有的程序都生效。里面的-是表示对soft和hard同时生效。

设置开机启动

这一条主要针对小型es服务来说的,如果你的服务器很庞大,那么有几台服务掉线那么可能影响不大,不用火急火燎的去维护。如果大范围宕机了,那么添加开机启动也不一定能很快恢复。

所以说这里是对小型es服务来说的,如果你只有一两个节点,那么添加开机自动启动是划算的。当你手头没有电脑的时候,万一es的服务器出问题关机了,或者你使用的是云服务器,服务商出问题,关机了,那么设置了开机启动,一旦服务器恢复了,那么es也会自动起来,恢复工作。

在/etc/rc.d/rc.local文件的末尾添加一行

su 用户名 -c ‘/usr/local/elasticsearch-rtf-2.2.0/bin/elasticsearch -d’

切换到指定用户是因为,es不允许使用root账号启动。

另外,据大多使用ELK日志服务框架的经验,会开启服务器的超线程,如果需要的话,请自行搜索。

最后,不论怎样,一定一定要添加es的服务可访问性监控,可以用zabbix或者用在线的云监测工具。

索引创建和使用方式

首先说下一个索引中包含类型(对象)的种类,建议一个索引中仅包含一个类型,这样当一个类型的版本变动时,不需要所有的类型都跟着重新构建索引,方便后续变更的应对。

第二个,是从长期的时间线上考虑,当我们的服务不断升级改造,提供的功能和页面元素越来越多的时候,es中存储的Document包含的字段必然会有所变动。

那么怎么实现平滑(修改业务服务器配置)的变更呢?就是使用别名。

具体的可以参加这篇:http://m635674608.iteye.com/blog/2257735 。由于,没有实际经历过,感觉上是出现作者所说场景的可能性不大,就算出现时按照文章所说切换的必要性可能也不大,所以不进行展开。

机器维护平滑上下线

场景是节点上的数据不变,且没有损伤,需要处理的是服务器的硬件升级、操作系统版本升级,或者es的版本升级。

这时候,如果我们不希望业务线收到影响,那么必然是一台机器一台机器的进行下线、维护、上线。

但是,尽管如此,由于es的服务器下线感知和数据自动平衡,保证数据指定备份数量。尤其,当我们数据量很大的时候,这种均衡是很耗费时间的,而且机器下线触发一次均衡,机器维护之后上线又触发一次均衡。

这时候,可以采用暂停均衡,下线服务,上线服务,启动均衡,待服务状态为绿色后,再同样升级其他服务的方式,减小数据平衡消耗的时间。熟悉数据库的同学应该会比较容易联想到数据库数据导出导入操作,导入大规模数据时,可以先导入数据,再构建索引,而不边导入边构建索引,提交少数据导入的时间消耗。

更详细的信息可以参见这篇文章:http://blog.csdn.net/likui1314159/article/details/51728567

这里还缺少一个备份和恢复的章节,当出现严重问题时,从备份文件恢复的时间一定短语完全从原始数据初始化es索引的时间,所以备份和恢复还是有十分必要性的。