前言
索引容量管理一直都是 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] https://www.elastic.co/guide/en/elasticsearch/reference/7.10/indices-split-index.html 如果您有其他问题,欢迎您联系火山引擎技术支持服务