欢迎访问shiker.tech

请允许在我们的网站上展示广告

您似乎使用了广告拦截器,请关闭广告拦截器。我们的网站依靠广告获取资金。

【译文】ES安装配置之软件配置篇
(last modified Jun 29, 2023, 7:40 PM )
by
侧边栏壁纸
  • 累计撰写 176 篇文章
  • 累计创建 61 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

【译文】ES安装配置之软件配置篇

橙序员
2023-06-29 / 0 评论 / 0 点赞 / 286 阅读 / 5,122 字 / 正在检测百度是否收录... 正在检测必应是否收录...
文章摘要(AI生成)

配置ElasticsearchElasticsearch 具有良好的默认设置,并且需要很少的配置。可以使用集群更新设置API在正在运行的集群上更改大多数设置 。配置文件应包含特定于节点的设置(例如node.name和 路径),或者节点为了能够加入集群而需要的设置,例如cluster.name和net

配置Elasticsearch

Elasticsearch 具有良好的默认设置,并且需要很少的配置。可以使用集群更新设置API在正在运行的集群上更改大多数设置 。

配置文件应包含特定于节点的设置(例如node.name和 路径),或者节点为了能够加入集群而需要的设置,例如cluster.namenetwork.host

配置文件位置

Elasticsearch 有三个配置文件:

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

这些文件位于 config 目录中,其默认位置取决于安装是来自存档发行版 (tar.gzzip) 还是软件包发行版(Debian 或 RPM 软件包)。

对于存档发行版,配置目录位置默认为 $ES_HOME/config. config 目录的位置可以通过 ES_PATH_CONF环境变量更改,如下所示:

ES_PATH_CONF=/path/to/my/config ./bin/elasticsearch

或者,您可以通过命令行export或 shell 配置文件来设置环境变量ES_PATH_CONF

对于包发行版,配置目录位置默认为 /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

在 YAML 中,您可以将非标量值格式化为序列:

discovery.seed_hosts:
   - 192.168.1.10:9300
   - 192.168.1.11
   - seeds.mydomain.com  

虽然不太常见,但您也可以将非标量值格式化为数组:

discovery.seed_hosts: ["192.168.1.10:9300", "192.168.1.11", "seeds.mydomain.com"]

环境变量替换

配置文件中使用${...}符号引用的环境变量将替换为环境变量的值。例如:

node.name:    ${HOSTNAME}
network.host: ${ES_NETWORK_HOST}

环境变量的值必须是简单字符串。使用逗号分隔的字符串提供 Elasticsearch 将解析为列表的值。例如,Elasticsearch 会将以下字符串拆分为${HOSTNAME}环境变量的值列表:

export HOSTNAME="host1,host2"

集群和节点设置类型

集群和节点设置可以根据配置方式进行分类:

  • 动态的

    您可以使用集群更新设置 API在正在运行的集群上配置和更新动态设置 。您还可以使用 在未启动或关闭的节点上本地配置动态设置elasticsearch.yml。使用集群更新设置 API 进行的更新可以是持久的(在集群重新启动时应用),也可以是暂时的(在集群重新启动后重置)。您还可以null使用 API 为临时或持久设置分配值来重置它们。如果您使用多种方法配置相同的设置,Elasticsearch 将按以下优先顺序应用设置:瞬态设置持续设置elasticsearch.yml环境默认设定值例如,您可以应用瞬态设置来覆盖持久设置或elasticsearch.yml设置。但是,对设置的更改elasticsearch.yml 不会覆盖已定义的瞬态或持久设置。如果您使用 Elasticsearch Service,请使用用户设置 功能来配置所有集群设置。此方法可让 Elasticsearch Service 自动拒绝可能破坏集群的不安全设置。如果您在自己的硬件上运行 Elasticsearch,请使用 集群更新设置 API 来配置动态集群设置。仅用于elasticsearch.yml静态集群设置和节点设置。该 API 不需要重新启动并确保所有节点上的设置值相同。我们不再建议使用临时集群设置。请改用持久集群设置。如果集群变得不稳定,瞬态设置可能会意外清除,从而导致可能出现不需要的集群配置。请参阅瞬态设置迁移指南

  • 静止的

    静态设置只能在未启动或关闭的节点上使用 进行配置 elasticsearch.yml。必须在集群中的每个相关节点上设置静态设置。

