内核增强版高级特性应用

阿里云Elasticsearch内核增强版的高级特性Indexing Service索引构建服务和Openstore智能混合存储,广泛应用于海量存储日志场景。本文从实践应用入手,帮助您快速使用阿里云ES内核增强版的高级特性功能。

相关文档

建议您优先完成最佳实践,熟悉整个操作流程。

分类

文档

高级特性介绍

7.10内核增强版实例支持开启高级特性。高级特性包括:

最佳实践

迁移

说明

ES数据迁移到OpenStore存储前,需提前在源集群中将索引segment forcemerge为1,否则数据迁移到OpenStore后查询性能降低。

内核增强版实例使用须知

  • 索引存储到Openstore自定义冷热存储后,将处于只读状态。不再支持将新数据写入Openstore索引,并且不支持通过修改index.blocks.write参数为null控制索引写入,否则索引将异常。

  • 在Indexing Service实例中数据托管不支持自定义分词类插件、IK词典、同义词词典等的应用。

  • 内核增强版存储及托管服务按照写入流量、存储空间进行按量计费。详细信息,请参见ES计费项

  • 您可以在实例详情页的基本信息页面的节点可视化区域,查看Indexing Service当天写入总流量、托管总数据量、OpenStore截止到昨日存储用量和OpenStore存储当前实时预估用量等离线监控数据,一般1小时统计一次数据。

  • OpenStore存储一般无空间上限限制,建议OpenStore存储按照单节点最大存储数据容量30 TB规划集群存储的总数据量。更多限制说明,请参见智能混合存储使用限制自定义冷热存储使用限制

  • 购买内核增强版实例后,建议在接入生产流量前提前配置好集群,避免集群应用生产后因频繁修改配置需要多次重启。具体操作请参考业务依赖集群YML配置内核增强版必配

  • 使用内核增强版实例推荐使用datastream配置ILM rollover控制索引流创建,降低创建索引频率,减少小索引个数。频繁索引或小索引较多,会加重主节点数据管理能力,影响实例稳定性。

  • 业务数据写入Indexing Service前,请结合业务写入情况评估实例级别写入流量、Put Mapping操作和单分片级别的最大写入流量,如果写入流量超过限定值,将返回429状态码。您可以参考以下情况进行优化。更多限制说明,请参见Indexing Service使用限制

  • 限流

    限流值

    优化建议

    实例级别限流

    写入流量最大为200 MB/s

    建议业务控制写入流量,如果您有更大的使用需求,请提交工单

    Put Mapping操作

    Put Mapping最大为50 tps/s

    建议您提前定义索引模板,在模板中指定Mapping,降低Put Mapping操作,否则大量的字段创建、更新极易触发限流。具体操作,请参见配置内容模板

    单分片流量

    • 不带主键写入流量最大为10 MB/s

    • 带主键写入流量最大为5 MB/s

    按照整体业务流量及写入索引分片总数评估单分片流量,可适当增加主分片数提高索引流量。

  • 执行GET _cat/tasks?v 命令时可能会看到apack/cube/metadata/sync相关任务,该任务为Indexing Service数据同步任务,禁止取消该任务,如被清理,请尽快使用POST /_cube/meta/sync命令恢复,否则影响业务写入。

  • 日志场景一般管理的索引数、数据量比较大,而大批量删除索引或数据(如减少TB级别索引副本数),可能会影响节点稳定性,建议避免一次性大批量删除索引,结合ILM管理索引生命周期,将大数据量索引建议拆分成小索引。

  • 索引存储到Openstore智能混合存储后,将处于只读状态。少量写入场景且集群压力未达到瓶颈时,可将index.blocks.write修改为null实现新数据写入,写完后请将索引置为只读。

内核增强版实例必配

