作者:SUNNY
时间:2018-05-24
故障现象
Pending tasks任务一直有堆积,线上createindex等无法完成或创建时间较长。
原因分析
Data node某数据盘故障,创建索引时,master无法完成分片分配,导致任务阻塞,影响后续创建索引等任务。
原因理解
重新梳理看到的现象:
1, create index较慢或者或出现失败
2, pending task有任务堆积
3, GET /_cat/nodes返回500
根据pending task中的任务“shard-failed”,搜索master日志,找到如下一条信息
根据此信息,可能是/data9目录数据目录出现权限问题,但是进入到es数据目录,创建、删除、修改文件权限是正常。比较奇怪。
在官方论坛找到了一篇关于此报错的一个讨论:
https://discuss.elastic.co/t/master-node-error-read-only-file-system/121806
但此讨论与遇到问题不是同一问题。
问题追查,到此陷入困境。
仔细阅读了master的配置文件,但是master实际上并没有配置/data9这个数据目录,但master为什么会有这样报错?
猜测1:由于master机器上有2个es实例,启动时引用错配置文件
验证:验证进程打开的文件句柄,与实际不符。
猜测2:其他节点报错
验证:仔细排查挨个节点的日志,发现一data node同样有相应报错,报错与master错误日志一致。切换到对应目录,确认对应磁盘故障。
实际处理
临时方案:
在对应数据节点,临时下线故障数据目录,重启es实例。
效果验证:
GET /_cluster/pending_tasks常态下为0
tasks: []
GET /_cat/nodes返回正常结果
功能验证正常
说明:分片不能同步情况可以可以通过此接口查看/_cluster/allocation/explain?pretty&pretty
后续跟进:
增加数据盘故障监控
小结
数据节点数据盘故障,会影响到整个集群性能。