云搜索服务中如何拆分索引

容器与中间件中间件技术服务知识库
前言

索引容量管理一直都是 Elasticsearch 集群管理中重要的部分,当索引数据量越来越大,引发性能问题的概率就越大,未来纠错的难度就越大。通常来说,考虑索引大小应该与业务结合,如,在搜索场景中,我们建议单个分片的大小为 20 GB,在日志记录场景中,建议值为 50 GB。 使用 Elasticsearch 集群出现索引分片设置不合理而影响时,我们可以使用 ES 中的 _split API 来扩大主分片数,也就是说,将一个现有的索引拆分为具有更多主分片的索引。本文介绍如何通过_split API快速拆分主分片。

操作步骤

步骤一:导入测试数据

进入到 Kibana 中,点击 Home 按钮,在页面中找到 Add data,在 Sample data 页面中选择 Sample eCommerce orders 示例数据并完成导入操作。 查看索引的主分片数:

GET kibana_sample_data_ecommerce/_settings

输出如下:
{
  "kibana_sample_data_ecommerce" : {
    "settings" : {
      "index" : {
        "number_of_shards" : "1",
        "auto_expand_replicas" : "0-1",
        "provided_name" : "kibana_sample_data_ecommerce",
        "creation_date" : "1654587359612",
        "number_of_replicas" : "1",
        "uuid" : "p8cCaGXUSfebb03nb4KeyA",
        "version" : {
          "created" : "7100299"
        }
      }
    }
  }
}

步骤二:设置索引禁止写入

PUT /kibana_sample_data_ecommerce/_settings
{
  "settings": {
    "index.blocks.write": true
  }
}

步骤三:拆分原索引并配置新索引

这里我们使用 _split API 从原索引 kibana_sample_data_ecommerce 拆分出新索引kibana_sample_data_ecommerce_1,设置新索引的分片数为6,同时我们取消了新索引禁止写入限制。

POST kibana_sample_data_ecommerce/_split/kibana_sample_data_ecommerce_1
{
  "settings": {
    "index.number_of_shards": 6,
    "index.blocks.write": null
  }
}

输出如下:
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "kibana_sample_data_ecommerce_1"
}

步骤四:查看索引拆分进度

当输出结果中没有待拆分的索引时,则说明目前没有正在进行的拆分任务。

GET _cat/recovery?v&active_only

步骤五:检查集群健康状态

这里我们需要检查集群状态,希望看到 "status" : "green",说明此时集群处于健康状态。

GET _cluster/health
使用限制
  1. 集群处于健康状态,建议在低负载时进行此类操作。
  2. 待拆分的索引需要先禁止写入,同时需要保证目标索引不存在。
  3. 提前评估集群有足够的空间完成此操作。
参考文档

[1] https://www.elastic.co/guide/en/elasticsearch/reference/7.10/indices-split-index.html 如果您有其他问题,欢迎您联系火山引擎技术支持服务

30
0
0
0
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论