Elasticsearch8.1 -- 3. 配置Elasticsearch (重要配置项 + 断路器配置)

配置 Elasticsearch

Elasticsearch 提供了良好的默认值,并且只需要很少的配置即可完成启动。

  • 动态更新集群的配置
    通过 PUT /_cluster/settings 可以更改正在运行集群的大多数配置。

    PUT /_cluster/settings
    {
     "persistent" : {
       "indices.recovery.max_bytes_per_sec" : "50mb"
     }
    }
    
  • elasticsearch.yml 文件静态设置
    通过在启动es前, 更改 elasticsearch.yml 文件, 静态初始化es的配置状态。

  • Elasticsearch 存在4种 configure 方法, 优先按顺序应用: Transient 瞬态设置, Persistent 持续设置, elasticsearch.yml 设置, Default value 默认设置值
    不建议使用 Transient setting 瞬态设置 来设置集群, 避免集群变得不稳定。 优先使用 默认值 > elasticsearch.yml > Persistent 持续设置

配置文件位置

Elasticsearch 有三个配置文件:

  • elasticsearch.yml 用于配置 Elasticsearch
  • jvm.options 用于配置 Elasticsearch JVM 设置
  • log4j2.properties 用于配置 Elasticsearch 日志记录

配置文件中环境变量的替换方式

使用配置文件中的符号引用的环境变量 ${...} 将替换为环境变量的值。例如:

node.name:    ${HOSTNAME}
network.host: ${ES_NETWORK_HOST}

重要的elasticsearch配置项

  • (静态)路径设置
    path.data: es索引的数据流写入的目录。
    path.logs: es索引的日志写入的目录。
    path:
      data: /var/data/elasticsearch
      logs: /var/log/elasticsearch
    
    默认情况下, 建议通过.tar.gz.zip 压缩包方式安装的Elasticsearch , datalogs 位于 $ES_HOME 下。通过docker 安装的Elasticsearch, datalogs 位于 $ES_HOME 外(即挂载外部存储盘)。
  • (静态)集群名称设置
    只有同一个集群名称, 才能加入同一个集群。

    cluster.name: logging-prod
    
  • (静态)节点名称设置
    node.name 用作 Elasticsearch 特定实例的人类可读标识符。

    node.name: prod-data-2
    
  • (静态)网络主机设置
    默认值为 127.0.0.1。 当该值修改后,Elasticsearch 假定您正在从开发模式转移到生产模式,并将许多系统启动检查从警告升级为异常。

    network.host: 192.168.1.10
    
  • 集群发现相关设置

    • 自动引导
      ES节点在无任何配置修改的情况下启动, 会被识别为开发环境, Elasticsearch 会检测 127.0.0.1 本机环境下的9300~9305端口, 形成一个开发集群。

    • 种子发现
      ES节点如果配置了以下任何设置 discovery.seed_providers(静态), discovery.seed_hosts(静态), cluster.initial_master_nodes(静态),则不会发生自动引导。

    • discovery.seed_providers(静态) 使用场景:设置ES使用哪种类型的种子地址发现机制。 默认为从 discovery.seed_hosts(静态) 中获取种子节点地址。 除discovery.seed_hosts(静态)外, 还有 file-based seed hosts provider, EC2 hosts provider, Azure Classic hosts provider 等插件发现机制。

    • discovery.seed_hosts(静态) 使用场景: 当一个新节点需要加入一个集群A, 需要在 discovery.seed_hosts 配置一个或多个集群A内的节点,以便新节点可以连通集群。

        discovery.seed_hosts:
         - 192.168.1.10:9300
         - 192.168.1.11
         - seeds.mydomain.com
         - [0:0:0:0:0:ffff:c0a8:10c]:9301
      
      1. discovery.seed_hosts(静态) 列表节点数量建议 >= 3。
      2. 需要指定host的port,默认port=9300
    • cluster.initial_master_nodes(静态) 使用场景: 当集群初次启动时, 需要在 cluster.initial_master_nodes 配置一个或多个集群A内的节点, 用于在es集群初始化时选举主节点master

      cluster.initial_master_nodes:
         - master-node-a
         - master-node-b
         - master-node-c
      

      该配置仅集群第一次启动时才需要。 当集群启动后, 已经加入集群的节点会将此信息存储在 $ES_HOME/data 文件夹中, 后续加入集群的节点会从 主节点master 中获取到这部分信息。

      1. 必须在设置 cluster.initial_master_nodes(静态) 的每个节点上设置相同的节点列表,以确保在引导期间仅形成一个集群,从而避免数据丢失的风险。
      2. cluster.initial_master_nodes(静态) 列表节点数量建议 >= 3。
      3. 可以使用 IP:portnode.name 方式指定节点, 强烈建议使用 node.name, 减少没必要的复杂度。
  • (静态)堆大小设置
    默认情况下,Elasticsearch 会根据节点的角色和总内存自动设置JVM堆大小。 这里建议生产环境尽量不做改动。
    手动配置在 jvm.options 文件中:

    -Xms2g
    -Xmx2g
    
  • (静态)JVM堆转储存路径位置
    默认情况下,Elasticsearch 将 JVM 配置为将内存不足异常的堆转储到默认数据目录。在 Linux 和 MacOS以及Windows发行版上,该data目录位于 Elasticsearch 安装的根目录下。
    手动配置在 jvm.options 文件中:

    -XX:HeapDumpPath=...
    

