Elasticsearch7——常用设置 一、配置方式 二、

[这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战]


一、配置方式

Elasticsearch 提供了很好的默认值,并且只需要很少的配置。配置文件应包含特定节点的设置以及集群配置

  • 节点设置:node.namepaths
  • 集群配置:cluster.namenetwork.host

Elasticsearch 有三个配置文件:

  • elasticsearch.yml 用于配置 Elasticsearch
  • jvm.options 用于配置 Elasticsearch JVM 设置
  • log4j2.properties 用于配置 Elasticsearch 日志记录

配置文件位于 config 目录中,其默认位置取决于安装方法。例如,通过docker安装的es配置文件位于/usr/share/elasticsearch/config中。配置文件还支持环境变量替换,如下所示。

1
2
bash复制代码node.name:    ${HOSTNAME}
network.host: ${ES_NETWORK_HOST}

环境变量的值必须是简单的字符串,使用逗号分隔的字符串提供 Elasticsearch 将解析为列表的值。

集群节点分为动态静态两种,动态节点可以在运行时更新且支持临时、持久设置;而静态设置只能在未启动或关闭的节点上使用 elasticsearch.yml

Elasticsearch 会按以下优先顺序应用设置:

  • 临时设置(Transient):临时设置会在第一次全集群重启后被移除
  • 持久化设置(Persistent):可以全集群重启时存活下来
  • elasticsearch.yml文件
  • 默认配置

临时或持久化设置是通过API实现的,具体类型是由字段决定的。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
bash复制代码PUT /_cluster/settings
{
"persistent" : {
"discovery.zen.minimum_master_nodes" : 2
},
"transient" : {
"indices.store.throttle.max_bytes_per_sec" : "50mb"
}
}

{
"acknowledged" : true,
"persistent" : {
"discovery" : {
"zen" : {
"minimum_master_nodes" : "2"
}
}
},
"transient" : { }
}

二、重要的配置

  1. 路径设置

Elasticsearch 将您索引的数据写入索引并将数据流写入data 目录。Elasticsearch 将自己的应用程序日志写入一个logs目录,其中包含有关集群运行状况和操作的信息。例如:

1
2
3
javascript复制代码path:
data: /var/data/elasticsearch
logs: /var/log/elasticsearch

warn:不要修改数据目录中的任何内容或运行可能干扰其内容的进程。如果 Elasticsearch 以外的其他东西修改了数据目录的内容,那么 Elasticsearch 可能会失败,报告损坏或其他数据不一致,或者可能会在默默丢失一些数据的情况下正常工作。不要尝试对数据目录进行文件系统备份;没有支持的方法来恢复这样的备份。相反,使用 snapshot-restore安全地进行备份。不要在数据目录上运行病毒扫描程序。病毒扫描程序可能会阻止 Elasticsearch 正常工作,并且可能会修改数据目录的内容。数据目录不包含可执行文件,因此病毒扫描只会发现误报。

  1. 集群名称设置

当节点的cluster.name配置与集群中的所有其他节点相同时,才能加入集群。默认名称是elasticsearch,不应当在不同的环境中设置相同的集群名称,避免操作失误。

1
arduino复制代码cluster.name: "docker-cluster"
  1. 节点名称设置

节点名称用于描述节点,该名称会返回在许多响应中。

1
arduino复制代码node.name: "es02"
  1. 网络主机设置

默认情况下,Elasticsearch 只绑定到环回地址,例如127.0.0.1[::1];如果设置为环回地址,es为开发模式,不会进行引导检查。非环回地址设置:

1
makefile复制代码network.host: 192.168.1.10
  1. 集群发现设置

Elasticsearch将结合到现有的环回地址和扫描本地端口93009305,与同一台服务器上运行的其他节点连接。此行为提供了一种自动连接集群,而无需进行任何配置。

如果需要连接其它服务器的节点,需要通过discovery.seed_hosts设置其它可发现的节点,地址可以是 ipv4、ipv6以及域名。例如

1
2
3
4
5
ruby复制代码discovery.seed_hosts:
- 192.168.1.10:9300
- 192.168.1.11
- seeds.mydomain.com
- [0:0:0:0:0:ffff:c0a8:10c]:9301

当 Elasticsearch 集群初次启动时, 集群引导会在第一次选举中通过计票选择主节点;可以通过可以使用cluster.initial_master_nodes设置来设置此选举列表。在开发模式下,如果没有配置seed_hosts,这一步由节点自己自动执行。

1
makefile复制代码cluster.initial_master_nodes: es01,es02
  1. 堆大小设置

默认情况下,ES 会根据节点的角色和总内存自动设置 JVM 堆大小,大多数生产环境可以使用默认大小。

要覆盖默认堆大小,请使用Xms设置最小堆和使用Xmx设置最大堆,最小值和最大值必须相同;
设置XmsXmx不超过总内存的 50%;
设置堆大小可以配置jvm.options文件。

docker-compose下修改配置:

1
2
3
makefile复制代码es01:
environment:
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
  1. JVM 堆转储路径设置

默认情况下,Elasticsearch 将 JVM 配置为将内存不足异常时的堆转储到默认数据目录;可以修改jvm.options文件,设置参数-XX:HeapDumpPath

  1. GC 日志设置

默认情况下,ES 会启用垃圾收集 (GC) 日志。ES 日志在jvm.options文件中配置并输出到默认位置。默认配置每 64 MB 轮换一次日志,最多可消耗 2 GB 的磁盘空间。例如:

1
2
3
4
5
6
7
ruby复制代码# 禁用日志
-Xlog:disable

-Xlog:all=warning:stderr:utctime,level,tags

# 配置目录、轮换日志的大小
-Xlog:gc*,gc+age=trace,safepoint:file=/opt/my-app/gc.log:utctime,pid,tags:filecount=32,filesize=64m
  1. 临时目录设置

默认情况下,ES 使用启动脚本在系统临时目录正下方创建的私有临时目录。在某些 Linux 发行版上,系统实用程序会清除/tmp最近未访问过的文件和目录。如果长时间不需要使用临时目录的功能,此行为会导致在 ES 运行时删除私有临时目录。如果随后使用需要此目录的功能,则删除私有临时目录会导致问题。

为了避免异常,需要设置临时目录权限,以便只有运行 Elasticsearch 的用户才能访问它。

  1. JVM致命错误日志设置

默认情况下,Elasticsearch 将 JVM 配置为将致命错误日志写入默认日志目录。可以修改jvm.options文件,设置-XX:ErrorFile修改文件路径。

  1. 集群备份

在灾难中,快照可以防止永久性数据丢失;备份集群的唯一可靠且受支持的方法是拍摄快照,不能通过复制其节点的数据目录来备份 Elasticsearch 集群。

三、参考文章

Important Elasticsearch configuration

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%