配置
环境变量
在脚本中,Elasticsearch有自带的JAVA_OPTS传递给JVM启动。最重要的设置是-Xmx来控制进程中的最大允许存储器,并-Xms以控制进程的最小分配的内存(在一般情况下,内存分配给进程越多越好)。
大多数时候,最好是保留默认设置JAVA_OPTS,并使用ES_JAVA_OPTS以设置/更改JVM设置或参数环境变量。
ES_HEAP_SIZE环境变量允许设置将堆内存分配到elasticsearch java进程。这将分配相同的值都最小值和最大值,尽管这些可以显式设置(不推荐)通过设置ES_MIN_MEM(默认为 256m)和ES_MAX_MEM(默认为1g)。
建议设置的最小和最大存储到相同的值,并启用mlockall。
系统配置
文件描述符
确保增加机器(或为用户运行elasticsearch)上打开的文件的描述符的数目。建议将其设置为32K或64K甚至。
为了测试进程可以打开多少文件,启动-Des.max-open-files设置为true。这将打印打开文件的进程中可以在启动时打开的数量。
或者,你可以检索max_file_descriptors使用每个节点的节点信息的API:
curl localhost:9200/_nodes/stats/process?pretty
虚拟内存
Elasticsearch采用了混合mmapfs / niofs目录默认存储其索引。在MMAP计数的默认操作系统的限制很可能是太低,这可能会导致内存不足异常。在Linux上,你可以增加运行以下命令作为限制根:
sysctl -w vm.max_map_count=262144
要永久设置此值,更新vm.max_map_count在 /etc/sysctl.conf中。
Note 如果您安装Elasticsearch使用的是包(.deb文件,.rpm的)此设定将被自动更改。要验证的话,请运行sysctl的vm.max_map_count。
内存设置
大多数操作系统尝试使用尽可能多的内存尽可能为文件系统缓存,并急切地换出不用的应用程序的内存,并可能导致elasticsearch进程中被切换。切换是对性能和稳定性节点很不好,所以应不惜一切代价避免。
有三个选项:
禁用切换
最简单的方法是完全禁用掉。通常Elasticsearch是一个箱子上运行的唯一服务,而其内存使用情况是由控制ES_HEAP_SIZE环境变量。应该没有必要启用切换。
在Linux系统中,可以通过运行暂时禁用掉sudo swapoff -a。要永久禁用它,你将需要编辑 /etc/fstab 中的文件并注释掉包含所有行互换的单词。
在Windows上,相当于可以完全通过禁用页面文件来实现系统属性→高级→性能→高级→虚拟内存。
配置swappiness
第二种选择是,以确保将sysctl值vm.swappiness设置为0。这减少了内核的切换倾向和不应该导致正常情况下的切换,同时仍然允许整个系统在紧急情况下进行切换。
Note 从内核版本3.5 RC1及以上,一个swappiness的0将导致OOMkiller to kill进程,而不是让切换。您将需要设置swappiness为1仍然允许在紧急情况下切换。
mlockall
第三个选择是使用 mlockall在Linux / Unix系统或VirtualLock在Windows上,要尽量锁定进程地址空间到RAM中,防止任何Elasticsearch内存被换出。这是可以做到,加入这行来配置/ elasticsearch.yml文件:
bootstrap.mlockall: true
启动Elasticsearch后,可以看到此设置是否成功应用通过检查值mlockall用于从这个请求的输出:
curl http://localhost:9200/_nodes/process?pretty
如果你看到mlockall用于是false,那么就意味着mlockall请求失败。最可能的原因,在Linux / Unix系统,是运行Elasticsearch用户没有权限锁定内存。这可以通过运行授予的ulimit -l无限的根在启动Elasticsearch之前。
另一个可能的原因mlockall用于可能失败是临时目录(一般/ tmp目录)安装与noexec选项。这可以通过指定一个新的临时目录来解决,通过启动Elasticsearch:
./bin/elasticsearch -Djna.tmpdir=/path/to/new/dir
Warning mlockall用于可能导致JVM或shell会话退出,如果它试图分配更多的内存比可用的话!
Elasticsearch 设置
elasticsearch配置文件下可以在ES_HOME/config文件夹中找到。该文件夹有两个文件,elasticsearch.yml配置Elasticsearch不同的 模块,logging.yml用于配置Elasticsearch日志。
配置格式是YAML。这里是改变所有基于网络模块用来绑定并发布到该地址的一个例子:
network :
host : 10.0.0.4
路径
在生产中使用,你几乎肯定会希望更改数据路径和日志文件:
path:
logs: /var/log/elasticsearch
data: /var/data/elasticsearch
集群名称
另外,不要忘了给您的生产集群的名称,它是用来发现和自动加入其他节点:
cluster:
name: <NAME OF YOUR CLUSTER>
请确保您不要重复使用在不同的环境相同的群集名称,否则,你可能最终加盟的节点错误的集群。例如,你可以使用logging-dev,logging-stage,logging-prod分别代表,开发,预生产和生产集群。
节点名称
您可能还需要为每个节点更改默认的节点名称为类似显示器的主机名。默认情况下Elasticsearch将随机抽取约3000名的列表中选择一个漫威符号的名称时,您的节点启动。
node:
name: <NAME OF YOUR NODE>
机器的主机名在环境变量提供HOSTNAME。如果你的机器上,你只运行该群集的单个节点elasticsearch,可以使用节点名称设置为主机名$ {...}符号:
node:
name: ${HOSTNAME}
配置格式
在内部,所有的设置都塌陷成“namespaced”的设置。例如,在上述被折叠成node.name。这意味着其容易支持其他配置的格式,例如JSON。如果JSON是首选的配置格式,只需重命名elasticsearch.yml文件elasticsearch.json并添加:
{
"network" : {
"host" : "10.0.0.4"
}
}
这也意味着其容易提供的设置外部要么使用ES_JAVA_OPTS或作为参数传递给elasticsearch 命令,例如:
$ elasticsearch -Des.network.host=10.0.0.4
另一种选择是设置es.default。前缀而非es.。前缀,这意味着仅当在配置文件中没有明确设置默认设置将被使用。
另一种选择是使用$ {...}在配置文件中的符号,将解析为环境设置,例如:
{
"network" : {
"host" : "${ES_NET_HOST}"
}
}
此外,对于你不想在配置文件中存储的设置,您可以使用值$ {} prompt.text或$ {} prompt.secret并在前台启动Elasticsearch。$ {} prompt.secret已禁用回显。这样进入不会在终端显示的值; $ {} prompt.text 将让你看到你如数的值,例如:
node:
name: ${prompt.text}
在执行elasticsearch命令,系统会提示您输入像这样的实际值:
Enter value for [node.name]:
Note 如果Elasticsearch不会启动$ {prompt.text}或$ {prompt.secret} 在设置使用,该进程作为服务运行或在后台运行。
索引设置
在集群中创建索引可以提供自己的设置。例如,下面将创建5秒间隔刷新,而不是默认刷新间隔的刷新时间间隔的索引(该格式可以是YAML或JSON):
$ curl -XPUT http://localhost:9200/kimchy/ -d \
'
index:
refresh_interval: 5s
'
索引级别的设置可以在节点级别设置为好,例如,内elasticsearch.yml文件,下面就可以进行设置:
index :
refresh_interval: 5s
这意味着,每一个被特定节点上创建索引开始与提到的配置将使用5秒的刷新时间间隔,除非指数明确地设置它。换句话说,任何指数级设置将覆盖什么是在节点配置设置。当然,以上也可以被设置为“collapsed”设置,例如:
$ elasticsearch -Des.index.refresh_interval=5s
所有指数级的配置可以在每个内找到索引模块。
日志
Elasticsearch使用内部日志抽象而来,打开来看,其实类似于log4j。它试图通过简化log4j配置YAML配置它,并记录配置文件是config/logging.yml。JSON和properties的格式也支持。多个配置文件可以加载,在这种情况下,他们将得到合并,只要它们开始与记录。前缀和与支持后缀( .yml, .yaml, .json or .properties其中的任意一种)。记录器部分包含java程序包及其相应的日志级别,它是可以省略org.elasticsearch前缀。该附加器部分包含日志的目的地。如何自定义日志记录和所有支持的追加程序可以在log4j文档上找到丰富的信息。
提供的其他附加目的地和其他日志类的log4j,开箱即用。
弃用日志
除了常规的记录,Elasticsearch使您可以启用过时行动的记录。例如,这可以让你提前确定,如果您需要在未来迁移某些功能。默认情况下,弃用日志记录被禁用。您可以启用它在config/logging.yml 通过设置弃用日志级别文件为DEBUG。
deprecation: DEBUG, deprecation_log_file
这将创建一个在你的日志目录每天滚动折旧日志文件。定期检查该文件,尤其是当你打算升级到一个新的主要版本。