节点快速失联重连导致的shard失败, failed to ob

2023-03-30  本文已影响0人  以梦为马驾驾驾

发现问题


image.png image.png image.png

shard属于unassign的状态, 直接的信息可以看到是failed to create shard. failed to obtain in-memory shard.
shard只有在拥有shard的节点关机重启(与master失去联系, 即master不知道shard的状态才会被重新分配).
所以表象问题有两个:

  1. shard为什么会重新分配? 如果是节点重启, 为什么?
  2. shard为什么不能被创建?

通过查看日志, 得知此节点由于负载过高, full-gc时间过长, 而导致与master的心跳中断, 但是gc结束后, 又迅速重新加入的集群 , 而节点的此shard上正在被关闭, 且一直没有成功关闭.

获取锁的代码: org.opensearch.index.IndexService#createShard. 获取锁失败的根因是因为: closing shard 持有着锁, 且没有放弃. 导致create在超过约定的重试次数后就不再创建了.

由于没有开debug日志, 没有关于为什么close shard的日志.

为什么负载高, 在节点离开集群前, 看到有两个执行了十几秒的查询, 而后在这个shard上还有2m的查询, 应该是它们导致的负载变高

解决:

/_cluster/reroute?retry_failed=true

不会丢失数据, 触发重新分配.

或者重启节点, 就可以释放掉内存锁.但是可能部分丢失数据

GET /_cat/indices?v&health=yellow

查看处于亚健康的index

GET _cluster/allocation/explain

查看为什么分配失败, 原因是什么, 就不用查日志了.

参考:

https://aws.amazon.com/cn/premiumsupport/knowledge-center/opensearch-in-memory-shard-lock/

https://elasticsearch.cn/question/3998

https://github.com/elastic/elasticsearch/issues/23199

image.png
上一篇下一篇

猜你喜欢

热点阅读