文章目录
简介
Elasticsearch在官方文档中明确说明大多数默认值都已经做了优化,安装时只需要修改很少的配置即可。在Elasticsearch中很少有“神奇的配置项”,如果你遇到了性能问题,解决方法通常是更好的数据布局或者更多的节点。Elasticsearch有三个配置文件:
- elasticsearch.yml:Elasticsearch配置文件
- jvm.options:Elasticsearch对应JVM配置文件
- log4j2.properties:Elasticsearch日志配置文件
配置文件的默认位置是在$ES_HOME/config
目录下。可以通过ES_PATH_CONF
环境变量更改config目录的位置:
ES_PATH_CONF=/path/to/my/config
系统配置
在安装Elasticsearch之前,首先需要对节点机器的系统配置进行合理设置(系统配置修改需要切换到root用户执行)。系统配置临时修改可以用ulimit
命令,而永久修改则需要在/etc/security/limits.conf
文件中增加相应配置。
最大文件描述符
Lucene使用了大量的文件。同时,Elasticsearch在节点和HTTP客户端之间进行通信也使用了大量的套接字。所有这一切都需要足够的文件描述符。Linux发行版本中,每个进程默认只允许1024个文件描述符,这对Elasticsearch节点来说实在是太低了。所以,应该增加节点机器上的文件描述符,设置一个较大的值,如65536:
# 临时修改,只对当前shell有效
ulimit -SHn 65536
# 永久变更需要修改/etc/security/limits.conf文件
vi /etc/security/limits.conf
* hard nofile 65536
* soft nofile 65536
linux系统中通常会对每个进程所能打开的文件数据有一个限制,当进程中已打开的文件描述符超过这个限制时,获取文件描述符的系统调用都会返回失败。linux下最大文件描述符的限制有两个方面,一个是用户级的限制,另外一个则是系统级限制。
用户级限制:ulimit命令看到的是用户级的最大文件描述符限制,也就是说每一个用户登录后执行的程序占用文件描述符的总数不能超过这个限制。
系统级限制:sysctl命令和proc文件系统中查看到的数值是一样的,这属于系统级限制,它是限制所有用户打开文件描述符的总和。
内存锁定限制
内存交换对节点的性能和稳定性非常不利,应该避免。需要让启动Elasticsearch时锁定内存,因此需要放开启动用户(如elasticsearch)锁定内存的限制,有以下两种方式:
# 临时修改,启动Elasticsearch前执行
ulimit -l unlimited
# 永久修改,放开用户elasticsearch锁定内存限制
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
虚拟内存映射最大数量
默认情况下,Elasticsearch使用mmapfs目录来存储其索引。mmap计数的默认操作系统限制太低,这会导致内存不足异常。需要在root用户下运行下面的命令来放开限制,以便有足够的虚拟内存可用于mmapped文件:
# 临时修改,root用户下执行
sysctl -w vm.max_map_count=2621