事情起因:

  • 磁盘监控只加了系统盘,漏加数据盘
  • 没有及时发现elasticsearch 数据盘满了
  • elasticsearch shard 崩溃,不能写入新数据
  • 大量shard 处于 INITIALIZING 和 UNASSIGNED 状态

问题解决

#查看cluster 状态 和 shard状态
GET _cluster/health
GET /_cat/shards/
GET _cat/shards?h=index,shard,prirep,state,unassigned.reason

# 等待elasticsearch 自行恢复cluster至只剩下UNASSIGNED状态的未启动shard
# 剩余shard将不能被自动恢复,需要手动恢复

# 将不能自动allocation的shard 手动 reallocation
POST /_cluster/reroute
{
    "commands" : [
        {
          "allocate_replica" : {
                "index" : "lavector.xxxx", "shard" : 0,
                "node" : "lavectorxx"
          }
        }
    ]
}

问题分析

  • 当elasticsearch cluster出现数据问题后,如,一台机器宕机,一台机器数据盘满了等。重启机器或者处理完磁盘问题后,elasticsearch会自动修复cluster的数据
  • 当数据盘的容量达到一定阈值,elasticsearch会停止allocate shard到这台机器上,重试一定次数后 就会状态变为 UNASSIGNED, 需要手动 reallocation
  • 会丢失一部分数据,需要重新从其他地方恢复丢失的数据

参考资料