发现问题
image.png image.png image.png
shard属于unassign的状态, 直接的信息可以看到是failed to create shard. failed to obtain in-memory shard.
shard只有在拥有shard的节点关机重启(与master失去联系, 即master不知道shard的状态才会被重新分配).
所以表象问题有两个:
- shard为什么会重新分配? 如果是节点重启, 为什么?
- 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/
image.png
网友评论