可能很多人都遇见过,es集群重启之后,有很多的副本分片处于未分配状态,你并且很可能要等很长时间才能恢复,恢复时间和数据量大小有关,半个小时,几个小时甚至一天不等。
下面来介绍一下原因。
集群完全重启的时候,所有的分片都是未分配状态,这是因为要检测重启之后机器是否存在问题,比如说磁盘网络是不是有问题,因此集群之前存储的所有分片的元数据信息都不可用了,(元信息包括:每个节点存储的分片所在位置,以及分片中的主分片坐在的位置),那么有人问?为什么要失效呢,直接重新加载不就行了么,多快。答案是不行,因为数据有可能是有问题的,为了保证数据的安全一致性,master必须重新询问名为一个节点,重新加载分片信息,生成新的元数据信息,这就是分片的重新分配。这个过程是缓慢的,可能涉及到分片的移动,以及主分片的切换,或者是某个副本开不可用的时候的新副本生成。
顺便说一句,每一个分片都有一个ID,这就是Allocation ID.这个id 由master在分配分片的时候决定,并且由数据节点负责保存,紧邻着实际的数据的存储位置,主节点负责追踪包含最新数据的副本