Elasticsearch5.X配置说明

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: "*"

你可能感兴趣的:(Elasticsearch,elasticsearch,集群)