ElasticSearch需要知道的名词解释

分布式

Elasticsearch 本身就是分布式的,因此即便你只有一个节点,Elasticsearch 默认也会对你的数据进行分片和副本操作,当你向集群添加新数据时,数据也会在新加入的节点中进行平衡

集群cluster

ES可以作为一个独立的单个搜索服务器。不过,一般为了处理大型数据集,实现容错和高可用性,ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群。群集是一个或多个节点(服务器)的集合, 这些节点共同保存整个数据,并在所有节点上提供联合索引和搜索功能。一个集群由一个唯一集群ID确定,并指定一个集群名(默认为“elasticsearch”)。该集群名非常重要,因为节点可以通过这个集群名加入群集,一个节点只能是群集的一部分。

节点

节点是单个服务器实例,它是群集的一部分,可以存储数据,并参与群集的索引和搜索功能
节点的名称默认为一个随机的通用唯一标识符(UUID),确定在启动时分配给该节点。可以定义任何节点名。
默认情况下,每个节点设置加入名为“elasticSearch”的集群。这意味着如果你启动多个节点在网络上,假设他们能发现彼此都会自动形成和加入一个名为“elasticsearch”的集群。

节点分类

1. MasterNode

  • 索引的新增,删除,分片,分配,对各个节点的状态进行调度,分发。
  • 在整个elasticsearch中可以拥有多个master节点,但是在运行的时候,同一时刻只有一个master节点起作用
  • 当MasterNode节点发生宕机后会从master:true的候选节点中选出一个新的master节点。
  • Master节点仅仅对索引的管理、集群状态的管理。像其它的对数据的存储、查询都不需要经过这个Master节点。因此在ES集群中。它的压力是比较小的。所以,我们在构建ES的集群当中,Master节点可以不用选择太好的配置

2. DataNode

  • 存储数据的节点,数据的读取、写入最终的作用都会落到这个上面。
  • 数据的分片、搜索、整合等这些操作都会在数据节点来完成。
  • 数据节点的操作都是比较消耗CPU、内存、I/O资源。所以,我们在选择data Node数据节点的时候,硬件配置一定要高一些。高的硬件配置可以获得高效的存储和分析能力。因为最终的结果都是需要到这个节点上来。

3. Client Node

  • 可选节点:用作任务分发使用。它也会存储一些元数据信息,但是不会对数据做任何修改,仅仅用来存储。它的好处是可以分担datanode的一部分压力。因为ES查询是两层汇聚的结果,第一层是在datanode上做查询结果的汇聚。然后把结果发送到client Node 上来。Cllient Node收到结果后会再做第二次的结果汇聚。然后client会把最终的结果返回给用户。

4. 摄取节点

  • 对数据进行转换、富化
  • 预处理操作运行在索引文档之前,即写入数据之前,通过事先定义好的一系列processors(处理器)和pipeline(管道),对数据进行某种转换、富化。

分片

索引可以存储大量的数据,这些数据可能超过单个节点的硬件限制。例如,十亿个文件占用磁盘空间1TB的单指标可能不适合对单个节点的磁盘或可能太慢服务仅从单个节点的搜索请求。
这里的分片不是我们传统意义上的100分成4份进行分片存储,而是容器,将文档数据存储在分片上,分片再存储到对应的节点上,当集群需要进行数据迁移,扩容或缩小的时候,只用移动分片就行。
当你创建一个索引,你可以简单地定义你想要的分片数量。每个分片本身是一个全功能的、独立的“指数”,可以托管在集群中的任何节点。

分片的重要性

  • 分片允许您水平拆分或缩放内容的大小
  • 分片允许你分配和并行操作的碎片(可能在多个节点上)从而提高性能/吞吐量

主分片:数据读写分片,写入数据,产生多个分片的时候,通过路由确定分片的位置。
复制分片(副本):主分片的一个副本,可以防止硬件故障导致的数据丢失,同时可以提供读请求,每个主分片都有一个或多个副本分片,当主分片异常时,副本可以提供数据的查询等操作。主分片和对应的副本分片是不会在同一个节点上的,所以副本分片数的最大值是 n -1(其中 n 为节点数)。

注意:我们在创建索引的时候就需要确定主分片的数量,原因是为了路由规则

副本

在创建某个索引之前,需要指定分配这个索引多少个分片?多少个副本?副本就这这个分片的备胎,当分片挂掉了,它的副本就会随时准备上位,因此副本也是个分片只不过不负责主要功能。
ES 能够提高数据吞吐量,增加副本个数就是个不错的选择,比如说读写分离,读数据的时候从副本上读,写数据的时候只用主分片去写。需要注意的是,主分片的个数是在建立索引之前要确定,建立完索引之后,是不能够进行修改的,除非重新建索引。因此在建索引之前,一定要合理的配置分片个数,副本个数的话后期是可以改动的。
副本是一个分片的精确复制,每个分片可以有零个或多个副本。ES中可以有许多相同的分片,其中之一被选择更改索引操作,这种特殊的分片称为主分片。
当主分片丢失时,如:该分片所在的数据不可用时,集群将副本提升为新的主分片。
Elasticsearch 禁止同一个分片的主分片和副本分片在同一个节点上,所以如果是一个节点的集群是不能有副本的

