Elasticsearch:配置选项
Posted Elastic 中国社区官方博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch:配置选项相关的知识,希望对你有一定的参考价值。
Elasticsearch 带有大量的设置和配置,甚至可能让专家工程师感到困惑。 尽管它使用约定优于配置范例并且大部分时间使用默认值,但在将应用程序投入生产之前自定义配置是必不可少的。
在这里,我们将介绍属于不同类别的一些属性,并讨论它们的重要性以及如何调整它们。 我们可以调整三个配置文件:
- elasticsearch.yml - 这个配置文件是最常编辑的,我们可以在其中设置集群名称、节点信息、数据和日志路径,以及网络和安全设置。
- log4j2.properties - 让我们设置 Elasticsearch 节点的日志记录级别。
- jvm.options - 这里我们可以设置运行节点的堆内存。
这些文件位于 Elasticsearch 安装的如下目录中:
$ pwd
/Users/liuxg/elastic/elasticsearch-8.6.1
$ tree config/ -L 2
config/
├── certs
│ ├── http.p12
│ ├── http_ca.crt
│ └── transport.p12
├── elasticsearch-plugins.example.yml
├── elasticsearch.keystore
├── elasticsearch.yml
├── jvm.options
├── jvm.options.d
├── log4j2.properties
├── role_mapping.yml
├── roles.yml
├── users
└── users_roles
这些文件由 Elasticsearch 节点从 config 目录中读取,该目录基本上是 Elasticsearch 安装目录下的一个文件夹。 对于二进制(zip 或 tar.gz)安装,此目录默认为 $ES_HOME/config(ES_HOME 变量指向 Elasticsearch 的安装目录)。 如果你使用 Debian 或 RPM 发行版等包管理器进行安装,则情况会有所不同,默认为 /etc/elasticsearch/config。
如果你希望从不同的目录访问你的配置文件,你可以设置并导出一个名为 ES_PATH_CONF 的路径变量,它指向新的配置文件位置。 在接下来的几个小节中,我们将介绍一些需要理解的重要设置,不仅对管理员如此,对开发人员也是如此。
主配置文件
尽管 Elastic 的人们开发了 Elasticsearch 以使用默认值(约定优于配置)运行,但我们在将节点投入生产时不太可能依赖默认值。 我们应该调整属性以设置特定的网络信息、数据或日志路径、安全方面等。 为此,我们可以修改 elasticserch.yml 文件以设置我们正在运行的应用程序所需的大部分属性。
Elasticsearch 将网络属性公开为 network.* 属性。 我们可以使用此属性设置主机名和端口号。 例如,我们可以将 Elasticsearch 的端口号更改为 9900 而不是保留默认端口 9200:http.port :9900。 如果要更改节点内部通信的端口,也可以设置 transport.port。
根据你的要求,你可能需要更改许多属性。 如果你想详细了解这些属性,请参阅官方文档:Networking | Elasticsearch Guide [8.6] | Elastic
如果你想设置自己的 Elasticsearch 能被外部访问而不是以 localhost 的方式访问,你可以更改如下的设置:
network.host: 192.168.0.1
在上面,我们设置为电脑的私有地址,这样它可以被所在的局域网所访问。我们也可以这样设置:
network.host: 0.0.0.0
这样 Elasticsearh 会绑定于所有的 IP 接口上。我们通常可以使用如下的方式来得到所有的 IP:
ifconfig | grep inet
$ ifconfig | grep inet
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
inet6 fe80::acbc:f2ff:fe5e:d6e9%anpi0 prefixlen 64 scopeid 0x4
inet6 fe80::acbc:f2ff:fe5e:d6eb%anpi2 prefixlen 64 scopeid 0x5
inet6 fe80::acbc:f2ff:fe5e:d6ea%anpi1 prefixlen 64 scopeid 0x6
inet6 fe80::f4d4:88ff:fe6a:c36d%ap1 prefixlen 64 scopeid 0xe
inet6 fe80::c6b:334b:459e:a8fb%en0 prefixlen 64 secured scopeid 0xf
inet 192.168.0.101 netmask 0xffffff00 broadcast 192.168.0.255
inet6 fe80::a082:13ff:fe68:d82f%awdl0 prefixlen 64 scopeid 0x10
inet6 fe80::a082:13ff:fe68:d82f%llw0 prefixlen 64 scopeid 0x11
inet6 fe80::1699:5325:c1de:b41%utun0 prefixlen 64 scopeid 0x12
inet6 fe80::ce81:b1c:bd2c:69e%utun1 prefixlen 64 scopeid 0x13
inet6 fe80::c22c:882d:15c7:d083%utun2 prefixlen 64 scopeid 0x14
inet6 fe80::10cf:86ce:6771:979%en4 prefixlen 64 secured scopeid 0x1a
inet 192.168.0.3 netmask 0xffffff00 broadcast 192.168.0.255
如上所示,当我们设置 network.host 为 0.0.0.0 时,它绑定于上面所示的 127.0.0.1 及 192.168.0.3 及 192.168.0.101 上。除上面的配置之前,我们也可以使用如下的定义:
定义 | 描述 |
---|---|
_local_ | 系统上的任何 loopback 地址,例如 127.0.0.1。 |
_site_ | 系统上的任何站点本地地址,例如 192.168.0.1。这样我们就不用硬编码私有地址 |
_global_ | 系统上任何全局范围的地址,例如 8.8.8.8。 |
配置文件格式
配置格式为 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"
日志记录选项
Elasticsearch 是用 Java 开发的,与大多数 Java 应用程序一样,Elasticsearch 使用 Log4j 2 作为其日志记录库。 一个正在运行的节点将 INFO 级别的日志信息输出到控制台和文件(分别使用 Kibana 控制台和 RollingFile Appenders)。
Log4j 属性文件 (log4j2.properties) 包含一些系统变量(sys:es.logs.base_path、sys:es.logs.cluster_name 等),这些变量在应用程序运行时解析。 因为这些属性由 Elasticsearch 公开,所以它们可供 Log4j 使用,这让 Log4j 可以设置其日志文件目录位置、日志文件模式和其他属性。 例如 sys:es.logs.base_path 指向 Elasticsearch 写入日志的路径,解析为 $ES_HOME/logs 目录。
默认情况下,大部分 Elasticsearch 运行在 INFO 级别,但我们可以根据单个包自定义设置。 例如,我们可以编辑 log4j2.properties 文件并为索引包添加一个记录器,如下面的清单所示。
设置特定包的日志记录级别:
logger.index.name = org.elasticsearch.index
logger.index.level = DEBUG
通过这样做,我们允许 index package 在 DEBUG 级别输出日志。 我们可以在集群级别设置 DEBUG 日志级别,而不是在特定节点上编辑此文件并重新启动该节点(如果你在创建群之前没有设法这样做,则可能需要为每个节点执行此操作) 对于这个包。 下一个清单演示了此设置:
全局设置临时日志级别:
PUT _cluster/settings
"transient": #A
"logger.org.elasticsearch.index":"DEBUG" #B
如查询所示,我们在 transient 块中将 index 包的记录器级别属性设置为 DEBUG。 transient block 表示该属性不持久(仅在集群启动并运行时可用)。 如果我们重启集群或者它崩溃了,设置就会丢失,因为它没有永久存储在磁盘上。
我们可以通过调用集群设置 API (_cluster/settings) 来设置此属性,如清单中的代码所示。 设置此属性后,将在 DEBUG 级别输出与 org.elasticsearch.index 源包中的索引相关的任何进一步日志记录信息。
Elasticsearch 也提供了一种持久存储集群属性的方法。 如果我们需要永久存储属性,我们可以使用 persistent 块。 以下清单用持久块替换了 transient 块。
永久设置日志级别:
PUT _cluster/settings
"persistent":
"logger.org.elasticsearch.index":"DEBUG",
"logger.org.elasticsearch.http":"TRACE"
此代码在 org.elasticsearch.index 包上设置 DEBUG 级别,在 org.elasticsearch.http 包上设置 TRACE 级别。 因为两者都是持久属性,所以记录器会按照包上设置的这些级别写入详细的日志,这些级别也会在集群重新启动后继续存在。
请注意使用 persistent 属性永久设置的此类属性。 我的建议是在故障排除或调试期间启用日志记录级别 DEBUG 或 TRACE。 当你完成生产中的 “救火” 情节时,将其重置回 INFO 以避免将大量请求写入磁盘。
更多阅读,请参考文章 “Elastic:配置 Elasticsearch 服务器 logs”。
JVM 选项
因为 Elasticsearch 使用 Java 编程语言,所以可以在 JVM 级别进行大量优化调整。 出于显而易见的原因,在本文中讨论如此庞大的话题是不够公正的。 但是,如果你很好奇并想了解 JVM 的本质或想在较低级别微调性能,请参阅 Optimizing Java(Ben Evan 和 Jame Gough)或 Java Performance(Scott Oaks)等书籍。 我强烈推荐它们,因为它们不仅提供基础知识,还提供操作提示和技巧。
Elasticsearch 在 /config 目录中提供了一个 jvm.options 文件,其中包含 JVM 设置。 但是,此文件仅供参考(例如,检查节点的内存设置),不得编辑。 根据节点的可用内存,为 Elasticsearch 服务器自动设置堆内存。
警告:在任何情况下我们都不应该编辑 jvm.options 文件。 这样做可能会破坏 Elasticsearch 的内部运作。
如果我们想要升级内存或更改任何 JVM 设置,我们必须创建一个以 .options 作为文件扩展名的新文件,提供适当的调整参数,并将该文件放在 config 下一个名为 jvm.options.d 的目录中以便以存档形式进行安装(tar 或 zip)。 我们可以为我们的自定义文件指定任何名称,但我们需要在其文件名中包含固定的 .options 扩展名。
对于 RPM/Debian 软件包安装,此文件应位于 /etc/elasticsearch/jvm.options.d/ 目录下。 同样,将选项文件挂载在 /usr/share/elasticsearch/config 文件夹下以进行 Docker 安装。
我们可以编辑这个自定义 JVM 选项文件中的设置。 例如,要升级名为 jvm_custom.options 的文件中的堆内存,我们可以使用以下清单中的代码。
升级堆内存:
# Setting the JVM heap memory in jvm_custom.options file
-Xms4g
-Xmx4g
_Xms 标志设置初始堆内存,而 _Xmx 调整最大堆内存。 不成文的规则是不要让 _Xms 和 _Xmx 设置超过节点总 RAM 的 50% 以上。 在引擎盖下运行的 Apache Lucene 将内存的后半部分用于其分段、缓存和其他进程。
ES2:ElasticSearch 集群配置
这是ElasticSearch 2.4 版本系列的第二篇:
- ElasticSearch入门 第一篇:Windows下安装ElasticSearch
- ElasticSearch入门 第二篇:集群配置
- ElasticSearch入门 第三篇:索引
- ElasticSearch入门 第四篇:使用C#添加和更新文档
- ElasticSearch入门 第五篇:使用C#查询文档
- ElasticSearch入门 第六篇:复合数据类型——数组,对象和嵌套
- ElasticSearch入门 第七篇:分析器
- ElasticSearch入门 第八篇:存储
- ElasticSearch入门 第九篇:实现正则表达式查询的思路
ElasticSearch共有两个配置文件,都位于config目录下,分别是elasticsearch.yml和logging.yml,其中,elasticsearch.yml 是全局配置文件,用于在服务器级别对ElasticSearch进行配置。ElasticSearch的配置选项分为静态设置和动态设置两种,静态设置必须在结点级别(node-level)设置,或配置在elasticsearch.yml配置文件中,或配置在环境变量中,或配置在命令行中,在结点启动之后,静态设置不能修改。集群的名字和结点的名称:cluster.name 和 node.name,这两个配置项是静态配置项,不能在集群运行时修改,而动态配置项可以在集群运行时通过RESTful API进行修改。
一,配置集群的标识(cluster.name)
通过 cluster.name 属性配置集群的名字,用于唯一标识一个集群,不同的集群,其 cluster.name 不同,集群名字相同的所有节点自动组成一个集群。如果不配置改属性,默认值是:elasticsearch。当启动一个结点时,该结点会自动寻找相同集群名字的主结点;如果找到主结点,该结点加入集群中;如果未找到主结点,该结点成为主结点。
注意:在yml中对Elasticsearch进行全局配置,要注意配置选项的格式:option: value,在“:”之后保留一个空格,之后是选项值;配置选项不要有前置空格。
配置集群的名字为myescluster
cluster.name: myescluster
二,结点的配置
ElasticSearch集群中,共有五种结点类型:主结点(Master),候选主结点(Master-eligible),数据结点(Data),吸收结点(Ingest)和部落结点(Tribe)。在一个集群中,主结点只有一个,负责管理集群,执行集群级别的操作,比如创建或删除索引,跟踪集群的组成结点的状态,决定将分片分配的目标结点,对集群来说,一个稳定的主结点十分重要。集群会自动进行健康检测,当主结点出现故障时,集群中的候选主结点进行选举,在选举结束之后,一个候选主结点被选举成为新的主结点,实现集群故障的自动转移。候选主结点具有投票权,其他结点没有投票权。
1,配置候选主结点和数据结点
默认情况下,ElasticSearch将当前节点配置为同时作为候选主结点和数据结点:
- node.data:true 配置该结点是数据结点,用于保存数据,执行数据相关的操作(CRUD,Aggregation);
- node.master:true 配置该结点有资格被选举为主结点(候选主结点),用于处理请求和管理集群。如果结点没有资格成为主结点,那么该结点永远不可能成为主结点;如果结点有资格成为主结点,只有在被其他候选主结点认可和被选举为主结点之后,才真正成为主结点。
配置当前结点只保存数据:
node.master: false node.data: true
配置当前结点不保存数据,只做候选主结点:
node.master: false node.data: true
2,主结点选取的配置
discovery.zen.minimum_master_nodes 属性:默认值是1,该属性定义的是为了组成一个集群,相互连接的候选主结点的最小数目,强烈推荐该属性的设置使用多数原则:(master_eligible_nodes / 2) + 1,既能避免出现脑裂(split-brain),又能在故障发生后,快速选举出新的主结点,例如,有5个候选主结点,推荐把该属性设置为3。
3,结点的路径(Path)
默认情况下,ElasticSearch使用基于安装目录的相对路径来配置结点的路径,安装目录由属性path.home显示,在home path下,ElasticSearch自动创建config,data,logs和plugins目录,一般情况下不需要对结点路径单独配置。结点的文件路径配置项:
- path.config 设置ElasticSearch的配置文件保存的目录;
- path.data 设置ElasticSearch结点的索引数据保存的目录,多个数据文件使用逗号隔开,例如,path.data: /path/to/data1,/path/to/data2;
- path.logs 设置ElasticSearch结点的日志文件保存的目录;
- path.plugins 设置ElasticSearch插件安装的目录;
- path.work 设置ElasticSearch的临时文件保存的目录;
4,单个ElasticSearch实例的Java虚拟机(JVM)的堆内存限制
ElasticSearch实例必须运行在安装JDK的机器上,在安装完Java Runtime组件之后,必须创建系统变量JAVA_HOME,指定JDK安装的位置,比如:
JAVA_HOME: C:\\Program Files\\Java\\jre1.8.0_121\\bin
默认的JVM内存限制是 1GB,对小项目而言,1GB内存足够使用,不会出现问题,但是,对大项目而言,这个默认限制太小了,如果日志文件中经常出现OutOfMemoryError异常消息,就考虑重新设置 ES_HEAP_SIZE 环境变量,为JVM分配足够的内存,同时,必须为OS分配足够的内存,建议JVM使用的物理内存最大不应超过32GB,推荐分配机器物理内存的50%,在Windows中创建新的系统环境变量 ES_HEAP_SIZE,设置堆内存大小为5G:
环境变量
ElasticSearch 首先读取通用的JAVA_OPTS环境变量来获取JVM参数, 除了可以用JAVA_OPTS配置JVM参数外, 还可以通过ElasticSearch提供的ES_JAVA_OPTS环境变量配置JVM参数, ES_JAVA_OPTS会覆盖JAVA_OPTS中配置的相同参数, 官方建议是在JAVA_OPTS中配置通用的参数, 在ES_JAVA_OPTS中配置针对Elasticsearch需要调整的参数。环境变量最主要的作用是指定 -Xmx 最大堆大小和 -Xms 最小堆大小。
JAVA_OPTS ,是用来设置JVM相关运行参数的环境变量,例如:JAVA_OPTS="-server -Xms2048m -Xmx2048m"
- -server:一定要作为第一个参数,在多个CPU时性能佳
- -Xms:初始Heap大小,使用的最小内存,cpu性能高时此值应设的大一些
- -Xmx:java heap最大值,使用的最大内存
上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半。
三,索引配置
1,配置索引的分片(shard)和副本(replica)数量
默认的配置是把索引分为5个分片,每个分片1个副本,共10个结点:
index.number_of_shards: 5 index.number_of_replicas: 1
禁用索引的分布式特性,使索引只创建在本地主机上:
index.number_of_shards: 1 index.number_of_replicas: 0
2,当前节点锁住内存
当JVM做分页切换(swapping)时,ElasticSearch执行的效率会降低,推荐把ES_MIN_MEM和ES_MAX_MEM两个环境变量设置成同一个值,并且保证机器有足够的物理内存分配给ES,同时允许ElasticSearch进程锁住内存:
bootstrap.mlockall: true
3,断路器(Circuit Breaker)控制内存的使用量
断路器用于阻止产生OutOfMemoryError的操作,每一个断路器设置一个内存使用的上限,一旦操作达到该上限,ElasticSearch将阻止该操作继续使用内存。设置较多,一般不需要修改,保持默认值:
- indices.breaker.total.limit: defaults to 70% of JVM heap
- indices.breaker.request.limit: defaults to 60% of JVM heap
- indices.breaker.request.overhead: defaults to 1
- network.breaker.inflight_requests.limit: defaults to 100% of JVM heap
- network.breaker.inflight_requests.overhead: defaults to 1
- script.max_compilations_per_minute: defaults to 15
4,字段数据缓存
在对一个字段执行排序或聚合操作时,使用字段数据缓存(field data cache)将该字段的值加载到内存,以加快查询的速度。加载字段数据还原是IO密集的操作,推荐分配足够的内存,并且不分配过期时间:
- indices.fielddata.cache.size,控制结点级别的字段数据缓存大小,默认值是无限大(unbounded),建议分配足够的物理内存;
- indices.fielddata.cache.expire,控制字段数据缓存的过期时间,默认值是字段数据永不过期;
- indices.breaker.fielddata.limit,断路器,默认值是JVM堆内存的 80%;当加载字段值所需要的内存超过JVM堆内存的80%,将引发异常;
- indices.breaker.fielddata.overhead: 断路器,默认值是1.03;
5,结点查询缓存:
查询缓存用于缓存查询的结果,每一个节点都有一个查询缓存,缓存过期使用LRU淘汰策略(Least Recently Used eviction):当缓存满时,最近最少使用的数据被淘汰,从缓存中清除,以存储新的数据。
- indices.queries.cache.enabled,默认值是true;
- indices.queries.cache.size,默认值是10%;
6,索引缓存
索引缓存用于存储最新的索引文档(newly indexed documents),当该缓存填充满时,缓存的文件将被写入到磁盘中的段(segment)中。
- indices.memory.index_buffer_size,默认值是10%,在单个结点上,所有索引的分片占用的最大内存大小,或占用JVM堆内存的百分比;
- indices.memory.min_index_buffer_size,当indices.memory.index_buffer_size指定为百分比时,使用该选项配置绝对值,默认值是48MB;
- indices.memory.max_index_buffer_size,当indices.memory.index_buffer_size指定为百分比时,使用该选项配置绝对值,默认值是无限大;
7,分片请求缓存:
- indices.requests.cache.enable:默认值是true
- indices.requests.cache.size: 默认值是1%
当对一个索引执行查找请求(Search Request)时,每一个相关的分片(involved shard)都在本地执行查询,返回查询结果(local result)给协调结点(coordinating node)进行组合(combine),将各个分片的结果合并为最终的结果集返回。分片请求缓存对每个分片的查询结果进行缓存。
8,索引的刷新频率
索引对象刷新的频率,刷新频率越低,文档对搜索操作可视的时间越长:
- index.refresh_interval,在索引级别指定索引的刷新频率,默认值是1s
9,段(Segment)合并
每个索引分为多个段(Segment),一个段写入硬盘后,就不能再被更新,因此,被删除文档的信息存储在一个单独的文件中。ElasticSearch支持文档的更新,在底层,实际上是删除旧文档,再把更新内存的文档编入索引。在查找时,需要从返回结果中过滤掉已删除的文档。
如果数据更新或删除的数据比较多,那么每个段中的有效数据密度会变低,降低了查询的性能,通过段合并,将已删除的数据从段(Segment)中物理删除,能够提高搜索性能,合并的过程是:底层的Lucene库获取若干段,从段中过滤已删除的数据,保存到一个新的段上;段合并完成之后,将源段从硬盘上物理删除;段合并操作的CPU和IO的消耗是非常高的,必须控制段合并执行的频率和时机。
段合并的策略控制段合并的时机,在适当的条件下进行段合并:
- index.merge.policy.type,有效值:tiered,log_byte_size,log_doc
- tiered:默认的合并策略,合并尺寸大致相似的段
- log_byte_size:根据文档的字节数量进行合并
- log_doc:根据文档的数量进行合并
段合并的线程控制,以串行或并发方式执行段合并:
- index.merge.scheduler.type,有效值:serial(串行),concurrent(并发)
合并因子控制段合并的频率,合并因子越小,合并的频率越高:
- index.merge.policy.merge_factor,默认值是10
段合并调节器,限制合并的速度:
- indices.store.throttle.type,有效值:none,merge,all
- indices.store.throttle.max_bytes_per_sec:默认值10mb
四,集群的网络配置
1,结点的IP地址配置
配置当前结点绑定的IP地址,默认为0.0.0.0
network.bind_host: 192.168.0.1
设置其它结点和该结点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址
network.publish_host: 192.168.0.1
同时设置bind_host和publish_host两个参数
network.host: 192.168.0.1
2,设置结点间交互的TCP端口,默认是9300
transport.tcp.port: 9300
3,设置对外服务的HTTP端口,默认为9200
http.port: 9200
4,设置是否压缩TCP传输时的数据,默认为false,不压缩
transport.tcp.compress: true
5,设置HTTP包内容的最大容量,默认100mb
http.max_content_length: 100mb
6,是否启用HTTP协议对外提供服务,默认为true,开启
http.enabled: true
五,集群的发现机制(Discovery)
ElasticSearch使用zen发现来寻找结点和选举主结点,组建集群;zen发现默认使用多播,但是,单播发现比较安全,推荐使用单播发现。
1,配置多播(multicast)
多播(multicast)是zen发现的默认方法,主要有以下配置选项:
- discovery.zen.ping.multicast.group:用于多播请求的群组地址,默认值是224.2.2.4;
- discovery.zen.ping.multicast.port:设置多播通信的端口,默认值是54328;
- discovery.zen.ping.multicast.ttl;设置多播请求被认为有效的时间,默认值是3s;
- discovery.zen.ping.multicast.address:设置ElasticSearch绑定的网络接口,默认为null,意味着ElasticSearch尝试绑定所有网络接口;
- discovery.zen.ping.multicast.enable:启用或禁用多播;
2,配置单播(unicast)
使用单播时,总是禁用多播,单播的配置选项:
discovery.zen.ping.unicast. hosts:指定接收单播请求的主机IP地址,推荐包含组成集群的所有主机,主机之间用逗号隔开;
discovery.zen.ping.multicast.enabled: false discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]
3,结点之间的状态检测
ping是结点之间发送的心跳信号,用于检测其他结点是否健康运行,如果其他结点无法响应该信号,那么集群认为该结点发生故障,配置ping信号的属性:
- discovery.zen.fd.ping_interval:默认为1s,设置结点之间互相ping信号的时间间隔;
- discovery.zen.fd.ping_timeout:默认为30s,设置当前结点发送ping信号后等待目标结点响应的时间,超过该时间,当前结点认为目标结点无法响应;
- discovery.zen.fd.ping_retries:默认为3次,设置重试次数,超过此次数之后,判定目标结点出现故障,停止工作;
- discovery.zen.ping.timeout: 默认值是3s,设置当前结点等待其他结点的ping信号的超时时间;
六,本地网关(Gateway)和还原(Recovery)
网关用于持久化存储集群的数据,包括集群的状态,索引和索引里面的数据,索引的类型映射和索引级别的配置信息等元数据,网关相当于关系型DB的事务日志。每一次集群数据的改变,ElasticSearch都将集群的数据存储到网关中。当集群重新启动时,它将会从网关中读取集群的数据,还原到上一次停机时的状态。
1,网关的类型
目前只支持local类型(本地网关),在本地文件系统中存储索引及其元数据;
gateway.type: local
2,还原控制
还原控制的选项有:
- gateway.recover_after_nodes:3,表示当集群中有3个结点之后,允许执行还原进程;
- gateway.recover_after_time:10m,表示当集群满足gateway.recover_after_nodes属性(集群中至少有3个结点)之后,ElasticSearch在10分钟之后开始执行还原进程;
- gateway.expected_nodes:5,设置集群期望的结点数量,当集群中结点的数目等于5,并且满足gateway.recover_after_nodes属性(集群中至少有3个结点)时,ElasticSearch将立即执行还原进程;
- 网关对数据结点和主结点的还原控制:
- gateway.recover_after_master_nodes 和 gateway.expected_master_nodes
- gateway.recover_after_data_nodes 和 gateway.expected_data_nodes
3,保护动作
默认情况下,ElasticSearch自动创建索引,推荐关闭该选项
action.disable_close_all_indices: true action.disable_delete_all_indices: true action.disable_shutdown: true action.auto_create_index: false
4,还原限制(Recovery Throttling)
- cluster.routing.allocation.node_initial_primaries_recoveries: 4,在初始化还原期间,控制单个结点中执行并行还原进程的数量;
- cluster.routing.allocation.node_concurrent_recoveries: 2,在增加/移除结点,重平衡期间,控制单个结点中执行并行还原进程的数量;
- indices.recovery.max_bytes_per_sec: 100mb,在还原时,吞吐量的上限,默认值是20MB;
- indices.recovery.concurrent_streams: 5,在还原分片时,设置开启的并发流的上限;
七,线程池配置
Elasticsearch公开两种类型的线程池:
- cache:无限制的线程池,为每个请求创建一个线程;
- fixed:固定大小的线程池,大小由size属性指定,
对于固定大小的线程池类型,必须为ElasticSearch指定一个请求队列(queue)用来保存请求,请求被存储到队列中,直到有一个空闲的线程来执行请求;如果队列满了,ElasticSearch无法把请求存放到队列中,该请求将被拒绝;
- threadpool.index.type: fixed
- threadpool.index.size: 100
- threadpool.index.queue_size: 500
附言:
ElasticSearch引擎的配置选项非常多,并且要真正理解这些配置选项对引擎的影响,也不是一件容易的事,不过,不用担心,在使用ElasticSearch时,真正需要修改配置选项的情况少之又少,所以,通常使用默认的配置就能满足生产环境的要求,ElasticSearch重要配置示例:
## cluster cluster.name: "my-es-cluster" ## node node.name: "node-1" node.master: true node.data: true ## index index.number_of_shards: 1 index.number_of_replicas: 0 ## memory bootstrap.mlockall: true ## network network.host: 192.168.0.1 transport.tcp.port: 9300 http.port: 9200 ## discovery discovery.zen.minimum_master_nodes: 1 discovery.zen.ping.multicast.enabled: false discovery.zen.ping.unicast.hosts: ["host1", "host2:port"] ## protection action.auto_create_index: false
## scripting script.inline: true script.indexed: true
参考文档:
Elasticsearch Reference [2.4] » Setup » Configuration
Elasticsearch Reference [2.4] » Modules
Elasticsearch Reference [2.4] » Modules » Node
Install and configure Elasticsearch in Windows
以上是关于Elasticsearch:配置选项的主要内容,如果未能解决你的问题,请参考以下文章