ES的重要配置

我们的Elastic Cloud服务会自动配置这些项目,默认情况下您的集群已做好生产准备。

路径设置

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

对于macOS.tar.gzLinux.tar.gzWindows.zip安装,默认情况下datalogs是 的子目录。$ES_HOME但是,$ES_HOME升级过程中文件有被删除的风险。

在生产中,我们强烈建议您将path.datapath.logs设置 elasticsearch.yml为 之外的位置$ES_HOMEDockerDebianRPM安装将数据和日志写入$ES_HOME默认位置之外的位置。

支持的值path.datapath.logs值因平台而异,Linux 和 macOS 安装配置如下:

path:
  data: /var/data/elasticsearch
  logs: /var/log/elasticsearch

不要修改数据目录中的任何内容或运行可能干扰其内容的进程。如果 Elasticsearch 以外的其他内容修改了数据目录的内容,则 Elasticsearch 可能会失败,报告损坏或其他数据不一致,或者可能看似正常工作但悄悄丢失了一些数据。不要尝试对数据目录进行文件系统备份;不支持恢复此类备份的方法。相反,请使用 快照和恢复来安全地进行备份。不要在数据目录上运行病毒扫描程序。病毒扫描程序可能会阻止 Elasticsearch 正常工作,并可能修改数据目录的内容。数据目录不包含可执行文件,因此病毒扫描只会发现误报。

多个数据路径

如果需要,您可以在 中指定多个路径path.data。Elasticsearch 在所有提供的路径上存储节点的数据,但将每个分片的数据保留在同一路径上。

Elasticsearch 不会平衡节点数据路径上的分片。单个路径中的高磁盘使用率可能会触发整个节点的高磁盘使用率水印。如果触发,Elasticsearch 不会向该节点添加分片,即使该节点的其他路径有可用磁盘空间。如果您需要额外的磁盘空间,我们建议您添加新节点而不是额外的数据路径。

Linux 和 macOS 支持path.data位置的多个 Unix 样式路径:

path:
  data:
    - /mnt/elasticsearch_1
    - /mnt/elasticsearch_2
    - /mnt/elasticsearch_3    

从多个数据路径迁移

对多个数据路径的支持已在 7.13 中弃用,并将在未来版本中删除。

作为多个数据路径的替代方案,您可以使用硬件虚拟化层(例如 RAID)或软件虚拟化层(例如 Linux 上的逻辑卷管理器 (LVM) 或 Windows 上的存储空间)创建跨多个磁盘的文件系统。如果您希望在一台计算机上使用多个数据路径,则必须为每个数据路径运行一个节点。

