【ElasticSearch】 ElasticSearch集群之分片、副本、故障转移(九)

分片和副本

  为了将数据添加到Elasticsearch,我们需要索引(index)——一个存储关联数据的地方。实际上,索引只是一个用来 指向一个或多个分片(shards)的“逻辑命名空间(logical namespace)”.

  • 一个分片(shard)是一个最小级别“工作单元(worker unit)”,它只是保存了索引中所有数据的一部分。 
  • 我们需要知道是分片就是一个Lucene实例,并且它本身就是一个完整的搜索引擎。应用程序不会和它直接通信。
  • 分片可以是主分片(primary shard)或者是复制分片(replica shard)。 
  • 索引中的每个文档属于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。 
  • 复制分片只是主分片的一个副本,它可以防止硬件故障导致的数据丢失,同时可以提供读请求,比如搜索或者从别的shard取回文档。
  • 当索引创建完成的时候,主分片的数量就固定了,但是复制分片的数量可以随时调整。

故障转移

  集群搭建参考:【ElasticSearch】 ElasticSearch集群(八)

  示例:假设集群一搭建好了,且里面有一个索引test-index,通过elasticksearch-head插件查询,集群状态如下:

  

故障一:数据节点宕机

  1、将data节点node-2停止

    elasticksearch-head插件查询,效果图如下:

    

    过程:node-2数据节点停止 -> 集群状态立刻变为黄色 -> 过一段时间,集群状态恢复到绿色

    说明:

    • 当前集群状态为黄色,表示主节点可用,副本节点不完全可用
    • 过一段时间观察,发现节点列表中看不到node02,副本节点分配到了node01和node03,集群状态恢复到绿色

  2、将data节点node-2恢复

    效果如下:

  

    可以看到,node02恢复后,重新加入了集群,并且重新分配了节点信息。

故障二:Master主节点宕机

  情况1:当有多个节点能成为master节点的集群

    集群三个节点配置,如下,都能成为master节点

1 # 表示该节点会不会作为主节点,true表示会;false表示不会
2 node.master: true
3 # 当前节点是否用于存储数据,是:true、否:false
4 node.data: true

    集群初始状态,如下:  

     

  1、将master节点node-1停止,通过node-3数据节点获取集群状态

     

    可以看到node-2成为了master节点

    过一段时间后,集成状态变为绿色,如下:

    

  2、将node-1启动,效果如下:

    

    注意:在集群搭建中,最好保持3个或3个以上的节点能成为master节点,否则可能无法选举出master节点    

  情况2:只有1个节点能成为master节点的集群

 

  将node-2、node-3节点设置不能成为master节点,配置如下:

1 # 表示该节点会不会作为主节点,true表示会;false表示不会
2 node.master: false
3 # 当前节点是否用于存储数据,是:true、否:false
4 node.data: true

    集群初始状态,如下:

    

  1、将master节点node-1停止,通过node-3数据节点获取集群状态

    

    可以看到包异常:master_not_discovered_exception,且整个ES集群处于写入操作被拒绝状态。

    集群中没有活动的Master服务器时,ES拒绝哪些操作?

    • all:拒绝节点上的所有操作(包括读和写操作)。这也适用于API集群状态读取或写入操作,例如获取索引设置,放置映射和集群状态API。
    • write(默认):写入操作被拒绝。基于最后一个已知的群集配置,读取操作成功。这种情况可能导致部分读取过时的数据,因为此节点可能与群集的其余部分隔离开来。

    可以通过cluster.no_master_block来指定当集群中没有活动的Master服务器时拒绝哪些操作

  2、将master节点node-1恢复

    

    集群自动恢复,且写入正常

原文地址:https://www.cnblogs.com/h--d/p/13123529.html