我们之前说过Elasticsearch可以应对节点故障,接下来让我们尝试下这个功能。如果我们关闭第一个节点,这时集群的状态为Figure 6, “关闭了一个节点后的集群”
Figure 6. 关闭了一个节点后的集群
我们关闭的节点时一个主节点。而集群必须拥有一个主节点来保证正常工作,所以发送的第一件事情就是选举一个新的主节点:Node2
在我们关闭Node1的同时也失去了主分片1 和 2,并且在缺失主分片的时候检索也不能正常工作。如果此时来检查集群的状况,我们看到的状态将会是red:不是所有主分区都在正常工作。
幸运的是,在其他节点上存在着这两个主分片的完整副本,所以新的主节点立即将这些分片在Node2 和 Node3 上对应的副本分片提升为主分片,此时集群的状态将会为yellow 。这个提升主分片的过程是瞬间发生的,如同按下一个开关一般。
为什么我们集群状态是yellow 而不是green呢?虽然我们拥有所有的三个主分片,但是同时我们设置了每个主分片需要对应2份副本分片,而此时只存在一份副本分片。所以集群不能为green的状态,不过我们不必过于担心:如果我们同样关闭了Node2,我们的程序依然可以保持在不丢失任何数据的情况下运行,因为Node3 为每一个分片都保留着一份副本。
如果我们重启Node1,集群可以将缺失的副本分片再次进行分配,那么集群的状态也将如Figure 5, “将参数 number_of_replicas 调大到 2”所示。如果Node1 依然拥有着之前的分片,他将尝试去重用他们,同时仅从主分片复制发生了修改的数据文件。
到目前为止,你应该对分片如何使得Elasticsearch进行水平扩容以及数据保障等知识有了一定了解。接下来我们将讲述关于分片生命周期的更多细节。