如果您当前在 高可用集群中使用多个数据路径,那么您可以迁移到每个节点使用单个路径的设置,而无需停机,使用类似于滚动 重启的过程:依次关闭每个节点并将其替换为一个或多个节点更多节点,每个节点配置为使用单个数据路径。更详细地说,对于当前具有多个数据路径的每个节点,您应该遵循以下过程。原则上,您可以在滚动升级到 8.0 期间执行此迁移,但我们建议在开始升级之前迁移到单数据路径设置。

  1. 拍摄快照以在发生灾难时保护您的数据。

  2. (可选)使用分配过滤器将数据从目标节点迁移 :

    PUT _cluster/settings
    {
      "persistent": {
        "cluster.routing.allocation.exclude._name": "target-node-name"
      }
    }
    

    您可以使用cat 分配 API来跟踪此数据迁移的进度。如果某些分片没有迁移,那么集群分配解释 API将帮助您确定原因。

  3. 按照滚动重新启动过程 中的步骤进行操作,直至关闭目标节点(包括关闭目标节点)。

  4. 确保您的集群运行状况为yellowgreen,以便将每个分片的副本分配给集群中至少一个其他节点。

  5. 如果适用,请删除先前步骤中应用的分配过滤器。

    PUT _cluster/settings
    {
      "persistent": {
        "cluster.routing.allocation.exclude._name": null
      }
    }
    
  6. 通过删除其数据路径的内容来丢弃已停止节点所保存的数据。

  7. 重新配置您的存储。例如,使用 LVM 或存储空间将磁盘组合成单个文件系统。确保重新配置的存储有足够的空间来容纳它将保存的数据。

  8. 通过调整节点文件path.data中的设置 来重新配置节点elasticsearch.yml。如果需要,请安装更多节点,每个节点都有自己的 path.data设置指向单独的数据路径。

  9. 启动新节点并执行其余节点的滚动重新启动过程。

  10. 确保您的集群运行状况为green,以便每个分片都已分配。

您也可以向集群添加一定数量的单数据路径节点,使用分配过滤器将所有数据迁移到这些新节点,然后从集群中删除旧节点。这种方法会暂时将集群的大小增加一倍,因此只有当您有能力像这样扩展集群时它才有效。

如果您当前使用多个数据路径,但集群的可用性不高,那么您可以通过拍摄快照、使用所需配置创建新集群并将快照恢复到其中来迁移到未弃用的配置。

集群名称设置

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]。这足以在一台服务器上运行一个或多个节点的集群来进行开发和测试,但 ES生产集群必须涉及其他服务器上的节点。有很多网络设置,但通常您需要配置的是network.host

network.host: 192.168.1.10

当您为network.host提供值时,Elasticsearch 假定您正在从开发模式转向生产模式,并将许多系统启动检查从警告升级为异常。查看开发和生产模式之间的差异 。

集群发现和形成设置

在投入生产之前配置两个重要的集群发现和形成设置,以便集群中的节点可以相互发现并选举主节点。

discovery.seed_hosts

开箱即用,无需任何网络配置,Elasticsearch 将绑定到可用的环回地址并扫描本地端口93009305连接同一服务器上运行的其他节点。此行为提供自动集群体验,无需进行任何配置。

当您想要与其他主机上的节点形成集群时,请使用 静态 discovery.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 

注意

该端口是可选的,默认为9300,但可以被覆盖
如果主机名解析为多个 IP 地址,则该节点将尝试在所有已解析地址上发现其他节点。
IPv6 地址必须括在方括号内。

如果符合主节点资格的节点没有固定名称或地址,请使用替代主机提供商动态查找其地址。

cluster.initial_master_nodes

当您第一次启动 Elasticsearch 集群时, 集群引导步骤会确定在第一次选举中计票的符合主节点资格的节点集。在开发模式下,如果没有配置发现设置,此步骤将由节点本身自动执行。

由于自动引导本质上是不安全的,因此在生产模式下启动新集群时,您必须明确列出符合主节点资格的节点,这些节点的选票应在第一次选举中计入。您可以使用设置来设置此列表 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,默认为其主机名。确保中的值 完全cluster.initial_master_nodes匹配node.name。如果您使用完全限定域名 (FQDN)(例如master-node-a.example.com节点名称),则必须使用此列表中的 FQDN。相反,如果node.name 是没有任何尾随限定符的裸主机名,则还必须省略 中的尾随限定符cluster.initial_master_nodes

请参阅引导集群以及 发现和集群形成设置

堆大小设置

默认情况下,Elasticsearch 根据节点的 角色和总内存自动设置 JVM 堆大小。我们建议大多数生产环境使用默认大小。

如果需要,您可以通过手动设置 JVM 堆大小来覆盖默认大小 。

