为什么Elasticsearch-curator create_index空运行成功但实际执行失败?
问题原因分析
为什么dry-run成功但实际执行失败
Curator的空运行(--dry-run)模式仅校验配置文件的语法、结构合法性,不会真实向Elasticsearch集群发送创建索引的请求,因此只要配置文件本身格式没问题就会返回执行成功,实际运行时才会触发和ES集群的交互、暴露服务端侧的错误。
高概率问题点
- Elasticsearch版本兼容性问题:7.x及以上版本已经废弃了自定义mapping type的能力,你配置中
mappings下的parquet-metrics属于自定义类型,7.x版本默认只允许使用_doc作为唯一类型,8.x版本完全不支持自定义类型,会直接触发服务端报错,这是最常见的原因。 - 副本数配置超过集群节点上限:你配置的
number_of_replicas: 4意味着每个主分片需要对应4个副本分片,算上主分片总共需要至少5个数据节点才能完成分片分配,如果你的集群数据节点数量不足,也可能触发服务端错误。 - 隐藏的配置格式问题:比如
refresh_interval的取值你写的是1s,Curator在传参时如果没有自动补全引号,可能被ES识别为非法参数,不过这个概率较低。
解决方案
- 调整mapping结构适配高版本ES
移除parquet-metrics层级,直接将字段properties放在mappings下即可,修改后的配置示例:
extra_settings: number_of_replicas: 4 number_of_shards: 4 refresh_interval: 1s mappings: properties: lists: properties: success_date_history: type: date process_time_history: type: date stat_delta_seconds_history: type: integer options: type: text '@timestamp': type: date # 剩余其他字段保持原有配置不变,直接放在properties层级下即可
- 调整副本数适配你的集群规模
如果你的集群数据节点数为N,副本数最大可设置为N-1,避免分片无法分配的问题。 - 手动调用ES API获取精准报错
如果修改后仍有问题,可以直接用curl手动调用ES的创建索引接口,拿到更具体的报错信息定位问题:
curl -XPUT http://<你的ES地址>:9200/creating_some_metrics.v1 -H "Content-Type: application/json" -d '{ "settings": { "number_of_replicas": 4, "number_of_shards": 4, "refresh_interval": "1s" }, "mappings": { "properties": { // 填入你的字段配置 } } }'
内容的提问来源于stack exchange,提问作者anthony12345
相关产品推荐
相关产品推荐

