• Elasticsearch(二)- 索引-分片过滤器与延迟再分配


    索引分片分配

    目的: 索引的分片根据节点的一些属性来分配到不同的节点;

    分片过滤器

    设置规则:

    • index.routing.allocation.include.{attribute}
      Assign the index to a node whose {attribute} has at least one of the comma-separated values.
    • index.routing.allocation.require.{attribute}
      Assign the index to a node whose {attribute} has all of the comma-separated values.
    • index.routing.allocation.exclude.{attribute}
      Assign the index to a node whose {attribute} has none of the comma-separated values.

    自定义属性:

    node.attr.size: medium
    
    • 1

    设置示例:

    curl -X PUT "localhost:9200/test/_settings?pretty" -H 'Content-Type: application/json' -d'
    {
    "index.routing.allocation.include.size": "big,medium"
    }
    '
    
    • 1
    • 2
    • 3
    • 4
    • 5

    以上设置将test索引的分片分配到设置了big,medium属性的节点.

    自身属性:
    _name
    _host_ip
    _publish_ip
    _ip
    _host
    _id
    _tier

    使用示例:

    curl -X PUT "localhost:9200/test/_settings?pretty" -H 'Content-Type: application/json' -d'
    {
      "index.routing.allocation.include._ip": "192.168.2.*"
    }
    '
    
    • 1
    • 2
    • 3
    • 4
    • 5

    节点断开后, 延迟再分配

    当一个节点离开集群, 主节点需要进行分片再分配, 步骤如下:
    ● 将副分片提升为主分片, 替换 不可用节点 上的所有主分片.
    ● 分配副分片, 替换不可用节点上丢失的副分片.
    ● 在剩余的节点上均匀的重新分配分片.

    这种分片重新分配会给集群带来大量的额外负载, 假设有如下场景:

    ● 节点5失去了网络连接.
    ● master节点将节点5上的 主分片对应的副分片提升为主分片.
    ● master节点在可用的数据节点上重新分配副分片.
    ● 每个新的副分片都跨网络生成主分片的完整副本.
    ● 更多的分片被移动, 以重新平衡集群.
    ● 此时, 如果节点5 的网络恢复了.
    ● master节点需要重新分配分片来保证集群平衡.

    可以通过index.unassigned.node_left.delayed_timeout 该参数来动态设置再分派的延迟时间, 默认1m.
    示例:

    curl -X PUT "localhost:9200/_all/_settings?pretty" -H 'Content-Type: application/json' -d'
    {
      "settings": {
        "index.unassigned.node_left.delayed_timeout": "5m"
      }
    }
    '
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    设置分片恢复优先级

    index.priority

    示例:

    curl -X PUT "localhost:9200/index_4/_settings?pretty" -H 'Content-Type: application/json' -d'
    {
      "index.priority": 1
    }
    '
    
    • 1
    • 2
    • 3
    • 4
    • 5

    设置冷热数据层

    ● 内容层节点:处理诸如产品目录之类的内容的索引和查询负载。
    ● 热层节点:处理诸如日志或指标之类的时间序列数据的索引负载,并保存您最近,最常访问的数据。
    ● 暖层节点:保存的时间序列数据访问频率较低,并且很少需要更新。
    ● 冷层节点:保存时间序列数据,这些数据偶尔会被访问,并且通常不会更新。

    elasticsearch.yml中配置.

    node.roles: ["data_hot", "data_content"]
    
    • 1

    默认将index.routing.allocation.include._tier_preference 设置为data_content;

    索引操作限制

    • index.blocks.read_only: 设置为true , 表示索引元数据和索引可读; 否则为允许写入.
    • index.blocks.read_only_allow_delete: 除了read_only之外 , 允许删除索引.
    • index.blocks.read: 除了read_only之外 , 允许删除索引.
    • index.blocks.write: 除了read_only之外 , 允许删除索引.
    • index.blocks.metadata: 除了read_only之外 , 允许删除索引.

    开启慢查询日志

    {
      // 查询时间大于10s, 打印一个warn类型的日志
      "index.search.slowlog.threshold.query.warn": "10s",
      // 查询时间大于5m, 打印一个info级别的日志
      "index.search.slowlog.threshold.query.info": "5s",
      "index.search.slowlog.threshold.query.debug": "2s",
      "index.search.slowlog.threshold.query.trace": "500ms",
      "index.search.slowlog.threshold.fetch.warn": "1s",
      "index.search.slowlog.threshold.fetch.info": "800ms",
      "index.search.slowlog.threshold.fetch.debug": "500ms",
      "index.search.slowlog.threshold.fetch.trace": "200ms"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    示例:

    curl -X PUT "localhost:9200/my-index-000001/_settings?pretty" -H 'Content-Type: application/json' -d'
    {
      "index.search.slowlog.threshold.query.warn": "10s",
      "index.search.slowlog.threshold.query.info": "5s",
      "index.search.slowlog.threshold.query.debug": "2s",
      "index.search.slowlog.threshold.query.trace": "500ms",
      "index.search.slowlog.threshold.fetch.warn": "1s",
      "index.search.slowlog.threshold.fetch.info": "800ms",
      "index.search.slowlog.threshold.fetch.debug": "500ms",
      "index.search.slowlog.threshold.fetch.trace": "200ms"
    }
    '
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    数据预加载

    示例:

    curl -X PUT "localhost:9200/my-index-000001?pretty" -H 'Content-Type: application/json' -d'
    {
      "settings": {
        "index.store.preload": ["nvd", "dvd"]
      }
    }
    '
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    也可以在elasticsearch.yml中配置.

    事务日志文件

    es将操作日志记录到translog, 然后通过同步或者异步的方式持久化到磁盘.
    ● index.translog.sync_interval: 多长时间将translog同步到磁盘并提交一次, 默认5S.
    ● index.translog.durability: 有两种值: request 和 async;
    ○ request: 将translog持久化到磁盘之后返回.
    ○ async: 异步将translog持久化到磁盘.
    ● index.translog.flush_threshold_size: translog的最大值, 达到该值必须刷新到 Lucene.

  • 相关阅读:
    【工程伦理】脑机接口技术中的伦理问题分析
    从零搭建基于SpringCloud Alibaba 鉴权中心服务(详细教程)
    idea 通过tomcat 配置 https方式访问
    leaflet入门使用教程
    C语言经典面试题目(十二)
    【Android Gradle 插件】Gradle 构建机制 ④ ( Gradle 构建生命周期 | 初始阶段 | 配置阶段 | 执行阶段 )
    读书笔记:《Kubernetes:快速入门》
    PostgreSQL设置主键从1开始自增
    SWT/ANR问题--Dump时间过长导致的SWT
    C++入门(上)
  • 原文地址:https://blog.csdn.net/qq_37740841/article/details/127923904