重要的 Elasticsearch 配置

虽然 Elasticsearch 需要很少的配置,但在投入生产之前需要考虑许多设置。

在投入生产之前,必须考虑以下设置:

path.datapath.logs

如果使用.zip.tar.gz包,则datalogs 目录是$ES_HOME. 如果这些重要文件夹保留在其默认位置,则在将 Elasticsearch 升级到新版本时它们被删除的风险很高。

在生产使用中,常规都会更改数据和日志文件夹的位置:

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

RPM 和 Debian 发行版已经为datalogs使用自定义路径。

这些path.data设置可以设置为多个路径,在这种情况下,所有路径都将用于存储数据(属于单个分片的文件都将存储在同一数据路径上):

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

cluster.name

一个节点只有cluster.name在与集群中的所有其他节点共享时才能加入集群。默认名称是elasticsearch,应该将其更改为描述集群用途的适当名称。

cluster.name: logging-prod

确保不要在不同环境中重复使用相同的集群名称,否则最终可能会有节点加入错误的集群。

node.name 

Elasticsearch中node.name用作特定 Elasticsearch 实例的可读标识符,因此它出现在许多 API 的响应中。它默认为 Elasticsearch 启动时机器拥有的主机名,但可以在elasticsearch.yml按如下方式显式配置 :

node.name: prod-data-2

network.host

默认情况下,Elasticsearch 仅绑定到环回地址——例如127.0.0.1 和[::1]。这足以在服务器上运行单个开发节点。

TIPS

实际上,可以从$ES_HOME 单个节点上的同一位置启动多个节点。这对于测试 Elasticsearch 形成集群的能力很有用,但生产不推荐这种方式。

为了与其他服务器上的节点形成集群,节点需要绑定到非环回地址。虽然有许多 网络设置,但通常您只需要配置 network.host: 

network.host: 192.168.1.10

network.host设置也支持一些特殊的值,比如 _local__site__global_和修饰:ip4:ip6,细节中可以在network.host中找到。

重要

一旦为 network.host提供自定义设置,Elasticsearch 就会假定正在从开发模式转移到生产模式,并将许多系统启动检查从警告升级为异常。有关更多信息,请参阅开发模式与生产模式

重要的发现和集群形成设置 

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

discovery.seed_hosts

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

当想与其他主机上的节点形成一个集群时,使用该 discovery.seed_hosts设置来提供集群中其他节点的列表,这些节点是符合主节点的并且可能处于活动状态且可通信的,以便为发现过程提供种子。此设置应该是集群中所有符合主节点条件的节点的地址列表。每个地址可以是 IP 地址或主机名,通过 DNS 解析为一个或多个 IP 地址。

如果符合主节点的节点没有固定的名称或地址,请使用 替代主机提供程序来动态查找它们的地址。

cluster.initial_master_nodes

当你第一次启动一个全新的 Elasticsearch 集群时,有一个集群引导步骤,它决定了在第一次选举中投票的主合格节点集。在开发模式下,没有配置发现设置,这一步由节点自己自动执行。由于这种自动引导本质上是不安全的,当在生产模式下启动一个全新的集群时,必须明确列出在第一次选举中应计算其选票的合格主节点。该列表是使用 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
  • 端口是可选的,通常默认为9300,但此默认值可以某些设置覆盖
  • 如果主机名解析为多个 IP 地址,则该节点将尝试在所有解析地址处发现其他节点。
  • IPv6 地址必须用方括号括起来。
  • 初始主节点应由它们的node.name标识 ,默认为它们的主机名。确保中cluster.initial_master_nodes的值完全匹配node.name。如果使用完全限定域名,例如 master-node-a.example.com作为节点名称,那么列表中也必须使用此完全限定名称;相反,如果node.name是一个没有任何尾随限定符的裸主机名,那么cluster.initial_master_nodes还必须省略限定符

有关更多信息,请参阅引导集群和 发现和集群形成设置

设置堆大小

默认情况下,Elasticsearch 告诉 JVM 使用最小和最大大小为 1 GB 的堆。迁移到生产环境时,重要的是配置堆大小以确保 Elasticsearch 有足够的可用堆。

