Elasticsearch——配置详解

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO

联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬

学习必须往深处挖,挖的越深,基础越扎实!

阶段1、深入多线程

阶段2、深入多线程设计模式

阶段3、深入juc源码解析


阶段4、深入jdk其余源码解析


阶段5、深入jvm源码解析

码哥源码部分

码哥讲源码-原理源码篇【2024年最新大厂关于线程池使用的场景题】

码哥讲源码【炸雷啦!炸雷啦!黄光头他终于跑路啦!】

码哥讲源码-【jvm课程前置知识及c/c++调试环境搭建】

​​​​​​码哥讲源码-原理源码篇【揭秘join方法的唤醒本质上决定于jvm的底层析构函数】

码哥源码-原理源码篇【Doug Lea为什么要将成员变量赋值给局部变量后再操作?】

码哥讲源码【你水不是你的错,但是你胡说八道就是你不对了!】

码哥讲源码【谁再说Spring不支持多线程事务,你给我抽他!】

终结B站没人能讲清楚红黑树的历史,不服等你来踢馆!

打脸系列【020-3小时讲解MESI协议和volatile之间的关系,那些将x86下的验证结果当作最终结果的水货们请闭嘴】

Elasticsearch配置

1、配置文件的位置

Elasticsearch 有三个配置文件:

  • elasticsearch.yml: Elasticsearch 配置文件
  • jvm.options: Elasticsearch JVM 配置文件
  • log4j2.properties: Elasticsearch 日志配置文件

这些配置文件位于配置目录,这个目录的默认位置取决于安装来源是 归档的发行版(tar.gz 或 zip) 还是 安装包的发行版(Debian or RPM packages)。

对于 归档的发行版,配置目录默认位于 $ES_HOME/config。 配置目录可以通过环境变量 ES_PATH_CONF 来修改,比如:

    ES_PATH_CONF=/path/to/my/config ./bin/elasticsearch

对于 安装包的发行版,配置目录默认位于 /etc/elasticsearch

2、JVM配置

可以使用 jvm.options 文件 或 环境变量 ES_JAVA_OPTS 来设置选项。自定义的 JVM 选项文件可以添加到 config/jvm.options.d/

应该永远也不需要修改 jvm.options 根文件,而应该使用自定义的 JVM 选项文件。 自定义 JVM 选项的处理顺序是按字母顺序排列。

JVM 选项文件必须有后缀.options,并包含一个按特殊语法以行分隔的 JVM 参数列表:

  • 仅包含空白的行会被忽略
  • 以#开头的行被视为注释并被忽略
    # JVM heap size
    -Xms4g
    -Xmx4g
    
    # GC configuration 
    # jdk8-13采用cms
    8-13:-XX:+UseConcMarkSweepGC
    8-13:-XX:CMSInitiatingOccupancyFraction=75
    8-13:-XX:+UseCMSInitiatingOccupancyOnly
    # jdk14以上使用 G1
    14-:-XX:+UseG1GC
    
    # JVM temporary directory
    -Djava.io.tmpdir=${ES_TMPDIR}
    
    # heap dumps
    -XX:+HeapDumpOnOutOfMemoryError
    9-:-XX:+ExitOnOutOfMemoryError
    -XX:HeapDumpPath=data
    -XX:ErrorFile=logs/hs_err_pid%p.log
    
    # JDK 8 GC logging
    8:-XX:+PrintGCDetails
    8:-XX:+PrintGCDateStamps
    8:-XX:+PrintTenuringDistribution
    8:-XX:+PrintGCApplicationStoppedTime
    8:-Xloggc:logs/gc.log
    8:-XX:+UseGCLogFileRotation
    8:-XX:NumberOfGCLogFiles=32
    8:-XX:GCLogFileSize=64m
    
    # JDK 9+ GC logging
    9-:-Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m

3、日志配置

Elasticsearch 使用 Log4j 2 进行日志记录。 Log4j 2 可以使用 log4j2.properties 文件进行配置。 Elasticsearch公开了三个属性,${sys:es.logs.base_path}${sys:es.logs.cluster_name} 以及 ${sys:es.logs.node_name},可以在配置文件中引用这些属性来确定日志文件的位置。