购买阿里云ES内核增强版实例后,请进行以下配置:

  1. Openstore混合存储在可维护窗口期内采用蓝绿变更方式进行升级,您可以在实例基本信息页面指定业务低峰为可维护时间段。

  2. 如果需要通过Kibana访问ES实例,需配置ES私网白名单。具体操作,请参见配置Kibana公网或私网访问白名单

  3. 内存大于32 GB的实例需要手动将默认的CMS垃圾回收器修改为G1垃圾回收器,以提高GC回收效率。具体操作,请参见配置垃圾回收器

    说明

    内存大于32GB的内核增强版实例包括:

    • 开启OpenStore智能混合或自定义冷热存储的实例.

    • Indexing Service数据节点大于32 GB的实例。

  1. 实例开启自动创建索引或通过API按需配置自动创建索引范围。更多信息,请参见配置YML参数

    PUT /_cluster/settings
    {
    "persistent": {
    "action": {
    "auto_create_index": "true"
    }
    }
    }
    //仅对test开头的业务索引开启自动创建功能
    PUT /_cluster/settings
    {
      "persistent": {
        "action": {
          "auto_create_index": "+.*,+test*,-*"
        }
      }
    }
  2. 针对不同存储类型的内核增强版实例,请按照以下要求配置索引生命周期策略和索引模板。具体操作,请参见创建索引模板

    • Indexing Service+云盘存储:按照功能提示,完成索引生命周期策略配置(取消托管时间)和索引模板配置(Settings,Mapping,Aliases)。

      说明

      数据写入实例后,索引默认处于托管状态,索引Settings中的index.apack.cube.following_index参数为true。

      • 如果您通过API自定义创建模板,请务必将index.apack.cube.following_index参数设置为true。

      • 如果您不想托管索引,请将index.apack.cube.following_index参数设置为false。

    • Indexing Service+OpenStore智能混合存储:按照功能提示,完成索引生命周期策略配置(取消托管时间)和索引模板配置(Settings,Mapping,并关联组合内容模板component-hybrid-openstore-index-template)。

    • Indexing Service+OpenStore自定义冷热存储:按照功能提示,完成索引生命周期策略配置(取消托管时间)和索引模板配置(Settings,Mapping,并关联组合内容模板openstore-index-template)。

    说明
    • 请务必配置好索引模板,否则数据将不会被托管或转存到OpenStore中。

    • 强烈建议在索引模板中指定Mapping,否则大量的字段创建、更新极易触发限流。

    • 如果写入的索引中没有相关依赖信息,索引将不会转存到OpenStore存储。

      实例提供的默认内容模板中均已配置好OpenStore存储相关的依赖,您可以直接调用组合内容模板。禁止对默认组合模板进行修改,如果需要自定义组合模板可直接复制默认组合模板中的内容。

  3. 如果开启OpenStore智能混合存储,shard副本数须大于等于1,用于保证本地存储写入加速的可靠性。详细信息,请参见智能混合存储使用限制

  4. 配置集群一键报警(磁盘,CPU,内存等)和指标报警(集群分片数,节点个数等),当资源达到警戒值时,请及时扩容或限流。具体操作请参见配置集群报警配置指标报警

  5. ES 7.x版本实例的单机分片数限制为1000,如果分片数超过1000*数据节点个数,将无法创建新索引,可通过调整参数max_shards_per_node解决。

    PUT _cluster / settings {
    	"persistent": {
    		"cluster": {
    			"max_shards_per_node": "5000"
    		}
    	}
    }

提升实例性能的方法

  • 写入场景中如果指定主键ID写入,会消耗大量的计算资源,建议您将主键值存储为独立的字段,让ES自动添加主键。

  • 集群segment数(例如20万)越多,对查询性能越不利,内核增强版实例内存为64 GB,建议按照单机5000评估segment数,当超过5000时可适当缩短取消托管任务时间。例如:从默认的3天调整为2天触发取消托管,降低segment数,提高查询性能。

  • 关注fielddata监控指标。如果fielddata内存超过1 GB,排查fielddata内存使用率较高的原因,优化查询语句,定期清理fielddata缓存。更多信息,请参见fielddata内存使用率高问题的排查与处理方法

    清理fielddata缓存的脚本示例如下,其中<password><host>需要替换为您的ES实例的密码和私网地址。

    ###在同vpc网络的ECS服务器上配置crontab定时任务,在业务低峰期执行清理fielddata缓存。
    
    vimclear_fielddata.sh
    #!/bin/bash
    curl-XPOST-u elastic:<password> http://<host>/_cache/clear?fielddata=true"
    #为脚本赋予可执行权限
    chmoda+xclear_fielddata.sh
    #脚本执行交由crontab执行
    crontab-e
    00***sh/home/elastic/clear_fielddata.sh>/dev/null&2>&1

  • 内核增强版实例相比商业版实例在存储量级和成本上有优势,在查询场景,建议通过range控制查询落在热节点索引上,提高查询性能。

  • 如果业务查询中存在range和sort,建议在索引或索引模板中指定sort.field和sort.order,并配置points.same_sort_order_as_index_sort参数,写入阶段提前实现预排序,提高查询性能。

    1. range字段和sort排序字段要一致,最好指定一个时间字段。

    2. 创建索引模板时,mapping中提前指定要排序的时间字段。

    示例如下,其中points.same_sort_order_as_index_sort主要实现bkd排序顺序和index sort顺序一致,提高range查询性能。

    说明

    仅7.10版本且内核1.8.0及以上的实例提供points.same_sort_order_as_index_sort参数。

    PUT /_index_template/test-template
    {
      "index_patterns" : ["test*"],
      "priority" : 1,
      "template": {
        "settings" : {
          "number_of_shards" : 2,
          "sort.field" : [
            "timestamp"
          ],
          "sort.order" : [
            "desc"
          ],
          "points.same_sort_order_as_index_sort" : "true"
        },
        "mappings": {
          "properties": {
          "age":    { "type": "integer" },  
          "email":  { "type": "keyword"  }, 
          "timestamp":   { "type": "date"  }     
        }
        }
      }
    }

    更多信息,请参见index sorting官网说明

  • 海量写入场景中,如果写入的文档没有指定主键,可开启定向路由,提高写入性能。

    PUT _cluster/settings
    {
      "persistent" : {
        "index.direct_routing.global.enable" : "true"
      }
    }

    更多信息,请参见开启定向路由