Elasticsearch 通过在jvm.options 中设置Xms(最小堆大小)和Xmx(最大堆大小)分配指定的整个堆 。应该将这两个设置设置为彼此相等。

这些设置的值取决于服务器上可用的 RAM 量:

  • 设置XmxXms不超过物理内存的50%。Elasticsearch 需要内存用于 JVM 堆以外的用途,为此留出空间很重要。例如,Elasticsearch 使用堆外缓冲区来实现高效的网络通信,依靠操作系统的文件系统缓存来高效访问文件,并且 JVM 本身也需要一些内存。所以 Elasticsearch 进程使用的内存超过Xmx设置配置的限制是正常的。
  • 设置XmxXms不超过 JVM 用于压缩对象指针(压缩 oops)的阈值;确切的阈值有所不同,但接近 32 GB。可以通过在日志中查找如下一行来验证当前是否低于阈值:

    heap size [1.9gb], compressed ordinary object pointers [true]
  • 合理地设置XmxXms不超过基于零的oops压缩阈值; 确切的阈值各不相同,但 26 GB 在大多数系统上是安全的,在某些系统上可能高达 30 GB。可以通过使用 JVM 选项启动 Elasticsearch-XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode并查找如下所示的行来验证是否低于此阈值 :

    heap address: 0x000000011be00000, size: 27648 MB, zero based Compressed Oops

    显示启用了基于零的oops压缩 。如果未启用基于零的oops压缩 ,那么将看到如下所示的一行:

    heap address: 0x0000000118400000, size: 28672 MB, Compressed Oops with base: 0x00000001183ff000

Elasticsearch 可用的堆越多,它可用于其内部缓存的内存就越多,但可供操作系统用于文件系统缓存的内存就越少。此外,更大的堆会导致更长的垃圾收集暂停。

以下是如何通过 jvm.options 文件设置堆大小的示例:

-Xms2g 
-Xmx2g 

也可以通过环境变量设置堆大小。在 jvm.options文件中注释掉Xms,Xmx设置,通过ES_JAVA_OPTS设置这些值:

ES_JAVA_OPTS="-Xms2g -Xmx2g" ./bin/elasticsearch 
ES_JAVA_OPTS="-Xms4000m -Xmx4000m" ./bin/elasticsearch 

重要

Windows 服务配置堆与上述不同。最初为 Windows 服务填充的值可以按上述方式配置,但在安装服务后会有所不同。有关其他详细信息,请参阅Windows 服务文档

JVM 堆dump路径 

默认情况下,Elasticsearch 将 JVM 内存不足异常时的堆转储配置到默认数据目录(RPMDebian包发行版为 /var/lib/elasticsearchtarzip存档发行版为 Elasticsearch 安装根目录下的data目录) . 如果默认路径不适合存放堆转储,可在 jvm.options修改条目-XX:HeapDumpPath=...。如果指定目录,JVM 将根据正在运行的实例的 PID 生成堆转储文件名。如果指定固定文件名而不是目录,则当JVM在内存不足异常执行堆转储时,该文件必须不存在,否则堆转储将失败。

GC 日志记录

默认情况下,Elasticsearch 启用 GC 日志。具体配置项在jvm.options配置,输出到与 Elasticsearch 日志相同的默认位置。默认配置每 64 MB 轮换一次日志,最多可消耗 2 GB 的磁盘空间。

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

要查看原始 JEP 中未包含的更多选项,请参阅 使用 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 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 使用的私有临时目录将被排除在定期清理之外。

但是,如果打算在 Linux 上长时间运行.tar.gz发行版,应该考虑为 Elasticsearch 创建一个专用的不会被清理的临时目录。此目录应设置权限,以便只有运行 Elasticsearch 的用户才能访问它。在启动 Elasticsearch 之前通过$ES_TMPDIR环境变量设置为指向该目录。

JVM 致命错误日志

默认情况下,Elasticsearch 将 JVM 配置为将致命错误日志写入默认日志目录(RPMDebian包发行版为 /var/log/elasticsearchtarzip存档发行版为 Elasticsearch 安装根目录下的logs目录)。这些是 JVM 在遇到致命错误(例如,分段错误)时生成的日志。如果该路径不适合于接收的日志,则应修改中 jvm.options中的​​​​​​​-XX:ErrorFile=...条目到备用路径。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值