zoukankan      html  css  js  c++  java
  • 【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恢复

        

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

  • 相关阅读:
    关于hive开窗函数的问题
    MFC三种不同方式实现图形的保存和重绘---方法一:通过集合类CPtrArray保存点的坐标
    win8 安装VC++ 6.0 出现错误的解决方法
    在数组中进行二分查找找出某数在数组中的下标
    编写自定义的字符串一致性匹配方法,只要两个字符串包含同样的字符, 不管字符的顺序如何,都认为两个字符串一致,如:”aabbcc”和”abcabc”被认为是一致的
    若干个数 以“字符串形式‘从键盘输入,将其转换为 double 型,并求平均数
    使用IO技术,创建一个目录,然后复制一个文件到该目录!实现复制的功能。(在博客园上传的第一份代码)
    easyui datagrid editor可选type
    MVC统计在线人数
    替换SQL字段中的换行符,回车符
  • 原文地址:https://www.cnblogs.com/h--d/p/13123529.html
Copyright © 2011-2022 走看看