1.配置ElasticSearch
配置文件位置
Elasticsearch具有三个配置文件:
elasticsearch.yml
用于配置Elasticsearchjvm.options
用于配置Elasticsearch JVM设置log4j2.properties
用于配置Elasticsearch日志记录
这些文件位于config目录中,其默认位置取决于安装是来自压缩包发行版(tar.gz
或 zip
)还是软件包发行版(Debian或RPM软件包)。
对于tar.gz或者zip,配置目录位置默认为 $ES_HOME/config
。可以通过ES_PATH_CONF
环境变量来更改config目录的位置, 如下所示:
ES_PATH_CONF=/path/to/my/config ./bin/elasticsearch
或者,您可以通过Shell命令export来配置
ES_PATH_CONF
环境变量。
对于软件包分发,config目录位置默认为 /etc/elasticsearch
。config目录的位置也可以通过ES_PATH_CONF
环境变量来更改,但是请注意,在您的shell中进行设置是不够的。而是,此变量来自 /etc/default/elasticsearch
(对于Debian软件包)和 /etc/sysconfig/elasticsearch
(对于RPM软件包)。您将需要相应地ES_PATH_CONF=/etc/elasticsearch
在这些文件之一中编辑 条目,以更改配置目录位置。
配置文件格式
配置格式为YAML。这是更改数据和日志目录的路径的示例:
path:
data: /var/lib/elasticsearch
logs: /var/log/elasticsearch
也可以按照以下方式设置:
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
环境变量替换
在配置文件中用${...}
符号引用的环境变量将替换为环境变量的值,例如:
node.name: ${HOSTNAME}
network.host: ${ES_NETWORK_HOST}
2.设置JVM选项
您几乎不需要更改JVM选项。如果这样做,最有可能是更改堆大小。本文档的其余部分详细说明了如何设置JVM选项。您可以使用jvm.options
文件或ES_JAVA_OPTS
环境变量来设置选项。
设置JVM选项(包括系统属性和JVM标志)的首选方法是通过jvm.options
配置文件。该文件的默认位置是config/jvm.options
(从tar或zip发行版/etc/elasticsearch/jvm.options
安装时)和(从Debian或RPM软件包安装时)。
该文件包含遵循特殊语法的以行分隔的JVM参数列表:
- 仅由空格组成的行将被忽略
-
以开头的行
#
被视为注释,并被忽略 -
以一个-开头的被视为独立于JVM版本而应用的JVM选项
- Xmx2g
-
以数字开头,
:
后接一个-被视为仅在JVM版本与该数字匹配时才适用的JVM选项8:-Xmx2g
-
以数字开头,
-
后接:-被视为JVM选项,仅在JVM版本大于或等于该数字时才适用8-:-Xmx2g
-
以数字开头,
-
后接数字,后跟一个:-
被视为JVM选项,仅当JVM版本在两个数字范围内时才适用8-9:-Xmx2g
-
其他所有形式均被拒绝
您可以将自定义JVM标志添加到此文件,然后将此配置签入版本控制系统。
设置Java虚拟机选项的另一种机制是通过 ES_JAVA_OPTS
环境变量。例如:
export ES_JAVA_OPTS="$ES_JAVA_OPTS -Djava.io.tmpdir=/path/to/temp/dir"
./bin/elasticsearch
使用RPM或Debian软件包时,ES_JAVA_OPTS
可以在系统配置文件中指定 。
JVM具有用于观察JAVA_TOOL_OPTIONS
环境变量的内置机制。我们有意在打包脚本中忽略此环境变量。这样做的主要原因是,在某些操作系统(例如Ubuntu)上,默认情况下通过此环境变量安装了代理,我们不希望它们干扰Elasticsearch。
此外,其他一些Java程序也支持JAVA_OPTS
环境变量。这不是 JVM内置的机制,而是生态系统中的约定。但是,我们不支持此环境变量,而是通过上述jvm.options
文件或环境变量来支持设置JVM选项ES_JAVA_OPTS
。
3.安全设置
某些设置是敏感的,仅依靠文件系统权限来保护其值是不够的。对于此用例,Elasticsearch提供了密钥库和用于管理密钥库中设置的elasticsearch-keystore
工具。
仅在重新启动Elasticsearch之后,对密钥库的所有修改才会生效。
这些设置与elasticsearch.yml
配置文件中的常规设置一样,需要在集群的每个节点上指定。当前,所有安全设置都是特定于节点的设置,在每个节点上必须具有相同的值。
可重新加载的安全设置
就像设置elasticsearch.yml一样,对密钥库内容的更改不会自动应用于正在运行的Elasticsearch节点。修改完成之后需要重新启动节点。但是,某些安全设置被标记为 可重载。可以重新读取此类设置并将其应用到正在运行的节点上。
所有安全设置(可重新加载或不可重新加载)的值在所有群集节点上必须相同。进行所需的安全设置更改后,使用以下bin/elasticsearch-keystore add
命令,调用:
POST _nodes/reload_secure_settings
该API在每个群集节点上解密并重新读取整个密钥库,但仅应用于可重载的安全设置。直到下一次重新启动,对其他设置的更改才会生效。调用返回后,重新加载已完成,这意味着依赖于这些设置的所有内部数据结构均已更改。从头开始,所有设置看起来都应该具有新值。
更改多个可重新加载的安全设置时,请在每个群集节点上修改所有这些设置,然后发出reload_secure_settings
呼叫,而不是在每次修改后重新加载。
4.记录配置
Elasticsearch使用Log4j 2进行日志记录。可以使用log4j2.properties文件配置Log4j 2。Elasticsearch公开三个属性${sys:es.logs.base_path}
, ${sys:es.logs.cluster_name}
以及${sys:es.logs.node_name}
可以在配置文件中引用,以确定日志文件的位置。该属性${sys:es.logs.base_path}
将解析为日志目录, ${sys:es.logs.cluster_name}
将解析为群集名称(在默认配置中用作日志文件名的前缀), ${sys:es.logs.node_name}
并将解析为节点名称(如果显式设置了节点名称)。
例如,如果你的日志目录(path.logs
)是/var/log/elasticsearch
和您的群集名为production
然后${sys:es.logs.base_path}
将解析/var/log/elasticsearch
和 ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}.log
将解析/var/log/elasticsearch/production.log
。