ElasticSearch集群的故障与恢复机制

一、故障转移机制

什么叫做故障转移呢?

集群的master节点会监控集群中的节点状态,如果发现有节点宕机,会立即将宕机节点的分片数据迁移到其它节点,确保数据安全,这个叫做故障转移。

转移过程

下图是正常集群的状态,node1是主节点,其它两个节点是从节点

突然,node1发生了故障,如下图

宕机后的第一件事,需要重新选主,例如选中了node2

node2成为主节点后,会检测集群监控状态,发现:shard-1副本节点、shard-0没有主分片节点,因此需要将node1上的数据迁移到node2、node3

二、节点故障

发生故障前,下面是test7索引库分片以及副本的分布情况

只有一个节点宕机 

我们观察下如果三个节点有一个节点宕机了,上文的test7的分片和副本会有哪些变化

首先,我们关闭node-2节点,docker pause node-2

我们可以看到,原本的node-2节点变成了Unassigned,其内部的分片以及副本已经随着节点的宕机而数据丢失了,所以此时集群处于red状态,我们再看看node-1和node-3中,虽然node2宕机了,但是由于我们做了分片与备份,索引仍然可以正常的工作。

事实上,原本在node-2的2号分片移动到了node-1节点,在使用es集群的过程中,一定要注意分片和副本的使用,保证我们整个集群的高可用性

两个节点宕机

由于两个节点宕机,只有一个节点存活,并没有达到集群节点的半数,所以集群应该无法对外提供服务了

我们关闭以下node-3节点看下情况,docker pause node-3

通过Cerebro我们发现整个集群已经无法进行访问了

三、节点恢复

我们先启动node2节点,docker unpause node-2

集群已经能够恢复访问了

此时我们在两个节点可用的情况下创建一个有三分片,两个副本的索引

PUT test8
{
  "settings":{
    "index":{
        "number_of_shards" : "3",
      "number_of_replicas" : "2"
    }
  }
}

如下所示,分片与副本的分布没有问题,有三个副本未分配(因为单个的分片数+副本数<节点总个数)

 我们再恢复node-3,docker unpause node-3

所有的未分配副本移动到了node-3节点。

猜你喜欢

转载自blog.csdn.net/qq_46248151/article/details/144507039
今日推荐