断路器设置

Elasticsearch 断路器,用于防止操作导致 OutOfMemoryError。每个断路器都指定了它可以使用多少内存的限制。

  • Parent circuit breaker 父级断路器
    用于统一控制es内存使用量, 超过阈值会触发熔断。通过 indices.breaker.total.use_real_memory (静态)indices.breaker.total.limit(动态) 进行设置。

    indices.breaker.total.use_real_memory(静态) 默认为 true,与 indices.breaker.total.limit(动态) 共同作用。如果为 false, 则使用子熔断器的阈值。
    indices.breaker.total.limit(动态) 整体父断路器的启动限制。与 indices.breaker.total.use_real_memory(静态) 共同作用。

  • Field data-circuit breaker 字段数据断路器
    字段数据断路器 估计将字段加载到 字段数据缓存 中所需的堆内存。如果加载该字段会导致缓存超出预定义的内存限制,则断路器将停止操作并返回错误。

    indices.breaker.fielddata.limit(动态) 请求中断的限制,默认为 JVM 堆的 40%。
    indices.breaker.fielddata.overhead(动态) 与所有现场数据估计相乘以确定最终估计的常数。默认为1.03.

  • Request circuit breaker 请求断路器
    请求熔断器 设置 单次请求造成的数据结构内存需求(例如,用于在请求期间计算聚合的内存)阈值, 超过阈值则终端请求。

    indices.breaker.request.limit(动态) 请求中断的限制,默认为 JVM 堆的 60%。
    indices.breaker.request.overhead(动态) 与所有请求估计相乘以确定最终估计的常数。默认为 1.

  • In flight requests circuit breaker 在飞行中请求断路器
    飞行中的所有请求造成的数据结构内存需求阈值, 超过阈值则中断请求。

    network.breaker.inflight_requests.limit(动态) 飞行中请求中断的限制,默认为 JVM 堆的 100%。这意味着它受为父断路器配置的限制的约束。
    network.breaker.inflight_requests.overhead(动态) 一个常数,所有在飞行中的请求估计乘以以确定最终估计。默认为 2。

  • Script compilation circuit breakr 脚本编译断路器
    与之前的基于内存的熔断器略有不同的是,脚本编译熔断器限制了一段时间内内联脚本编译的次数。

    script.max_compilations_rate(动态) 一定时间间隔内允许编译的唯一动态脚本的数量限制。默认为150/5m,表示每 5 分钟 150 个。

  • Regex circuit breakr 正则表达式断路器
    写得不好的正则表达式会降低集群的稳定性和性能。正则表达式断路器限制了 无痛脚本中正则表达式的使用和复杂性。

    script.painless.regex.enabled(静态) 在无痛脚本中启用正则表达式。 limited(默认, 启用但有限制), true(启用且无限制),false(禁用)
    script.painless.regex.limit-factor(静态) 限制无痛脚本中正则表达式可以考虑的字符数。Elasticsearch 通过将设置值乘以脚本输入的字符长度来计算此限制。Elasticsearch 仅在 script.painless.regex.enabled = limited时应用此限制。

    例如,输入foobarbaz的字符长度为9。If script.painless.regex.limit-factor is 6,正则表达式foobarbaz 最多可以考虑 54 (9 * 6) 个字符。如果表达式超过此限制,它会触发正则表达式断路器并返回错误。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容