elasticsearch专栏:https://www.cnblogs.com/hello-shf/category/1550315.html

一、集群健康

Elasticsearch 的集群监控信息中包含了许多的统计数据,其中最为重要的一项就是集群健康,它在 status 字段中展示为 green 、 yellow 或者 red。

在kibana中执行:GET /_cat/health?v

1 epoch      timestamp cluster        status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
2 1568794410 08:13:30 my-application yellow 1 1 47 47 0 0 40 0 - 54.0%

其中我们可以看到当前我本地的集群健康状态是yellow ,但这里问题来了,集群的健康状况是如何进行判断的呢?

green(很健康)
所有的主分片和副本分片都正常运行。
yellow(亚健康)
所有的主分片都正常运行,但不是所有的副本分片都正常运行。
red(不健康)
有主分片没能正常运行。

注意:

我本地只配置了一个单节点的elasticsearch,因为primary shard和replica shard是不能分配到一个节点上的所以,在我本地的elasticsearch中是不存在replica shard的,所以健康状况为yellow。

二、shard和replica

为了将数据添加到Elasticsearch,我们需要索引(index)——一个存储关联数据的地方。实际 上,索引只是一个用来指向一个或多个分片(shards)的“逻辑命名空间(logical namespace)”. 一个分片(shard)是一个最小级别“工作单元(worker unit)”,它只是保存了索引中所有数据的一 部分。道分片就是一个Lucene实例,并且它本身就是一个完整的搜索引擎。我们的文档存储在分片中,并且在分片中被索引,但是我们的应用程序不会直接与它们通信,取而代之的是,直接与索引通信。 分片是Elasticsearch在集群中分发数据的关键。把分片想象成数据的容器。文档存储在分片中,然后分片分配到你集群中的节点上。当你的集群扩容或缩小,Elasticsearch将会自动在你的节点间迁移分片,以使集群保持平衡。 分片可以是主分片(primary shard)或者是复制分片(replica shard)。

你索引中的每个文档属于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。 理论上主分片能存储的数据大小是没有限制的,限制取决于你实际的使用情况。分片的最大容量完全取决于你的使用状况:硬件存储的大小、文档的大小和复杂度、如何索引 和查询你的文档,以及你期望的响应时间。

复制分片只是主分片的一个副本,它可以防止硬件故障导致的数据丢失,同时可以提供读请 求,比如搜索或者从别的shard取回文档。 当索引创建完成的时候,主分片的数量就固定了,但是复制分片的数量可以随时调整。 让我们在集群中唯一一个空节点上创建一个叫做 blogs 的索引。默认情况下,一个索引被分配5个主分片,一个主分片默认只有一个复制分片。

重点:
shard分为两种:
1,primary shard --- 主分片
2,replica shard --- 复制分片(或者称为备份分片或者副本分片)

需要注意的是,在业界有一个约定俗称的东西,单说一个单词shard一般指的是primary shard,而单说一个单词replica就是指的replica shard。

另外一个需要注意的是replica shard是相对于索引而言的,如果说当前index有一个复制分片,那么相对于主分片来说就是每一个主分片都有一个复制分片,即如果有5个主分片就有5个复制分片,并且主分片和复制分片之间是一一对应的关系。

很重要的一点:primary shard不能和replica shard在同一个节点上。重要的事情说三遍:

primary shard不能和replica shard在同一个节点上

primary shard不能和replica shard在同一个节点上

primary shard不能和replica shard在同一个节点上

所以es最小的高可用配置为两台服务器。

三、master节点、协调节点和节点对等特性

elasticsearch同大多数的分布式架构,也会进行主节点的选举,elasticsearch选举出来的主节点主要承担一下工作:

 集群层面的设置
集群内的节点维护
集群内的索引、映射(mapping)、分词器的维护
集群内的分片维护

不同于hadoop、mysql等的主节点,elasticsearch的master将不会成为整个集群环境的流量入口,即其并不独自承担文档级别的变更和搜索(curd),也就意味着当流量暴增,主节点的性能将不会成为整个集群环境的性能瓶颈。这就是elasticsearch的节点对等特性。

节点对等:

所谓的节点对等就是在集群中每个节点扮演的角色都是平等的,也就意味着每个节点都能成为集群的流量入口,当请求进入到某个节点,该节点就会暂时充当协调节点的角色,对请求进行路由和处理。这是一个区别于其他分布式中间件的很重要的特性。节点对等的特性让elasticsearch具备了负载均衡的特性。在后面对document的写入和搜索会详细介绍该牛叉的特性。

协调节点:

通过上面的分析,我们可以得出一个结论,协调节点其实就是请求命中的那个节点。该节点将承担当前请求的路由工作。

四、扩容

一般的扩容模式分为两种,一种是水平扩容,一种是垂直扩容。

4.1、垂直扩容:

所谓的垂直扩容就是升级服务器,买性能更好的,更贵的然后替换原来的服务器,这种扩容方式不推荐使用。因为单台服务器的性能总是有瓶颈的。

