文章目录
配置ElasticSearch
重要的ElasticSearch配置
Elasticsearch 只需很少的配置即可开始使用,但在生产中使用集群之前必须考虑许多事项:
- 路径设置
- 集群名称设置
- 节点名称设置
- 网络主机设置
- 发现设置
- 堆大小设置
- JVM 堆转储路径设置
- GC 日志设置
- 临时目录设置
- JVM致命错误日志设置
- 集群备份
路径设置
Elasticsearch 将您索引的数据写入索引并将数据流写入数据目录。 Elasticsearch 将自己的应用程序日志写入日志目录,其中包含有关集群运行状况和操作信息。
对于 macOS .tar.gz、Linux .tar.gz
和 Windows .zip
安装,数据和日志默认是 $ES_HOME
的子目录。但是,$ES_HOME
中的文件在升级过程中有被删除的风险。
在生产中,我们强烈建议您将 elasticsearch.yml
中的 path.data
和 path.logs
设置为 $ES_HOME
之外的位置。默认情况下,Docker、Debian、RPM、macOS Homebrew
和 Windows .msi
安装将数据和日志写入 $ES_HOME
之外的位置。
支持的 path.data
和 path.logs
值因平台而异:
Linux
和 macOS
安装支持 Unix
风格的路径:
path:
data: /var/data/elasticsearch
logs: /var/log/elasticsearch
集群名字设置
只有当一个节点与集群中的所有其他节点共享cluster.name
时,它才能加入集群。默认名称是elasticsearch,但是您应该将其更改为描述集群用途的适当名称。
cluster.name: logging-prod
节点设置
Elasticsearch
使用node.name
作为Elasticsearch
特定实例的可读标识符。此名称包含在许多API的响应中。节点名称默认为Elasticsearch
启动时机器的主机名,但可以在elasticsearch.yml中
显式配置:
node.name: prod-data-2
网络设置
默认情况下,Elasticsearch
只绑定到127.0.0.1
和[::1]
等环回地址。对于在单个服务器上运行一个或多个节点的集群进行开发和测试来说,这已经足够了,但是一个有弹性的生产集群必须涉及其他服务器上的节点。有许多网络设置,但通常你需要配置的是network.host
:
network.host: 192.168.1.10
发现和集群形成设置
在进入生产之前配置两个重要的发现和集群形成设置,以便集群中的节点可以相互发现并选举一个主节点。
discovery.seed_hosts
开箱即用,无需任何网络配置,Elasticsearch
将绑定到可用的环回地址并扫描本地端口 9300
到 9305
以连接运行在同一服务器上的其他节点。这种行为提供了一种自动集群体验,而无需进行任何配置。
当需要与其他主机上的节点组成集群时,可以使用静态发现。seed_hosts
设置。此设置提供集群中符合主节点条件的、可能是活动的和可联系的其他节点的列表,以便为发现过程提供依据。此设置接受集群中所有符合主条件的节点的地址的YAML
序列或数组。每个地址可以是一个IP地址,也可以是通过DNS
解析为一个或多个IP
地址的主机名。
discovery.seed_hosts:
- 192.168.1.10:9300
- 192.168.1.11
- seeds.mydomain.com
- [0:0:0:0:0:ffff:c0a8:10c]:9301
cluster.initial_master_nodes
当你第一次启动集群的时候,集群引导步骤将确定有资格参与选举计票的主节点集合。在开发模式下,未配置发现设置,此步骤由节点本身自动执行。
由于自动引导本质上是不安全的,因此在生产模式下启动新集群时,您必须明确列出应在第一次选举中参与选票的主节点。您可以使用 cluster.initial_master_nodes
选项来设置此列表。
注意:第一次成功形成集群后,从每个节点的配置中删除 cluster.initial_master_nodes
设置。重新启动集群或向现有集群添加新节点时,请勿使用此设置。
discovery.seed_hosts:
- 192.168.1.10:9300
- 192.168.1.11
- seeds.mydomain.com
- [0:0:0:0:0:ffff:c0a8:10c]:9301
cluster.initial_master_nodes:
- master-node-a
- master-node-b
- master-node-c
通过node.name
(默认为主机名)标识初始主节点。确保initial_master_nodes
节点中的值与node.name
完全匹配。如果节点名称使用完全限定域名,如master-node-a.example.com
,则必须使用此列表中的完全限定域。相反,如果node.name
是没有任何尾随限定符的裸主机名,则还必须省略initial_master_nodes
节点中的尾随限定符。
堆大小设置
默认情况下,Elasticsearch
会根据节点的角色和总内存自动设置 JVM
堆大小。我们建议为大多数生产环境使用默认大小。
如果需要,您可以通过手动设置 JVM 堆大小来覆盖默认大小。具体设置请参阅setting the JVM heap size
JVM堆转储路径设置
默认情况下,Elasticsearch 将 JVM 配置为将内存不足异常时的堆转储到默认数据目录。在RPM
和Debian
包中,data
目录为/var/lib/elasticsearch
。在Linux、MacOS
和Windows
发行版中,数据目录位于Elasticsearch
安装的root
目录下。
如果此路径不适合接收堆转储,请修改 jvm.options
中的 -XX:HeapDumpPath=...
选项:
- 如果指定目录,
JVM
将根据正在运行的实例的PID
为堆转储生成文件名。 - 如果指定固定文件名而不是目录,则当
JVM
需要对内存不足异常执行堆转储时,该文件不允许存在。否则,堆转储将失败。
GC 日志设置
默认情况下,Elasticsearch
启用垃圾收集(GC
)日志。这些在jvm.options
中配置,并输出到与Elasticsearch
日志相同的默认位置。默认配置每64MB
滚动一次日志,最多可消耗2GB
的磁盘空间。
你可以根据JEP 158: Unified JVM Logging中的描述使用命令行重新配置JVM
日志。除非你直接更改默认的 jvm.options
文件,否则除了你自己的设置之外,还会应用 Elasticsearch 默认配置。要禁用默认配置,首先通过提供 -Xlog:disable
选项禁用日志记录,然后提供您自己的命令行选项。这将禁用所有 JVM 日志记录,因此请务必查看可用选项并启用您需要的所有内容。
例子:
通过使用一些示例选项创建 $ES_HOME/config/jvm.options.d/gc.options
将GC默认的日志输出路径更改为/opt/my-app/gc.log
。
# Turn off all previous logging configuratons
-Xlog:disable
# Default settings from JEP 158, but with `utctime` instead of `uptime` to match the next line
-Xlog:all=warning:stderr:utctime,level,tags
# Enable GC logging to a custom location with a variety of options
-Xlog:gc*,gc+age=trace,safepoint:file=/opt/my-app/gc.log:utctime,pid,tags:filecount=32,filesize=64m
临时目录设置
默认情况下,Elasticsearch
使用启动脚本在系统临时目录下创建私有临时目录。
在一些Linux
发行版中,如果文件和目录最近没有被访问过,系统实用程序将清理/tmp
中的文件和目录。如果长时间不使用需要临时目录的特性,这种行为会导致在Elasticsearch
运行时删除私有临时目录。如果随后使用了需要此目录的特性,那么删除私有临时目录会导致问题。
如果您使用.deb
或.rpm
包安装Elasticsearch
,并在systemd
下运行它,那么Elasticsearch
使用的私有临时目录将被排除在定期清理之外。
如果您打算在Linux
或MacOS
上长时间运行.tar.gz
发行版,请考虑为Elasticsearch创建一个专用的临时目录,而不是在将旧文件和目录放在/tmp
下。这个目录应该设置权限,以便只有Elasticsearch
运行的用户可以访问它。然后,在启动Elasticsearch
之前,设置$ES_TMPDIR
环境变量指向该目录。
JVM 致命错误日志设置
默认情况下,Elasticsearch
将JVM配置为将致命错误日志写入默认日志目录。在RPM和Debian包中,这个目录是/var/log/elasticsearch
。在Linux、MacOS
和Windows
发行版中,logs
目录位于Elasticsearch
安装的根目录下。这些日志是JVM
遇到致命错误(例如分段错误)时产生的日志。如果此路径不适合接收日志,则修改jvm.options文件中的-XX:ErrorFile=…
选项。
集群备份
在灾难中,快照可以防止数据永久丢失。快照生命周期管理是对集群进行定期备份的最简单方法。有关详细信息,请参见备份集群。
备份群集的唯一可靠且受支持的方法是拍摄快照。无法通过复制Elasticsearch群集节点的数据目录来备份该群集。不支持文件系统级备份还原任何数据。如果您尝试从这样的备份中恢复群集,它可能会失败,并报告损坏或丢失文件或其他数据不一致,或者可能丢失了一些数据。