${sys:es.logs.base_path}将解析为日志目录,${sys:es.logs.cluster_name} 将解析为集群名称(在默认配置中用作日志文件名的前缀),而${sys:es.logs.node_name}将解析为节点名称(如果明确设置了节点名称)。

示例:

    //如果日志目录(path.logs)为/var/log/elasticsearch,集群名称是production
    
    ${sys:es.logs.base_path} -> /var/log/elasticsearch
    
    ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}.log  -> /var/log/elasticsearch/production.log

4、服务配置

4.1、重要配置
    path:
      data: /var/data/elasticsearch  #数据路径
      logs: /var/log/elasticsearch   #日志路径
    cluster.name: logging-prod       #集群名称
    node.name: prod-data-2           #节点名称
    network.host: 192.168.1.10       #环回地址,单节点配置为本机地址,集群环境配置成0.0.0.0
    discovery.seed_hosts:            #集群中其他节点
       - 192.168.1.10:9300           #可配置ip:prot 
       - 192.168.1.11                #端口是可选的,默认为9300
       - seeds.mydomain.com          #可配置域名,如果主机名解析为多个IP地址,则节点将尝试在所有解析地址上发现其他节点
       - [0:0:0:0:0:ffff:c0a8:10c]:9301  #IPv6地址必须用方括号括起来
    cluster.initial_master_nodes:    #参与选举为主节点的节点列表
       - master-node-a
       - master-node-b
       - master-node-c

4.2、审计安全配置

您可以使用审核日志记录来记录与安全相关的事件,例如身份验证失败、拒绝连接和数据访问事件。此外,还记录通过API对安全配置的更改,例如创建、更新和删除本机和内置用户、角色、角色映射和API密钥

    #(静态)是否启用审计,默认为false。
    xpack.security.audit.enabled  
    #(动态)指定要在审核输出中打印的事件的类型。_all可用于彻底审核所有事件,但通常不鼓励这样做,因为它会变得非常冗长。默认列表值包含:access_denied, access_granted, anonymous_access_denied, authentication_failed,connection_denied, tampered_request, run_as_denied, run_as_granted,security_config_change。
    xpack.security.audit.logfile.events.include  
    #(动态)从包含列表中排除指定类型的事件。
    xpack.security.audit.logfile.events.exclude
    #(动态)是否将来自REST请求的完整请求正文作为某种审核事件的属性包含在内,此设置可用于审核搜索查询,默认为false。
    xpack.security.audit.logfile.events.emit_request_body
    #(动态)指定是否将节点名称作为字段包含在每个审核事件中。默认值为false。
    xpack.security.audit.logfile.emit_node_name
    #(动态)指定是否将节点的IP地址作为字段包含在每个审核事件中。默认值为false。
    xpack.security.audit.logfile.emit_node_host_address
    #(动态)指定是否将节点的主机名作为字段包含在每个审核事件中。默认值为false。
    xpack.security.audit.logfile.emit_node_host_name
    #(动态)指定是否将节点id作为字段包含在每个审核事件中。与节点名不同,如果管理员更改配置文件中的设置,节点名的值可能会更改,节点id将在群集重新启动期间保持不变,管理员无法更改它。默认值为true。
    xpack.security.audit.logfile.emit_node_id
    #(动态)用户名或通配符的列表。指定的策略不会为匹配这些值的用户打印审核事件。
    xpack.security.audit.logfile.events.ignore_filters.<policy_name>.users
    #(动态)身份验证领域名称或通配符的列表。指定的策略不会为这些域中的用户打印审核事件。
    xpack.security.audit.logfile.events.ignore_filters.<policy_name>.realms
    #(动态)操作名称或通配符的列表。可以在审核事件的操作字段中找到操作名称。指定的策略不会打印与这些值匹配的操作的审核事件。
    xpack.security.audit.logfile.events.ignore_filters.<policy_name>.actions
    #(动态)角色名称或通配符的列表。指定的策略不会为具有这些角色的用户打印审核事件。如果用户有多个角色,其中一些角色未包含在策略中,则策略将不包含此事件。
    xpack.security.audit.logfile.events.ignore_filters.<policy_name>.roles
    #(动态)索引名称或通配符的列表。当事件中的所有索引都与这些值匹配时,指定的策略将不会打印审核事件。如果该事件涉及多个指数,其中一些指数不在保单范围内,保单将不涵盖该事件。
    xpack.security.audit.logfile.events.ignore_filters.<policy_name>.indices

