欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

java 集成 es 集群操作 es 集群

最编程 2024-03-06 15:26:45
...


核心概念

首先我们来看一下ElasticSearch的核心概念,主要有以下部分:


  • 集群
  • 节点
  • 索引
  • 文档类型
  • 文档
  • 映射
  • NRT
  • 分片和复制
  • 数据恢复

集群

cluster代表一个集群,集群中有多个节点(node),其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。ES的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看ES 集群,在逻辑上是个整体,你与任何一个节点的通信和与整个ES集群通信是等价的。ES集群是一个或多个节点的集合,它们共同存储了整个数据集,并提供了联合索引以及可跨所有节点的搜索能力。多节点组成的集群拥有冗余能力,它可以在一个或几个节点出现故障时保证服务的整体可用性。集群靠其独有的名称进行标识,默认名称为“elasticsearch”。节点靠其集群名称来决定加入哪个ES集群,一个节点只能属一个集群。具体的示意图如下:


java集成es集群操作 es的集群_data es集群master

elasticsearch集群有以下特点:


  • 默认集群为5个primary shard,1个replica,每个replica有5个shard;
  • master、slave节点都能进行读写操作,每个节点都是平等的关系;
  • 为了应对大数据的存储,采用分布式的架构,把数据分布在不同的节点进行存储;
  • es是一个分布式搜索框架,即使是单机版的,其实也是一个集群。

节点


一个节点是一个逻辑上独立的服务,可以存储数据,并参与集群的索引和搜索功能,一个节点也有唯一的名字,群集通过节点名称进行管理和通信。具体的示意图如下:

java集成es集群操作 es的集群_搜索_02

节点又分为:

  • 主节点
  • 数据节点
  • 客户端节点
  • 部落节点

主节点的主要职责是和集群操作相关的内容,如创建或删除索引,跟踪哪些节点是群集的一部分,并决定哪些分片分配给相关的节点。稳定的主节点对集群的健康是非常重要的。虽然主节点也可以协调节点,路由搜索和从客户端新增数据到数据节点,但最好不要使用这些专用的主节点。一个重要的原则是,尽可能做尽量少的工作。对于大型的生产集群来说,推荐使用一个专门的主节点来控制集群,该节点将不处理任何用户请求。

而数据节点持有数据和倒排索引。这里需要注意,如果集群节点小于10,则所有节点都是master + data模式,只有当集群超过100个节点,才会细分节点类型。

客户端节点它既不能存储数据也不能成为主节点,该节点可以响应用户的情况,把相关操作发送到其他节点;客户端节点会将客户端请求路由到集群中合适的分片上。对于读请求来说,协调节点每次会选择不同的分片处理请求,以实现负载均衡。在5.0之后被协调节点取代了。

部落节点可以跨越多个集群,它可以接收每个集群的状态,然后合并成一个全局集群的状态,它可以读写所有节点上的数据


索引


ES将数据存储于一个或多个索引中,索引是具有类似特性的文档的集合。类比传统的关系型数据库领域来说,索引相当于SQL中的一个数据库,或者一个数据存储方案(schema)。索引由其名称(必须为全小写字符)进行标识,并通过引用此名称完成文档的创建、搜索、更新及删除操作并通过ElasticSearch内部使用Lucene将数据写入索引或从索引中检索数据。一个ES集群中可以按需创建任意数目的索引。


文档类型


类型是索引内部的逻辑分区(category/partition),然而其意义完全取决于用户需求。因此,一个索引内部可定义一个或多个类型(type)。一般来说,类型就是为那些拥有相同的域的文档做的预定义。例如,在索引中,可以定义一个用于存储用户数据的类型,一个存储日志数据的类型,以及一个存储评论数据的类型。类比传统的关系型数据库领域来说,类型相当于“表”。

需要注意的是6.0之后删除了Type的概念,一个索引中只能有一个类型,原因:type本来就跟表的概念不一样,table 在数据库中是独立存储的,ES中不同的type存储在同一个索引中的相同字段会映射到一起,例如:学生表中的name和班级表中的name,索引中会指向同一处,而且数据类型不能不同。


文档


文档是Lucene索引和搜索的原子单位,它是包含了一个或多个域的容器,基于JSON格式进行表示。文档由一个或多个域组成,每个域拥有一个名字及一个或多个值,有多个值的域通常称为“多值域”。每个文档可以存储不同的域集,但同一类型下的文档至应该有某种程度上的相似之处。相当于数据库的“记录”。



映射

相当于数据库中的schema,用来约束字段的类型,不过 Elasticsearch 的mapping可以自动根据数据创建。ES中,所有的文档在存储之前都要首先进行分析。用户可根据需要定义如何将文本分割成token、哪些token应该被过滤掉,以及哪些文本需要进行额外处理等等。


接近实时

ElasticSearch 是一个接近实时的搜索平台。这意味着,从索引一个文档直到这个文档能够被搜索到有一个很小的延迟(通常是 1 秒)。


分片和复制

一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有10亿文档的索引占据1TB的磁盘空间,而任一节点可能没有这样大的磁盘空间来存储或者单个节点处理搜索请求,响应会太慢。为了解决这个问题,Elasticsearch提供了将索引划分成多片的能力,这些片叫做分片。ES的“分片(shard)”机制可将一个索引内部的数据分布地存储于多个节点,它通过将一个索引切分为多个底层物理的Lucene索引完成索引数据的分割存储功能,这每一个物理的Lucene索引称为一个分片 (shard),分片分布到不同的节点上,构成分布式搜索。

每个分片其内部都是一个全功能且独立的索引,因此可由集群中的任何主机存储。创建索引时,用户可指定其分片的数量,默认数量为5个。分片的数量只能在索引创建前指定,并且索引创建后不能更改。Shard有两种类型:


  • primary
  • replica

primary shard用于文档存储,每个新的索引会自动创建5个Primary shard,当然此数量可在索引创建之前通过配置自行定义,不过一旦创建完成其Primary shard的数量将不可更改。primary shard是Primary Shard的副本,用于冗余数据及提高搜索性能。每个Primary shard默认配置了一个Replica shard,但也可以配置多个且其数量可动态更改。ES 会根据需要自动增加或减少这些Replica shard的数量。副本的作用一是提高系统的容错性,当个某个节点某个分片损坏或丢失时可以从副本中恢复;二是提高es的查询效率,es会自动对搜索请求进行负载均衡。分片和复制对于es来说特别重要,主要原因如下:


  • 允许你水平分割/扩展你的内容容量;
  • 允许你在分片(位于多个节点上)之上进行分布式的、并行的操作,进而提高性能/吞吐量至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由Elasticsearch管理的,对于作为用户的你来说,这些都是透明的;
  • 在分片/节点失败的情况下,复制提供了高可用性。复制分片不与原/主要分片置于同一节点上是非 常重要的。因为搜索可以在所有的复制上并行运行,复制可以扩展你的搜索量/吞吐量;
  • 总之,每个索引可以被分成多个分片。一个索引也可以被复制0次(即没有复制) 或多次。一旦复制了,每个索引就有了主分片(作为复制源的分片)和复制分片(主分片的拷贝);
  • 分片和复制的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变复 制的数量,但是你不能再改变分片的数量。
  • 5.X中分片的默认规则是5:1既5个主分片,1个复制分片。

数据恢复

数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。好了,本篇我们介绍了ElasticSearch的核心概念,下一篇我们继续介绍集群。