JVM堆转储路径设置

默认情况下,Elasticsearch 将 JVM 配置为将内存不足异常时的堆转储到默认数据目录。在RPMDebian软件包上,数据目录是/var/lib/elasticsearch. 在 Linux、MacOSWindows发行版上,该data目录位于 Elasticsearch 安装的根目录下。

如果此路径不适合接收堆转储,请修改jvm.options-XX:HeapDumpPath=...选项:

  • 如果指定目录,JVM 将根据运行实例的 PID 为堆转储生成文件名。
  • 如果指定固定文件名而不是目录,则当 JVM 需要对内存不足异常执行堆转储时,该文件不能存在。否则,堆转储将会失败。

GC 日志记录设置

默认情况下,Elasticsearch 启用垃圾收集 (GC) 日志。这些配置 jvm.options并输出到与 Elasticsearch 日志相同的默认位置。默认配置每 64 MB 轮换一次日志,最多可消耗 2 GB 磁盘空间。

您可以使用JEP 158:统一的JVM 日志记录 中描述的命令行选项重新配置 JVM 日志记录。除非您直接更改默认jvm.options文件,否则除了您自己的设置之外,还会应用 Elasticsearch 默认配置。要禁用默认配置,请首先通过提供选项来禁用日志记录 -Xlog:disable,然后提供您自己的命令行选项。这会禁用所有JVM 日志记录,因此请务必查看可用选项并启用您需要的所有内容。

要查看原始 JEP 中未包含的更多选项,请参阅 使用 JVM 统一日志记录框架启用日志记录

例子

通过使用一些示例选项/opt/my-app/gc.log创建,将默认 GC 日志输出位置更改为:$ES_HOME/config/jvm.options.d/gc.options

# 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,level,pid,tags:filecount=32,filesize=64m

配置 Elasticsearch Docker 容器以将 GC 调试日志发送到标准错误 ( stderr)。这让容器编排器可以处理输出。如果使用ES_JAVA_OPTS环境变量,请指定:

MY_OPTS="-Xlog:disable -Xlog:all=warning:stderr:utctime,level,tags -Xlog:gc=debug:stderr:utctime"
docker run -e ES_JAVA_OPTS="$MY_OPTS" # etc

临时目录设置

默认情况下,Elasticsearch 使用启动脚本在系统临时目录下立即创建的私有临时目录。

在某些 Linux 发行版上,系统实用程序将清除/tmp最近未访问过的文件和目录。如果长时间不使用需要临时目录的功能,此行为可能会导致 Elasticsearch 运行时私有临时目录被删除。如果随后使用需要此目录的功能,则删除私有临时目录会导致问题。

如果您使用.deb.rpm软件包安装 Elasticsearch 并在 下运行它systemd,Elasticsearch 使用的私有临时目录将被排除在定期清理之外。

如果您打算.tar.gz在 Linux 或 MacOS 上运行该发行版较长时间,请考虑为 Elasticsearch 创建一个专用的临时目录,该目录不在会清除旧文件和目录的路径下。该目录应设置权限,以便只有运行 Elasticsearch 的用户才能访问它。然后, $ES_TMPDIR在启动 Elasticsearch 之前将环境变量设置为指向该目录。

JVM致命错误日志设置

默认情况下,Elasticsearch 将 JVM 配置为将致命错误日志写入默认日志记录目录。在RPMDebian软件包上,此目录是/var/log/elasticsearch. 在Linux、MacOSWindows发行版上,该logs 目录位于 Elasticsearch 安装的根目录下。

这些是 JVM 在遇到致命错误(例如分段错误)时生成的日志。如果该路径不适合接收日志,请修改-XX:ErrorFile=...中的条目jvm.options

集群备份

在灾难中,快照可以防止永久性数据丢失。 快照生命周期管理是定期备份集群的最简单方法。有关更多信息,请参阅创建快照

0

评论区