4.3、断路器设置

Elasticsearch包含多个断路器,用于防止操作导致OutOfMemoryError。每个断路器都指定了它可以使用多少内存的限制。此外,还有一个父级断路器,它指定可以跨所有断路器使用的内存总量。

    #(静态)确定父断路器是应考虑实际内存使用情况(true)还是仅考虑子断路器保留的内存量(false)。默认为true。
    indices.breaker.total.use_real_memory
    #(动态)父断路器启动限制。如果indices.breaker.total.use_real_memory设置为false,则默认值为JVM堆内存的70%,如果indices.breaker.total.use_real_memory设置为true,则默认值为JVM堆内存的95%。
    indices.breaker.total.limit
    #(动态)fielddata断路器的限制。默认为JVM堆内存的40%。
    indices.breaker.fielddata.limit
    #(动态)与所有字段数据估计值相乘以确定最终估计值的常数。默认为1.03。
    indices.breaker.fielddata.overhead
    #(动态)请求断路器的限制,默认为JVM堆内存的60%。
    indices.breaker.request.limit
    #(动态)所有请求估计值都将与该常数相乘以确定最终估计值。默认为1。
    indices.breaker.request.overhead
    #(动态)运行中请求断路器的限制,默认为JVM堆的100%。这意味着它受到为主断路器配置的限制的约束。
    network.breaker.inflight_requests.limit
    #(动态)一个常数,所有进行中请求估计值都将与该常数相乘以确定最终估计值。默认为2。
    network.breaker.inflight_requests.overhead
    #(动态)记帐断路器的限制,默认为JVM堆的100%。这意味着它受到为主断路器配置的限制的约束。
    indices.breaker.accounting.limit
    #(动态)与所有计费估计值相乘以确定最终估计值的常数。默认为1。
    indices.breaker.accounting.overhead
    #(动态)限制在特定间隔内允许编译的唯一动态脚本的数量。默认为150/5m,即每5分钟150次。
    script.max_compilations_rate
    #(静态)在脚本中启用regex,默认值为limited。编写不好的正则表达式会降低集群的稳定性和性能。
    script.painless.regex.enabled
    #(静态)限制脚本中正则表达式可以考虑的字符数。Elasticsearch通过将设置值乘以脚本输入的字符长度来计算此限制。
    script.painless.regex.limit-factor

4.4、分片分配和路由配置

碎片分配是将碎片分配给节点的过程。这可能发生在初始恢复、副本分配、重新平衡期间,或者在添加或删除节点时。主服务器的主要角色之一是决定将哪些碎片分配给哪些节点,以及何时在节点之间移动碎片以重新平衡集群。

    #(动态)设置来控制碎片分配和恢复。重新启动节点时,此设置不会影响本地主碎片的恢复。具有未分配主碎片副本的重新启动节点将立即恢复该主碎片,前提是其分配id与集群状态中的活动分配id之一匹配。
    #all-(默认)允许为所有类型的碎片分配碎片。
    #primaries-仅允许为主碎片分配碎片。
    #new_primaries-仅允许为新索引的主碎片分配碎片。
    #none-任何索引都不允许任何类型的碎片分配。
    cluster.routing.allocation.enable
    #(动态)一个节点上允许进行多少并发传入碎片恢复。传入恢复是在节点上分配目标碎片(很可能是副本,除非碎片正在重新定位)的恢复。默认为2。
    cluster.routing.allocation.node_concurrent_incoming_recoveries
    #(动态)一个节点上允许进行多少并发传出碎片恢复。传出恢复是在节点上分配源碎片(除非碎片正在重新定位
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值