4.2、水平扩容:

水平扩容也称为横向扩展,很简单就是增加服务器的数量,这种扩容方式可持续性强,将众多普通服务器组织到一起就能形成强大的计算能力。水平扩容 VS 垂直扩容用一句俗语来说再合适不过了:三个臭皮匠赛过诸葛亮。

4.3、垂直扩容的过程分析

上面我们详细介绍了分片,master和协调节点,接下来我们通过画图的方式一步步带大家看看横向扩容的过程。

首先呢需要铺垫一点关于自定义索引shard数量的操作

 PUT /student
{
"settings" : {
"number_of_shards" : 3,
"number_of_replicas" : 1
}
}

以上代码意味着我们创建的索引student将会分配三个primary shard和三个replica shard(至于上面为什么是1,那是相对于索引来说的,前面解释过)。

4.3.1、一台服务器

当我们只有一台服务器的时候,shard是怎么分布的呢?

注:P代表primary shard, R代表replica shard。明确一点在后面的描述中默认一个es节点在一台服务器上。

分析一下上面的过程,首先需要明确的两点:

1,primary shard和replica shard不能再同一台机器上,因为replica和shard在同一个节点上就起不到副本的作用了。

2,当集群中只有一个节点的时候,node1节点将成为主节点。它将临时管理集群级别的一些变更,例如新建或 删除索引、增加或移除节点等。

明确了上面两点也就很简单了,因为集群中只有一个节点,该节点将直接被选举为master节点。其次我们为student索引分配了三个shard,由于只有一个节点,所以三个primary shard都被分配到该节点,replica shard将不会被分配。此时集群的健康状况为yellow。

4.3.2、增加一台服务器

接着上面继续,我们增加一台服务器,此时shard是如何分配的呢?

Rebalance(再平衡),当集群中节点数量发生变化时,将会触发es集群的rebalance,即重新分配shard。Rebalance的原则就是尽量使shard在节点中分布均匀,达到负载均衡的目的。

原先node1节点上有p0、p1、p2三个primary shard,另外三个replica shard还未分配,当集群新增节点node2,触发集群的Rebalance,另外三个replica shard将被分配到node2上,即如上图所示。

此时集群中所有的primary shard和replica shard都是active(可用)状态的所以此时集群的健康状况为yellow。可见es集群的最小高可用配置就是两太服务器。

4.3.3、继续新增服务器

继续新增服务器,集群将再次进行Rebalance,在primary shard和replica shard不能分配到一个节点上的原则,这次rebalance同样本着使shard均匀分布的原则,将会从node1上将P1,P2两个primary shard分配到node1,node2上面,然后将node2在primary shard和replica shard不能分配到一台机器上的原则上将另外两个replica shard分配到node1和node2上面。

注意:具体的分配方式上,可能是P0在node2上面也有可能在node3上面,但是只要本着Rebalance的原则将shard均匀分布达到负载均衡即可。

五、集群容灾

分布式的集群是一定要具备容灾能力的,对于es集群同样如此,那es集群是如何进行容灾的呢?接下来听我娓娓道来。

在前文我们详细讲解了primary shard和replica shard。replica shard作为primary shard的副本当集群中的节点发生故障,replica shard将被提升为primary shard。具体的演示如下

集群中有三台服务器,其中node1节点为master节点,primary shard 和 replica shard的分布如上图所示。此时假设node1发生宕机,也就是master节点发生宕机。此时集群的健康状态为red,为什么呢?因为不是所有的primary shard都是active的。

具体的容灾过程如下:

1,重新选举master节点,当es集群中的master节点发生故障,此时es集群将再次进行master的选举,选举出一个新的master节点。假设此时新的主节点为node2。

2,node2被选举为新的master节点,node2将作为master行驶其分片分配的任务。

3,replica shard升级,此时master节点会寻找node1节点上的P0分片的replica shard,发现其副本在node2节点上,然后将R0提升为primary shard。这个升级过程是瞬间完成的,就像按下一个开关一样。因为每一个shard其实都是lucene的实例。此时集群如下所示,集群的健康状态为yellow,因为不是每一个replica shard都是active的。

容灾的过程如上所示,其实这也是一般分布式中间件容灾备份的一般手段。如果你很了解kafka的话,这个就很容易理解了。

  参考文献:

  《elasticsearch-权威指南》

  如有错误的地方还请留言指正。

  原创不易,转载请注明原文地址:https://www.cnblogs.com/hello-shf/p/11543468.html

