Elasticsearch5.X配置说明
程序员文章站
2022-07-09 19:10:28
...
elasticsearch.yml配置说明
- 此配置说明来源于互联网,在实际使用时也有自己增加的一些配置项说明,可以参考借鉴,可用于配置优化
- 注意:许多配置项实际在ELK*X中使用时,会发生错误,配置会失败,请小心使用
Cluster集群
- 集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的,外部是不需要知道
- ELK一个重要的概念就是去中心化,对于集群外部来说,ELK集群是一个整体,你与任何一个节点的通信,效果都是一样的
-
cluster.name: elasticsearch
cluster.name用于指定集群名称,同一网段中elasticsearch会自动的找到具有相同cluster.name的集群
Node节点
- ELK集群是由各个节点结成
-
node.name: node1
node.name用于指定节点名称,同一集群中的节点名称不能重复 -
node.master: true
node.master用于指定节点是否可以竟争主节点,默认集群中的第一台机器为master,如果这台机器停止就会重新选举master,默认为true -
node.data: true
node.data用于指定节点是否存储数据,默认为true - 结合master和data配置,可以得出几种配置来优化
默认配置:节点即可以竟争主节点也存储数据,这样对于一个主节点的压力会增大,配置形式如下:
node.master: true
node.data: true
数据存储:节点只用于数据存储,不竟争主节点,可作为负载器,配置形式如下:
node.master: false
node.data: true
节点协调:节点只用于竟争主节点,不存储数据,保有空闲资源,可作为协调器
node.master: true
node.data: false
数据搜索:节点不存储数据,也不竟争主节点,可做为一个搜索器,从节点中获取数据,生成搜索结果等
node.master: false
node.data: false -
其它配置:一般保持默认,具体意义见官网
node.rack: rack314
node.max_local_storage_nodes: 1
Index索引
- 用于为数据建立检索索引,可快速检索数据
-
index.number_of_shards: 5
设置索引的分片数,默认为5。分片的数量需要根据机器的数量与性能调整,合理分片可最大化利用机器。建议一个节点平均的分片数在3个内 - 注意: number_of_shards只在索引创建时一次生成,后期不可以修改
-
index.number_of_replicas: 1
设置索引的副本数,默认为1。副本主要用于数据冗余,可在丢失节点的情况下保证数据健全。这个值是可以通过接口修改
Indices条目
-
indices.query.bool.max_clause_count: 10240
indices.query.bool.max_clause_count用于设置请求bool条件的最大条目数量,默认是1024。如果请求的bool条件条目数量大于此值时将不给查询
Paths路径
- 用于指定ELK数据与日志文件存放路径
-
path.conf: /path/conf
path.conf用于指定ELK配置文件路径,一般保持默认,除非你改变了配置文件的路径 -
path.data: /path/data
path.data用于指定ELK数据存放位置。也可以指定多个位置,用逗号分隔,如:/path/data1,/path/data2 -
path.work: /path/work
path.work用于指定临时文件存放路径,一般保持默认 -
path.logs: /path/logs
path.logs用于指定日志文件存放路径 -
path.plugins: /path/plugins
path.plugins用于存放ELK插件目录,一般保持默认,除非你改变了插件的路径
Plugin插件
- 用于插件加载
-
plugin.mandatory: mapper-attachments,lang-groovy
plugin.mandatory设置插件作为启动条件,如果一下插件没有安装,则该节点服务不会启动
Memory内存
-
bootstrap.mlockall: true
bootstrap.mlockall用于锁定内存,同时也要允许elasticsearch的进程可以锁住内存,linux下可以通过 ulimit -l unlimited 命令
当JVM开始写入交换空间时(swapping)ElasticSearch性能会低下,你应该保证它不会写入交换空间 -
jvm内存配置: ELK是基于JVM的,所以配置好JVM的内存属性对ELK的性能有会有帮助。
在ELK*X的配置文件中有一个jvm.options的配置文件,用于配置ELK的JVM内存和GC,JVM的主要两个内存配置属性:-Xms和-Xmx
-Xmx: 最大堆大小
-Xms: 初始堆大小
注意:这两个值尽可能设置为一样,避免频繁申请内存
其它配置优化:见http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html
Network And HTTP
- 用于ELK网络通信的配置
-
network.bind_host: 0.0.0.0
network.bind_host用于设置绑定的ip地址,可以是ipv4或ipv6的,默认为***0 -
network.publish_host: 0.0.0.0
network.publish_host用于设置与其它节点交互的ip地址,如果不设置它会自动设置,值必须是个真实的ip地址 -
network.host: 0.0.0.0
network.host用于设置邦定与交互的ip地址,这个设置相同于同时设置了publish_host与bind_host,一般也只需要设置这个属性即可 -
transport.tcp.port: 9300
transport.tcp.port用于设置节点间交互的tcp端口,默认是9300 -
transport.tcp.compress: true
transport.tcp.compress用于设置是否压缩tcp传输的数据,默认为false,不压缩 -
http.port: 9200
http.port用于设置对外服务的http端口,默认为9200 -
http.max_content_length: 100mb
http.max_content_length用于设置请求内容的最大容量,默认100mb -
http.enabled: true
http.enabled用于设置是否对外开放http协议服务,默认为true,开启http服务
Gateway
- 当使用shard gateway时,是为了尽可能的重用local data(本地数据)。以及控制怎样以及何时启动整个集群重启的初始化恢复过程
-
gateway.type: local
gateway.type设置gateway的类型,默认为local即为本地文件系统 -
gateway.recover_after_nodes: 3
gateway.recover_after_nodes用于设置一个集群中的N个节点启动后,才允许进行恢复处理,默认为3 -
gateway.recover_after_time: 5m
gateway.recover_after_time用于设置初始化恢复过程的超时时间,超时时间从上一个配置中配置的N个节点启动后算起 -
gateway.expected_nodes: 2
gateway.expected_nodes用于设置这个集群中期望有多少个节点,一旦这N个节点启动(并且recover_after_nodes也符合),就立即开始恢复过程(不等待recover_after_time超时)
Recovery Throttling
- 用于配置在初始化恢复,副本分配,再平衡,或者添加和删除节点时控制节点间的分片分配
-
cluster.routing.allocation.node_initial_primaries_recoveries: 4
cluster.routing.allocation.node_initial_primaries_recoveries用于设置初始化数据恢复时,并发恢复线程的个数,默认为4 -
cluster.routing.allocation.node_concurrent_recoveries: 2
cluster.routing.allocation.node_concurrent_recoveries用于设置添加删除节点或负载均衡时并发恢复线程的个数,默认为2 -
indices.recovery.max_bytes_per_sec: 20mb
indices.recovery.max_bytes_per_sec用于设置恢复时的吞吐量,默认为0无限制,如果机器还有其他业务在跑还是需要限制一下 -
indices.recovery.concurrent_streams: 5
indices.recovery.concurrent_streams用于设置限制从其它分片恢复数据时最大同时打开并发流的个数,默认为5
Discovery节点发现
-
discovery.zen.minimum_master_nodes: 1
discovery.zen.minimum_master_nodes用于设置集群中合格的master节点,默认为3,对于大的集群来说,可以设置大一点的值(3-6),主要为了防止ELK的脑裂问题。但如果集群过小,可能会导致集群达不到设置的master节点数量而启动失败 -
discovery.zen.ping.timeout: 3s
discovery.zen.ping.timeout用于设置探查的超时时间,默认3秒,提高一点以应对网络不好的时候,防止脑裂 -
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.multicast.enabled用于设置是否打开多播发现节点,默认是true。当多播不可用或集群跨网段的时候集群通信还是用单播吧 -
discovery.zen.ping.unicast.hosts: [“host1”,”host2:9300”]
discovery.zen.ping.unicast.hosts用于设置集群主节点的初始列表,当节点(主节点或者数据节点)启动时使用这个列表进行探测
Various其它的
-
action.destructive_requires_name: true
action.destructive_requires_name用于设置删除索引时需要明确的给出索引名称,默认为true
head等插件访问
- ELK插件访问HTTP服务权限设置
-
http.cors.enabled: true
http.cors.enabled用于设置是否**插件访问 -
http.cors.allow-origin: “*”
http.cors.allow-origin用于设置允许访问的源,*表示所有源都可以访问 -
http.cors.allow-credentials: true
http.cors.allow-credentials用于设置是否允许证书访问
可深度内存调优属性
- 可设置查询缓存数量,内存使用量限制等,主要用于防止内存溢出
filter cache缓存设置
- 用于设置节点过滤器缓存,以使用分配给进程的总内存的百分比或特定数量的内存。所有在节点上的碎片共享一个节点缓存(这就是为什么它被称为节点)。缓存实现了LRU驱逐策略:当缓存变得满时,最近使用的数据被删除,以便为新数据让路
- 注意:这不是一个索引级别设置,而是一个节点级别设置(可以在节点配置中配置)
-
indices.cache.filter.size: 30%
indices.cache.filter.size用于设置filters缓存大小,默认是10%,可以接受一个百分比值,比如30%,或者一个确切的值,比如512mb
内存溢出避免设置
-
index.cache.field.max_size: 50000
index.cache.field.max_size用于设置缓存field的最大值 -
index.cache.field.expire: 10m
index.cache.field.expire用于设置缓存的过期时间 -
index.cache.field.type: soft
index.cache.field.type用于设置缓存类型为Soft Reference,它的主要特点是据有较强的引用功能,只有当内存不够的时候,才进行回收这类内存,因此在内存足够的时候,它们通常不被回收。另外,这些引用对象还能保证在Java抛出OutOfMemory异常之前,被设置为null,它可以用于实现一些常用图片的缓存,实现Cache的功能,保证最大限度的使用内存而不引起OutOfMemory
field data缓存设置
- 用于field data缓存设置,主要用于排序或者聚合查询的时候,将field的value加载到内存中来提高查询速度.当数据量过大的时候,我们分配的内存存储不了这么多数据的时候就会报错,需要设置合理的临界值
-
indices.fielddata.cache.size: unbounded
indices.fielddata.cache.size用于设置field data缓存大小,默认是unbounded,可以接受一个百分比值,比如30%,或者一个确切的值,比如512mb -
indices.fielddata.cache.expire: -1
indices.fielddata.cache.expire用于设置field data缓存超时时间,默认是-1,可设置类似:5m
circuit breaker断路器设置
- 断路器是elasticsearch为了防止内存溢出的一种操作,每一种circuit breaker都可以指定一个内存界限触发此操作
-
indices.breaker.total.limit: 70%
indices.breaker.total.limit用于总的内存占用比率设置,*别的设定,默认值是JVM heap的70%,当内存占用达到这个数量的时候会触发内存回收 -
indices.breaker.fielddata.limit: 70%
indices.breaker.fielddata.limit用于设置fielddata数量内存占用比率,当内存占用超过此比率时会触发内存回收,默认值是JVM heap的70% -
indices.breaker.fielddata.overhead: 1.03
indices.breaker.fielddata.overhead用于在系统要加载fielddata时会进行预先估计,当系统发现要加载进内存的值超过limit * overhead时会进行进行内存回收,默认是1.03 -
indices.breaker.request.limit: 40%
indices.breaker.request.limit用于设置请求限制的限制,默认为JVM堆的40% -
indices.breaker.request.overhead: 1
indices.breaker.request.overhead用于请求时设定的一个预估系数,用来防止内存溢出,默认值是1
Translog设置
- Lucene的更改只会在Lucene提交期间持久存储在磁盘中,这是一个相对较大的操作,因此在每次索引或删除操作后都不能执行。在进程退出或HW失败的情况下,在一次提交之后发生的更改将会丢失
为了防止这种数据丢失,每个分片都有一个事务日志或写入与之相关联的日志。任何索引或删除操作在内部Lucene索引处理后都被写入到translog中
在崩溃的情况下,当碎片恢复时,可以从事务日志重播最近的事务
Elasticsearch flush是执行Lucene提交并启动一个新的translog的过程。它在后台自动完成,以确保事务日志不会增长太大,这将使恢复过程中重播其操作需要相当长的时间。它也通过API暴露,尽管它很少需要手动执行 - 这个设置一般比较少改动,所以请看官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-translog.html#_flush_settings
配置实例
- 此配置实例基于Elasticsearch5.6.0,系统环境为CentOS7 64位
- 此配置的角色是:主节点,数据节点,查询节点,插件节点(所以插件都安装此节点中)
- 注意:因为真实的集群节点机器比较多,所以配置了5个(主节点,数据节点),10个(数据节点),最小主节点数量与期望在线节点数据都配置得比较多,主要防止ELK的脑裂
# ======================== Elasticsearch Configuration =========================
#
# NOTE: Elasticsearch comes with reasonable defaults for most settings.
# Before you set out to tweak and tune the configuration, make sure you
# understand what are you trying to accomplish and the consequences.
#
# The primary way of configuring a node is via this file. This template lists
# the most important settings you may want to configure for a production cluster.
#
# Please consult the documentation for further information on configuration options:
# https://www.elastic.co/guide/en/elasticsearch/reference/index.html
#
# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster:
# 这里的集群名称是假的
cluster.name:test
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
# 这里的节点名称也是假的
node.name:testA
#
# Add custom attributes to the node:
#
#node.attr.rack: r1
######
node.master: true
node.data: true
#
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):
#
path.data: /hhdata/hhdata
#
# Path to log files:
#
path.logs: /hhdata/hhlogs
#
# ----------------------------------- Indices -----------------------------------
#
indices.query.bool.max_clause_count: 10240
#
#
# ----------------------------------- Memory -----------------------------------
#
# Lock the memory on startup:
#
#bootstrap.memory_lock: true
#
# Make sure that the heap size is set to about half the memory available
# on the system and that the owner of the process is allowed to use this
# limit.
#
# Elasticsearch performs poorly when the system is swapping the memory.
#
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 0.0.0.0
#
# Set a custom port for HTTP:
#
#http.port: 9200
#
# For more information, consult the network module documentation.
#
# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when new node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
# 这里的主节点列表也为假的
discovery.zen.ping.unicast.hosts: ["IP1:9300","IP2:9300","IP3:9300","IP4:9300","IP5:9300"]
#
# Prevent the "split brain" by configuring the majority of nodes (total number of master-eligible nodes / 2 + 1):
#
discovery.zen.minimum_master_nodes: 3
# 暂时不能修改,会报错
#discovery.zen.ping.multicast.enabled: false
#
# For more information, consult the zen discovery module documentation.
#
# ---------------------------------- Gateway -----------------------------------
#
# Block initial recovery after a full cluster restart until N nodes are started:
#
# 暂时不能修改,会报错
#gateway.type: local
#gateway.expected_nodes: 9
# 期望在线的节点数量
gateway.recover_after_nodes: 5
#
# For more information, consult the gateway module documentation.
#
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true
# 插件访问权限配置
http.cors.enabled: true
http.cors.allow-origin: "*"
下一篇: Idea使用说明