重要Elasticsearch配置
Last updated
Was this helpful?
Last updated
Was this helpful?
尽管Elasticsearch需要很少的配置,但是在投入生产之前,需要考虑许多设置。
进入生产之前,必须考虑以下设置:
如果您使用.zip
或.tar.gz
存档,则data
和logs
目录是$ES_HOME
的子文件夹。如果这些重要文件夹保留在其默认位置,则在将Elasticsearch升级到新版本时,很有可能将其删除。
在生产中使用时,几乎可以肯定要更改data和log文件夹的位置:
RPM和Debian发行版已经为data
和使用了自定义路径logs
。
该path.data
设置可以被设置为多条路径,在这种情况下,所有的路径将被用于存储数据(虽然属于单个碎片文件将全部存储相同的数据路径上):
当cluster.name
节点与集群中的所有其他节点共享节点时,该节点只能加入集群。默认名称为elasticsearch
,但您应将其更改为描述群集用途的适当名称。
确保不要在不同的环境中重复使用相同的集群名称,否则最终可能会导致节点加入错误的集群。
Elasticsearch node.name
用作Elasticsearch 特定实例的人类可读标识符,因此它包含在许多API的响应中。它默认为计算机在Elasticsearch启动时具有的主机名,但可以elasticsearch.yml
按以下方式显式配置 :
默认情况下,Elasticsearch仅绑定到环回地址(例如127.0.0.1
和)[::1]
。这足以在服务器上运行单个开发节点。
实际上,可以从
$ES_HOME
单个节点上的相同位置启动多个节点。这对于测试Elasticsearch形成集群的能力很有用,但不是建议用于生产的配置。
在投入生产之前,应该配置两个重要的发现和集群形成设置,以便集群中的节点可以彼此发现并选举一个主节点。
开箱即用,无需任何网络配置,Elasticsearch将绑定到可用的环回地址,并将扫描本地端口9300至9305,以尝试连接到同一服务器上运行的其他节点。这无需任何配置即可提供自动群集体验。
如果主机名解析为多个IP地址,则该节点将尝试在所有解析的地址处发现其他节点。
IPv6地址必须放在方括号中。
默认情况下,Elasticsearch告诉JVM使用最小和最大大小为1 GB的堆。在进入生产阶段时,配置堆大小以确保Elasticsearch有足够的可用堆非常重要。
这些设置的值取决于服务器上可用的RAM数量:
设置Xmx
和Xms
你的物理内存不超过50%。Elasticsearch出于JVM堆以外的目的需要内存,因此为此留出空间很重要。例如,Elasticsearch使用堆外缓冲区来进行有效的网络通信,依靠操作系统的文件系统缓存来有效地访问文件,并且JVM本身也需要一些内存。观察Elasticsearch过程使用的内存多于该Xmx
设置配置的限制,这是正常的。
组Xmx
和Xms
不超过所述阈值,对压缩对象的指针的JVM用途(压缩糟糕); 确切的阈值有所不同,但接近32 GB。您可以通过在日志中查找如下一行来验证您是否处于阈值以下:
理想地设置Xmx
并Xms
以不超过该阈值对于基于零的压缩糟糕; 确切的阈值有所不同,但是在大多数系统上26 GB是安全的,但是在某些系统上可以达到30 GB。您可以通过使用JVM选项启动Elasticsearch -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode
并查找类似于以下内容的行来验证您是否处于此阈值 以下:
显示启用了从零开始的压缩oop。如果未启用从零开始的压缩oop,那么您将看到类似于以下内容的行:
Elasticsearch可用的堆越多,它可用于其内部缓存的内存就越多,但可供操作系统用于文件系统缓存的内存就越少。同样,较大的堆可能导致较长的垃圾回收暂停。
这是如何通过jvm.options.d/
文件设置堆大小的示例:
也可以通过环境变量设置堆大小。可以通过以下方法设置这些值ES_JAVA_OPTS
:
通过创建$ES_HOME/config/jvm.options.d/gc.options
一些示例选项,将默认GC日志输出位置更改为/opt/my-app/gc.log
:
为了与其他服务器上的节点形成集群,您的节点将需要绑定到非环回地址。尽管很多 ,通常您需要配置的是 network.host
:
该network.host
设置也了解一些特殊的值,比如 _local_
,_site_
,_global_
和喜欢修饰:ip4
和:ip6
,其中的细节中可以找到。
一旦为提供了自定义设置network.host
,Elasticsearch就会假设您正在从开发模式转换为生产模式,并将许多系统启动检查从警告升级为异常。有关更多信息,请参见。
如果要与其他主机上的节点组成集群,则应使用此discovery.seed_hosts
设置提供集群中其他主机 的列表,这些主机符合主机要求并且可能处于活动状态且可联系,以便为提供种子。此设置应该是群集中所有符合主机资格的节点的地址的列表。每个地址可以是IP地址,也可以是通过DNS解析为一个或多个IP地址的主机名。
如果符合主机资格的节点没有固定的名称或地址,请使用 动态查找其地址。
首次启动全新的Elasticsearch群集时,会出现一个步骤,该步骤确定了在第一次选举中便对其票数进行计数的主资格节点的集合。在(未配置发现设置),此步骤由节点自己自动执行。由于这种自动引导从是,因此在启动全新群集时,必须明确列出符合资格的主机节点,并在第一次选举中对其选票进行计数。使用设置来cluster.initial_master_nodes
设置此列表 。重新启动集群或将新节点添加到现有集群时,不应使用此设置。
端口是可选的,通常默认为9300
,但是某些设置可以此默认值。
初始主节点应通过其标识 ,默认为其主机名。确保中的值完全cluster.initial_master_nodes
匹配node.name
。如果您使用完全限定的域名(例如,将其 master-node-a.example.com
用作节点名称),则必须在此列表中使用完全限定的名称。相反,如果node.name
是裸机主机名而没有任何尾随限定符,则还必须省略中的尾随限定符cluster.initial_master_nodes
。
有关更多信息,请参阅以及 。
Elasticsearch将通过(最小堆大小)和(最大堆大小)设置分配指定的整个堆 。您应该将这两个设置设置为彼此相等。Xms
Xmx
的堆配置与上述不同。可以为Windows服务初始填充的值可以如上所述配置,但在安装服务后会有所不同。有关其他详细信息,请查阅。
默认情况下,Elasticsearch配置JVM在内存不足或异常的时候dump到默认数据目录中(这是 /var/lib/elasticsearch
为和的包分布,并且data
所述Elasticsearch安装在根目录下的和归档文件发行) 。如果这个路径是不适合接受堆转储,您应该修改的条目-XX:HeapDumpPath=...
在 。如果指定目录,那么JVM将基于正在运行的实例的PID为堆转储生成文件名。如果指定固定文件名而不是目录,则当JVM需要在内存不足异常时执行堆转储时,该文件必须不存在,否则堆转储将失败。
默认情况下,Elasticsearch启用GC日志。它们在Elasticsearch日志中配置 并输出到相同的默认位置。默认配置每64 MB轮换一次日志,最多可消耗2 GB磁盘空间。
您可以使用描述的命令行选项来重新配置JVM日志 。除非您jvm.options
直接更改默认文件,否则除了您自己的设置外,还将应用Elasticsearch默认配置。要禁用默认配置,请首先通过提供-Xlog:disable
选项来禁用日志记录 ,然后提供您自己的命令行选项。这将禁用所有 JVM日志记录,因此请确保检查可用选项并启用所需的所有功能。
要查看原始JEP中未包含的其他选项,请参阅 。
配置Elasticsearch 以将GC调试日志发送到标准错误(stderr
)。这使容器协调器可以处理输出。如果使用ES_JAVA_OPTS
环境变量,请指定: