elasticsearch - ES Cluster V7.3.1 频繁出现断路异常?
问题描述
我们正在使用 ES v7.3.1,从过去几天开始,由于断路异常,我们的 ES 集群中的分片未分配,我无法理解导致此异常的确切原因,任何帮助都会非常有帮助。
这是我使用命令 GET _cluster/allocation/explain 获得的详细信息
"unassigned_info" : {
"reason" : "ALLOCATION_FAILED",
"at" : "2021-02-12T08:05:40.154Z",
"failed_allocation_attempts" : 1,
"details" : "failed shard on node [WbHklo7iSf6jGj90cP9Y-A]: failed to perform indices:data/write/bulk[s] on replica [segment_index_573179789d2572f27bc73e6b][6], node[WbHklo7iSf6jGj90cP9Y-A], [R], s[STARTED], a[id=SNoWjhhYRXClfVqa6lsDAQ], failure RemoteTransportException[[ip-1-0-104-220][1.0.104.220:9300][indices:data/write/bulk[s][r]]]; nested: CircuitBreakingException[[parent] Data too large, data for [<transport_request>] would be [14311120802/13.3gb], which is larger than the limit of [14247644364/13.2gb], real usage: [14311004440/13.3gb], new bytes reserved: [116362/113.6kb], usages [request=0/0b, fielddata=808714408/771.2mb, in_flight_requests=15836072/15.1mb, accounting=683535018/651.8mb]]; ",
"last_allocation_status" : "no_attempt"
}
解决方案
你能提供集群健康的结果吗?
curl -XGET "http://localhost:9200/_cluster/health?pretty"
你能提供JVM压力指标的结果吗?
由于信息不多,下面我解释一下我在类似的断路情况下发生了什么,以及我在我的情况下做了什么。
我相信批量大小很小,几件事的总和(搜索 + 批量 + 新分片的分配过程)会导致 RAM 填满。
在我知道的情况下,“数据太大”是指 JVM 堆。也许,你已经达到了内存限制,触发了断路器。我敢于认为(很有可能是错误的:/)每个节点的 ram 与配置的断路器的百分比成正比。例如,如果您将断路器设置为 80%,并且在 13.3 GB 时显示错误,则每个节点肯定有 16 GB 的 RAM (100%)。
根据您的断路器配置,作为临时解决方法,您可以临时增加数量。如果您的断路器已经很高,则不建议增加它。
也许您的批量创建倍数索引,倍数索引创建倍数分片。太多的分片填满了内存,因为每个分片创建内存,文件描述符使用内存。在某些情况下,创建新索引的逻辑/模式不正确,它们会无意中生成许多新索引(创建许多分片),而不是仅创建一个索引。
也许你已经处于极限并且你不知道,直到现在你创建了新的索引(因此是新的分片),问题就出现了。
你有多少碎片?
curl -XGET "http://localhost:9200/_cat/shards" | wc -l
有多少分片支持您的每个节点?当您使用分片达到限制偏移量时,您可以减少副本分片的数量,作为临时解决方法。为了完成散装。
对我有用的一个选项是为不太重要的索引禁用临时分片副本。
检查你的分片:curl -XGET "http://localhost:9200/_cat/shards"
curl -X "PUT" "http://localhost:9200/mylessimportant_indices/_settings" \
-H "Content-type: application/json" \
-d $'{
"index" : {
"number_of_replicas":0
}
}' | jq
推荐阅读
- react-native - 如何在odoo消息中添加附件ID?
- python - 如何使用 pandas 数据框有效地更新 mysql 表?
- swift - (逗号,分隔,属性)的唯一性约束如何在 CoreData 中与 Swift 一起使用?
- tensorflow - 如何在 Tensorflow 中正确使用 tf.metrics.mean_iou 在 Tensorboard 上显示混淆矩阵?
- java-8 - Web3J 自动生成 Java 包装器
- python - 根据列排列/排序熊猫数据框数据中的数据
- python - 根据条件连接多个不相等的数据帧
- apple-watch - Apple Watch屏幕左上角怎么放文字
- php - 在另一个命名空间中自动加载命名空间时出错
- dart - RenderCustomMultiChildLayoutBox 对象在布局错误期间被赋予无限大小