elasticsearch集群扩容和容灾的更多相关文章

  1. 主从集群搭建及容灾部署redis

    redis主从集群搭建及容灾部署(哨兵sentinel) Redis也用了一段时间了,记录一下相关集群搭建及配置详解,方便后续使用查阅. 提纲 l  Redis安装 l  整体架构 l  Redis主 ...

  2. redis主从集群搭建及容灾部署(哨兵sentinel)

    Redis也用了一段时间了,记录一下相关集群搭建及配置详解,方便后续使用查阅. 提纲 Redis安装 整体架构 Redis主从结构搭建 Redis容灾部署(哨兵sentinel) Redis常见问题 ...

  3. Redis Sentinel集群双机房容灾实施步骤

    概要目标防止双机房情况下任一个机房完全无法提供服务时如何让Redis继续提供服务.架构设计A.B两机房,其中A机房有一Master一Slave和两个Sentinel,B机房只有2个Sentinel,如 ...

  4. PB 级大规模 Elasticsearch 集群运维与调优实践

    PB 级大规模 Elasticsearch 集群运维与调优实践 https://mp.weixin.qq.com/s/PDyHT9IuRij20JBgbPTjFA | 导语 腾讯云 Elasticse ...

  5. Elasticsearch 集群和索引健康状态及常见错误说明

    之前在IDC机房线上环境部署了一套ELK日志集中分析系统, 这里简单总结下ELK中Elasticsearch健康状态相关问题, Elasticsearch的索引状态和集群状态传达着不同的意思. 一.  ...

  6. 实例展示elasticsearch集群生态,分片以及水平扩展.

    elasticsearch用于构建高可用和可扩展的系统.扩展的方式可以是购买更好的服务器(纵向扩展)或者购买更多的服务器(横向扩展),Elasticsearch能从更强大的硬件中获得更好的性能,但是纵 ...

  7. 400+节点的 Elasticsearch 集群运维

    本文首发于InfoQ https://www.infoq.cn/article/1sm0Mq5LyY_021HGuXer 作者:Anton Hägerstrand 翻译:杨振涛 目录: 数据量 版本 ...

  8. elasticsearch集群介绍及优化【转】

    elasticsearch用于构建高可用和可扩展的系统.扩展的方式可以是购买更好的服务器(纵向扩展)或者购买更多的服务器(横向扩展),Elasticsearch能从更强大的硬件中获得更好的性能,但是纵 ...

  9. Elasticsearch 集群优化-尽可能全面详细

    Elasticsearch 集群优化-转载参考1 基本配置 基本配置,5台配置为 24C 125G 17T 的主机,每台主机上搭建了一个elasticsearch节点. 采用的elasticsearc ...

随机推荐

  1. 重读《学习JavaScript数据结构与算法-第三版》- 第6章 链表(一)

    定场诗 伤情最是晚凉天,憔悴厮人不堪言: 邀酒摧肠三杯醉.寻香惊梦五更寒. 钗头凤斜卿有泪,荼蘼花了我无缘: 小楼寂寞新雨月.也难如钩也难圆. 前言 本章为重读<学习JavaScript数据结构 ...

  2. Python笔记_基础

    1.注释 # 单行注释 """ 多行注释,一般用于类说明 """ 或 ''' 多行注释 ''' 2.工作日志 # TODO 说明性文字 记录 ...

  3. 一文看尽Java-Thread

    一.前言      主要分成两部说起:Thread源码解读和常见面试题解答,废话不多说开始: 二.源码解读 首先看下构造函数,构造函数都是通过调用init方法对属性进行初始化,主要是对线程组.线程名字 ...

  4. “adobe premiere中画面和声音不同步” 解决方法

    一.背景 之前在segmentfault上过直播课,直播课有录制回播功能:尝试听了下直播课,发现视频太长了,感觉听起来非常花费学员的时间,在回放中其实有一些直播课里面的内容并不需要,所以准备剪辑一下, ...

  5. HDU - 5128The E-pang Palace+暴力枚举,计算几何

    第一次写计算几何,ac,感动. 不过感觉自己的代码还可以美化一下. 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5128 题意: 在一个坐标系中,有n个 ...

  6. Educational Codeforces Round 44#985DSand Fortress+二分

    传送门:送你去985D: 题意: 你有n袋沙包,在第一个沙包高度不超过H的条件下,满足相邻两个沙包高度差小于等于1的条件下(注意最小一定可以为0),求最少的沙包堆数: 思路: 画成图来说,有两种可能, ...

  7. codeforces 805 E. Ice cream coloring(dfs)

    题目链接:http://codeforces.com/contest/805/problem/E 题意:你有n个节点,这个n个节点构成一棵树.每个节点拥有有si个类型的ice,同一个节点的ice互相连 ...

  8. 2015北京区域赛 Xiongnu's Land

    Wei Qing (died 106 BC) was a military general of the Western Han dynasty whose campaigns against the ...

  9. C++多例模式下对Instance的使用

    最近工作中遇到这样一个问题: 之前N年,公司用的都是一块CPU对应一块物理板,也就是,一块物理板只要一个实例化就可以了----俗称单例模式. 现在突然要一块CPU对应多块物理板,妥妥的多例模式啊.但是 ...

  10. C++数据类型(data type)介绍

    在编写程序时,数据类型(data type)定义了使用存储空间的(内存)的方式. 程序员通过定义数据类型(data type),告诉特定存储空间这里要存储的数据类型是什么,以及你即将操作他的方式.(注 ...