(1)、ES基本概念名词

    Cluster

   代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。

     Shards

  代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。

     replicas

  代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

     Recovery

  代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。

(2)、ES为什么要实现集群

  在单台ES服务器节点上,随着业务量的发展索引文件慢慢增多,会影响到效率和内存存储问题等。

  我们可以采用ES集群,将单个索引的分片到多个不同分布式物理机器上存储,从而可以实现高可用、容错性等。

  ES集群中索引可能由多个分片构成,并且每个分片可以拥有多个副本。通过将一个单独的索引分为多个分片,我们可以处理不能在一个单一的服务器上面运行的大型索引,简单的说就是索引的大小过大,导致效率问题。不能运行的原因可能是内存也可能是存储。由于每个分片可以有多个副本,通过将副本分配到多个服务器,可以提高查询的负载能力。

 (3)、ES是如何解决高并发

  ES是一个分布式全文检索框架,隐藏了复杂的处理机制,内部使用 分片机制、集群发现、分片负载均衡请求路由。

  Shards 分片:代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。  

  Replicas分片:代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

二、ES集群核心原理分析:

1、每个索引会被分成多个分片shards进行存储,默认创建索引是分配5个分片进行存储。每个分片都会分布式部署在多个不同的节点上进行部署,该分片成为primary shards。

  注意:索引的主分片primary shards定义好后,后面不能做修改。

  2、为了实现高可用数据的高可用,主分片可以有对应的备分片replics shards,replic shards分片承载了负责容错、以及请求的负载均衡。

  注意: 每一个主分片为了实现高可用,都会有自己对应的备分片,主分片对应的备分片不能存放同一台服务器上。主分片primary shards可以和其他replics shards存放在同一个node节点上。

  3、documnet routing(数据路由)

     当客户端发起创建document的时候,es需要确定这个document放在该index哪个shard上。这个过程就是数据路由。

     路由算法:shard = hash(routing) % number_of_primary_shards

     如果number_of_primary_shards在查询的时候取余发生的变化,无法获取到该数据

     注意:索引的主分片数量定义好后,不能被修改

集群:每个节点不会拥有全部的主分片数据,但是 节点的 主分片+副分片=完整的索引数据

 高可用视图分析(下图所示:上面的图,如果节点1与节点2宕机了,es集群数据就不完整了。下面图,如果节点1与节点2宕机了,es集群数据还是完整的)

     经上所述:当我们ES从单节点升级多节点(集群模式),由于单节点创建索引会自动创建一个分片,而一个分片会有一个副本,根据副本的作用是提高系统的容错性,当某个节点挂了会从零另外一个节点的副本中将数据进行恢复,所以升级的多节点只需要部署ES和原先的单节点(已经有索引数据)建立起集群关系,新创建的空白节点ES自根据副本容错机制,将索引数据同步到新节点上。

        另外说明一下,ES的集群是随机指定一个ES服务作为Master节点,当指定的Master主节点挂了,会通过选举的方式将一台从节点的Salve Es服务升级成Master节点

        另外通过http://ip:port/_cat/nodes?pretty 可以看到搭建的es具体一个节点正在作为master节点

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