Elasticsearch 6.3官方教程翻译系列(2.3):重要的Elasticsearch配置
2.3 重要的Elasticsearch配置
虽然Elasticsearch只需要很少的配置,但在投入生产之前需要考虑许多设置。
在投入生产之前必须考虑以下设置:
2.3.1 path.data和path.logs
如果使用.zip或.tar.gz存档,则data和logs目录是在$ ES_HOME文件夹下。
如果这些重要文件夹保留在其默认位置,那么在将Elasticsearch升级到新版本时,这些文件夹被删除的风险很高。
在生产使用中,您无疑会想要更改数据data和日志logs文件夹的位置:
path:
logs: /var/log/elasticsearch
data: /var/data/elasticsearch
RPM和Debian发行版已经使用数据data和日志logs的自定义路径。
path.data设置可以设置为多个路径,在这种情况下,所有路径将用于存储数据(尽管属于单个分片的文件将全部存储在同一数据路径中):
path:
data:
- /mnt/elasticsearch_1
- /mnt/elasticsearch_2
- /mnt/elasticsearch_3
2.3.2 集群名称cluster.name
节点只能在群集中共享群集名称时才能加入群集。默认名称是elasticsearch,但您应该将其更改为描述集群用途的适当名称。
cluster.name: logging-prod
确保不要在不同的环境中重复使用相同的群集名称,否则可能会导致节点加入错误的群集。
2.3.3 节点名称node.name
默认情况下,Elasticsearch将使用随机生成的UUID的前七个字符作为节点ID。请注意,节点ID是持久的,并且在节点重新启动时不会更改,因此默认节点名称也不会更改。
节点名称值得配置一个更有意义的名字,这个名字在重启节点后也具有持久性的优点:
node.name: prod-data-2
节点名称 node.name也可以设置为服务器的主机名HOSTNAME,如下所示:
node.name: ${HOSTNAME}
2.3.4 网络主机 network.host
默认情况下,Elasticsearch仅绑定到回路地址 - 例如127.0.0.1和[:: 1]。这足以在服务器上运行单个开发节点。
小技巧: 实际上,可以从单个节点上的相同$ ES_HOME位置启动多个节点。
这可以用于测试Elasticsearch形成群集的能力,但它不是推荐用于生产的配置。
为了与其他服务器上的节点进行通信并形成群集,您的节点将需要绑定到非回送地址。虽然有很多网络设置,但通常只需要配置network.host:
network.host: 192.168.1.10
network.host设置还可以接收一些特殊的值,例如local,site,global和修饰符如:ip4和:ip6,其详细信息可以在network.host的特殊值中找到。
重要:只要您为network.host提供自定义设置,Elasticsearch就会假定您正在从开发模式转移到生产模式,并将大量系统启动检查从警告升级到异常。
有关更多信息,请参阅开发模式与生产模式。
2.3.5 发现设置
Elasticsearch使用名为“Zen Discovery”的自定义发现实现进行节点到节点的群集和主选举。
在投入生产之前,应该配置两个重要的发现设置。
discovery.zen.ping.unicast.hosts
开箱即用,没有任何网络配置,Elasticsearch将绑定到可用的环回地址,并将扫描端口9300到9305以尝试连接到运行在同一台服务器上的其他节点。这提供了自动集群体验,而无需进行任何配置。
当需要与其他服务器上的节点组成群集时,您必须提供群集中其他节点的种子列表,这些节点可能是活的并且可联系的。
这可以指定如下:
discovery.zen.ping.unicast.hosts:
- 192.168.1.10:9300.
- 192.168.1.11
- seeds.mydomain.com
说明:
- 如果未指定端口,端口将默认为transport.profiles.default.port并回退到transport.tcp.port
- seeds.mydomain.com,那些可以被解析为多个IP地址的主机名,Elasticsearch将尝试所有解析的地址。
- discovery.zen.minimum_master_nodes
为防止数据丢失,配置discovery.zen.minimum_master_nodes设置至关重要,以便每个符合主节点的节点都知道为了形成群集必须可见的主节点的最小数量。
如果没有这种设置,遭受网络故障的集群就有可能将集群分成两个独立的集群 - 分裂的大脑 (脑裂)- 这将导致数据丢失。在这篇使用minimum_master_nodesedit避免分裂脑文章中提供了更详细的解释。
为避免分裂大脑,应将此设置设置为符合主节点的法定数量:
(master_eligible_nodes / 2) + 1
换句话说,如果有三个主节点,那么 最小主节点值 应该设置为(3/2)+ 1或2:
discovery.zen.minimum_master_nodes: 2
2.3.6 设置堆大小
默认情况下,Elasticsearch通知JVM使用最小和最大尺寸为1 GB的堆。
在转移到生产环境时,配置堆大小以确保Elasticsearch有足够的可用堆是非常重要的。
Elasticsearch将通过Xms(最小堆大小)和Xmx(最大堆大小)设置来分配jvm.options中指定的整个堆。
这些设置的值取决于服务器上可用的RAM数量。好的经验法则是:
- 将最小堆大小(Xms)和最大堆大小(Xmx)设置为彼此相等。
- Elasticsearch可用的堆越多,可用于缓存的内存就越多。但请注意,太多的堆可能会使您长时间垃圾收集暂停。
- 将Xmx设置为不超过物理RAM的50%,以确保有足够的物理RAM留给内核文件系统缓存。
不要将Xmx设置为JVM用于压缩对象指针(压缩oops)的临界值以上;
确切的截止值有所不同,但接近32 GB。您可以通过在日志中查找一行来验证您是否处于限制之下,如下所示:heap size [1.9gb], compressed ordinary object pointers [true]
更好的是,尽量保持低于基于零的压缩oops的阈值;准确的截止值会有所不同,但大多数系统上的26 GB是安全的,但在某些系统上可能高达30 GB。您可以通过启动带有JVM选项-XX:+ UnlockDiagnosticVMOptions -XX:+ PrintCompressedOopsMode的Elasticsearch并查找如下所示的行来验证您是否处于限制之下:
heap address: 0x000000011be00000, size: 27648 MB, zero based Compressed Oops
显示基于零的压缩oops被启用而不是
heap address: 0x0000000118400000, size: 28672 MB, Compressed Oops with base: 0x00000001183ff000
以下是如何通过jvm.options文件设置堆大小的示例:
-Xms2g
-Xmx2g
也可以通过环境变量设置堆大小。这可以通过注释掉jvm.options文件中的Xms和Xmx设置并通过ES_JAVA_OPTS设置这些值来完成:
# 将最小和最大堆大小设置为2 GB。
ES_JAVA_OPTS="-Xms2g -Xmx2g" ./bin/elasticsearch
# 将最小和最大堆大小设置为4000 MB。
ES_JAVA_OPTS="-Xms4000m -Xmx4000m" ./bin/elasticsearch
注意:为Windows服务配置堆与上述不同。
最初为Windows服务填充的值可以如上配置,但在安装服务后会有所不同。
有关更多详细信息,请参阅Windows服务文档。
2.3.7 JVM堆转储路径
默认情况下,Elasticsearch配置JVM将内存溢出时的堆转储到默认数据目录(这是针对RPM和Debian软件包安装的/var /lib /elasticsearch,而tar和zip归档分发包安装的是在Elasticsearch安装根目录下的data目录)。如果此路径不适合接收堆转储,则应修改jvm.options中的条目-XX:HeapDumpPath = …。如果你指定一个固定的文件名而不是目录,那么JVM将重复使用同一个文件;
这是一种防止堆转储在堆转储路径中积累的机制。或者,您可以通过操作系统配置计划任务,以删除比配置的时间早的堆转储。
2.3.8 GC记录
默认情况下,Elasticsearch启用GC日志。
这些配置在jvm.options中,默认设置为与Elasticsearch日志相同的默认位置。
默认配置每64 MB轮换一次日志,最多可消耗2 GB磁盘空间。
2.3.9 JVM致命错误日志
默认情况下,Elasticsearch配置JVM将致命错误日志写入默认日志记录目录(对于RPM和Debian软件包分发,这是/ var / log / elasticsearch,以及Elasticsearch安装的根目录下的logs目录,用于tar和zip
档案分发)。
这些是由JVM在遇到致命错误时产生的日志(例如,分段错误)。
如果此路径不适合接收日志,则应将jvm.options中的条目-XX:ErrorFile = …修改为备用路径。