索引(index)

  • 索引是文档的容器,是一类文档的集合
  • 索引的Mapping定义文档字段的类型,结构

文档(Document)

es是面向文档的,文档是可搜索的最小单位,由一个或多个字段组成,类似于关系型数据库中的一行记录
文档是以JSON进行序列化并保存的,每个JSON对象由一个或多个字段组成,字段类型可以是布尔,数值,字符串、二进制、日期等数据类型。
每个文档都有唯一的id,这个id可以由我们自己指定,也可以自动生成。
每一个文档,除了保存我们写入进行的文档原始数据外,也有文档自己的元数据,这些元数据,用于标识文档的相关信息。

路由(routing)

当索引一个文档的时候,文档会被存储到一个主分片中。 Elasticsearch 如何知道一个文档应该存放到哪个分片中呢?
这个过程是根据下面这个算法决定的
shard_num = hash(_routing) % num_primary_shards
其中 _routing 是一个可变值,默认是文档的 _id 的值 ,也可以设置成一个自定义的值。 _routing 通过 hash 函数生成一个数字,然后这个数字再除以 num_of_primary_shards (主分片的数量)后得到余数。这个分布在 0 到 number_of_primary_shards-1 之间的余数,就是我们所寻求的文档所在分片的位置。这就解释了为什么我们要在创建索引的时候就确定好主分片的数量 并且永远不会改变这个数量:因为如果数量变化了,那么所有之前路由的值都会无效,文档也再也找不到了。

路由机制:假设你有一个100个分片的索引。当一个请求在集群上执行时会发生什么呢?

  1. 这个搜索的请求会被发送到一个节点
  2. 接收到这个请求的节点,将这个查询广播到这个索引的每个分片上(可能是主分片,也可能是复制分片)
  3. 每个分片执行这个搜索查询并返回结果
  4. 结果在通道节点(摄取节点)上合并、排序并返回给用户

在这里插入图片描述
因为默认情况下,Elasticsearch使用文档的ID(类似于关系数据库中的自增ID),如果插入数据量比较大,文档会平均的分布于所有的分片上,这导致了Elasticsearch不能确定文档的位置,
所以它必须将这个请求广播到所有的N个分片上去执行 这种操作会给集群带来负担,增大了网络的开销

Id序列

手动指定Id
导入一些数据到es时,会采取这种方式。使用系统中已有的数据的唯一标识,作为es中
document的id
举个例子,比如说,开发一个电商网站,做搜索功能,或者OA系统,做员工检索功能。这个时候,数据首先会在网站系统或者IT系统内部的数据库中,会先有一份,此时就肯定会有一个数据库的primary key(自增长,UUID,或者业务编号)如果将数据导入到es中,此时就比较适合采用数据在数据库中的primary key.
自动生成Id
自动生成的id,长度为20个字符,URL安全,base64编码,GUID

映射(Mapping)

映射就是对索引库中索引的字段名称及其数据类型进行定义,

  • 动态映射 dynamic Mapping
    文档写入 ElasticSearch 时,会根据文档字段自动识别类型,这种机制称之为动态映射
  • 静态映射
    事先定义好映射,包含文档的各个字段及其类型等,这种方式称之为静态映射。

模板

template大致分成setting和mappings两部分:
索引可使用预定义的模板进行创建,这个模板称作Index templates。模板设置包括settings和mappings,通过模式匹配的方式使得多个索引重用一个模板。

  1. settings主要作用于index的一些相关配置信息,如分片数、副本数,tranlog同步条件、refresh等。

  2. mappings主要是一些说明信息,大致又分为_all、_source、prpperties这三部分:

    (1) _all:主要指的是AllField字段,我们可以将一个或多个都包含进来,在进行检索时无需指定字段的情况下检索多个字段。设置“_all" : {“enabled” : true}

    (2) _source:主要指的是SourceField字段,Source可以理解为ES除了将数据保存在索引文件中,另外还有一份源数据。_source字段在我们进行检索时相当重要,如果在{“enabled” : false}情况下默认检索只会返回ID, 你需要通过Fields字段去到索引中去取数据,效率不是很高。但是enabled设置为true时,索引会比较大,这时可以通过Compress进行压缩和inclueds、excludes来在字段级别上进行一些限制,自定义哪些字段允许存储。

    (3) properties:这是最重要的步骤,主要针对索引结构和字段级别上的一些设置。

  3. 咱们通常在elasticsearch中 post mapping信息,每重新创建索引便到设置mapping,分片,副本信息。非常繁琐。强烈建议大家通过设置template方式设置索引信息。设置索引名,通过正则匹配的方式匹配到相应的模板。ps:直接修改mapping的优先级>索引template。索引匹配了多个template,当属性等配置出现不一致的,以order的最大值为准,order默认值为0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值