前面主要学习了ElasticSearch分布式集群的存储过程中集群、节点和分片的知识(ElasticSearch 5学习(6)——分布式集群学习分享1),下面主要分享应对故障的一些实践。

应对故障

前面说了很多关于复制分片可以应对节点失效,很好保证集群的安全性,下面我们可以尝试杀掉第一个节点的进程,我们的集群变化成如下(所有的操作都是ElasticSearch自动处理):

我们杀掉的节点是一个主节点。一个集群必须要有一个主节点才能使其功能正常,所以集群做的第一件事就是各节点选举了一个新的主节点:Node 2。

主分片1和2在我们杀掉Node 1时已经丢失,我们的索引在丢失主分片时不能正常工作。如果此时我们检查集群健康,我们将看到状态red:不是所有主分片都可用!

幸运的是丢失的两个主分片的完整拷贝存在于其他节点上,所以新主节点做的第一件事是把这些在Node 2和Node 3上的复制分片升级为主分片,这时集群健康回到yellow状态。这个提升是瞬间完成的,就好像按了一下开关。

为什么集群健康状态是yellow而不是green?我们有三个主分片,但是我们指定了每个主分片对应两个复制分片,当前却只有一个复制分片被分配,这就是集群状态无法达到green的原因,不过不用太担心这个:当我们杀掉Node 2,我们的程序依然可以在没有丢失数据的情况下继续运行,因为Node 3还有每个分片的拷贝。

如果我们重启Node 1,集群将能够重新分配丢失的复制分片,集群状况与上一节的 图5:增加number_of_replicas到2 类似。如果Node 1依旧有旧分片的拷贝,它将会尝试再利用它们,它只会从主分片上复制在故障期间有数据变更的那一部分。

故障实践1

上面是关于ElasticSearch在遇到故障时候的理论部分,下面我们开始实际操作。

查看目前集群状态

我们回顾一下之前的blogs索引,在结束最后的状态:

PUT /blogs
{
"settings" : {
"number_of_shards" : 3, (主分片个数)
"number_of_replicas" : 2, (每个主分片的复制分片个数)
}
}

切断节点

为了模拟这种情况,在我们自己的电脑上,直接用kill命令即可:

查看集群的状态

很正确,就是理论内容所描述中间会存在red的瞬间。

等·

等·

等·

可是等了半天,结果一直是red状态的结果,这是为什么呢?注意看提示无法连接到http://localhost:9200,突然意识到,我们关闭的节点正好是9200端口的Node 1节点。所以我们需要修改kibana.yml配置文件的elasticsearch.url项:

再次查看集群的状态

终于,可以看到我们想要的结果,ElasticSearch集群正如上面所说的重新选Node 2作为新的主节点:

我们还可以注意到集群的健康状况从绿色变成了黄色,这是因为我们设置每个主节点2个复制分片,而现在还有一个复制节点处于不可用状态。

故障实践2

回顾之前的一个集群状态,blogs索引只设置一个复制分片的情况下:

如果在这种情况下,我们把其中的任何一个节点关闭,会出现什么效果呢?我们分析看,至少我们关闭任何一个节点都能保所有的分片都还能存在。比如我们删除Node 2节点,正常情况下,Node 2中的分片0作为主分片被删除后,主节点会分配Node 1节点下复制分片0重新作为主分片0,而Node 2中的分片1本身是复制分片,直接删除即可,但是ElasticSearch集群,除此之外还会不会有其他操作。那就是,从新在两个节点中把所有的复制分片都置为可用。下面我们看结果:

首先我们看到的和我们前面分析的一样,主节点会分配Node 1节点下复制分片0重新作为主分片0,但是也可以看到现在集群的健康状况是黄色,因为存在复制节点处于不可用状态。我们继续等。。。:

终于我们可以看到,ElasticSearch集群确实会把所有的复制节点又都置为可用状态,因为节点存在它不拥有的分片,就可以创建这个节点,最大程度的保证高可用性。

实践注意点

在测试过程中,ElasticSearch集群确实可以帮助我们重新分配分片的状态,但是需要注意的是,每次一个节点关闭的时候,集群需要一定的时间去管理,如果这时候我们很快的将两个节点关闭,ElasticSearch集群将无法挽救回没有主分片,也没有复制分片的那些数据,所以测试的时候需要知道这一点。

不过这也反映我们在学习分享1中描述的,如果我们的复制节点足够多的话,我们可以保证高可用的能力就却强大,因为允许节点故障的次数更多,而且我们的节点故障以后,运维又可以将节点重启,继续斗争!!!

总结

现在我们对分片如何使Elasticsearch可以水平扩展并保证数据安全有了一个清晰的认识。真正感受到Elasticsearch天生就是分布式的,确实很强大!

转载请注明出处。

作者:wuxiwei

出处:http://www.cnblogs.com/wxw16/p/6188560.html

ElasticSearch 5学习(7)——分布式集群学习分享2的更多相关文章

  1. ElasticSearch 5学习(6)——分布式集群学习分享1

    在使用中我们把文档存入ElasticSearch,但是如果能够了解ElasticSearch内部是如何存储的,将会对我们学习ElasticSearch有很清晰的认识.本文中的所使用的ElasticSe ...

  2. 一脸懵逼学习Hadoop分布式集群HA模式部署(七台机器跑集群)

    1)集群规划:主机名        IP      安装的软件                     运行的进程master    192.168.199.130   jdk.hadoop      ...

  3. ElasticSearch权威指南学习(分布式集群)

    空集群 只有一个空节点的集群 一个节点(node)就是一个Elasticsearch实例,而一个集群(cluster)由一个或多个节点组成,它们具有相同的cluster.name,它们协同工作,分享数 ...

  4. mac 下搭建Elasticsearch 5.4.3分布式集群

    一.集群角色 多机集群中的节点可以分为master nodes和data nodes,在配置文件中使用Zen发现(Zen discovery)机制来管理不同节点.Zen发现是ES自带的默认发现机制,使 ...

  5. 【Database】Mysql分布式集群学习笔记

    一.sql 的基本操作 (2018年11月29日,笔记) (1)数据库相关操作 创建数据库.查看数据库.删除数据库 #. 创建数据库 create database mytest default ch ...

  6. 超快速使用docker在本地搭建hadoop分布式集群

    超快速使用docker在本地搭建hadoop分布式集群 超快速使用docker在本地搭建hadoop分布式集群 学习hadoop集群环境搭建是hadoop入门的必经之路.搭建分布式集群通常有两个办法: ...

  7. Elasticsearch学习系列七(Es分布式集群)

    核心概念 集群(Cluster) 一个Es集群由多个节点(Node)组成,每个集群都有一个共同的集群名称作为标识 节点(Node) 一个Es实例就是一个Node.Es的配置文件中可以通过node.ma ...

  8. hadoop学习之hadoop完全分布式集群安装

    注:本文的主要目的是为了记录自己的学习过程,也方便与大家做交流.转载请注明来自: http://blog.csdn.net/ab198604/article/details/8250461 要想深入的 ...

  9. hadoop学习通过虚拟机安装hadoop完全分布式集群

    要想深入的学习hadoop数据分析技术,首要的任务是必须要将hadoop集群环境搭建起来,可以将hadoop简化地想象成一个小软件,通过在各个物理节点上安装这个小软件,然后将其运行起来,就是一个had ...

随机推荐

  1. Java MyBatis 插入数据库返回主键

    最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User ...

  2. ASP.NET Core 中间件之压缩、缓存

    前言 今天给大家介绍一下在 ASP.NET Core 日常开发中用的比较多的两个中间件,它们都是出自于微软的 ASP.NET 团队,他们分别是 Microsoft.AspNetCore.Respons ...

  3. Linq表达式、Lambda表达式你更喜欢哪个?

    什么是Linq表达式?什么是Lambda表达式? 如图: 由此可见Linq表达式和Lambda表达式并没有什么可比性. 那与Lambda表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在& ...

  4. HTML5 Boilerplate - 让页面有个好的开始

    最近看到了HTML5 Boilerplate模版,系统的学习与了解了一下.在各种CSS库.JS框架层出不穷的今天,能看到这么好的HTML模版,感觉甚爽.写篇博客,推荐给大家使用.   一:HTML5 ...

  5. 【Net跨平台第一步】逆天带你零基础Linux入门【更新完毕】

    部分讲义:(视频已删,后期以文档形式发布)

  6. HashMap与TreeMap源码分析

    1. 引言     在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...

  7. Java中常用集合操作

    一.Map 名值对存储的. 常用派生类HashMap类 添加: put(key,value)往集合里添加数据 删除: clear()删除所有 remove(key)清除单个,根据k来找 获取: siz ...

  8. CSS常见技巧

    一.CSS Sprite(雪碧图|精灵图)指什么? 有什么作用? CSS雪碧 即CSS Sprite,也有人叫它CSS精灵,是一种CSS图像合并技术,该方法是将小图像和背景图片合并到一张图片上,然后利 ...

  9. Java企业实训 - 01 - Java前奏

    前言: 虽然个人专攻.NET方向,不过由于个人是干教育行业的,方方面面的东西,不能说都必须精通,但肯定多少都会涉及到. 一个菜鸟学员,从啥都不会,经过一步步学习,最后到企业上手掌管一个模块甚至一个项目 ...

  10. php利用root权限执行shell脚本

    vi /etc/sudoers , 为apache用户赋予root权限,并且不需要密码,还有一步重要的修改(我被困扰的就是这个地方) root  ALL=(ALL)  ALL apache  ALL= ...