Elasticsearch核心概念


Node

节点是组成Elasticsearch集群的基本服务单元,集群中的每个运行中的Elasticsearch服务器都可以称之为节点,它们共同承担数据和负载压力

Elasticsearch集群不同节点角色

主节点: 负责管理集群范围内的所有变更

  • 通过配置node.master:
    true(默认)使节点具有被选举称为Master的资格。主节点是全局唯一的,将从有资格称为Master的节点中进行选举
  • 主节点也可以作为数据节点,但尽可能做少量的工作,因此生成环境尽量分离主节点和数据节点,创建主节点的配置如下
node.master: true
node.data: false
  • 为了防止数据丢失,每个主节点应该知道有资格成为主节点的数量,为避免网络分区时出现多主的情况,配置discovery.zen.minimum_master_nodes
    原则上最小值应该是: (master_eligible_nodes / 2) + 1

数据节点: 存储数据和其对应的倒排索引

  • 负责保存数据、执行数据相关操作:CRUD、搜索、聚合等。数据节点对CPU、内存、I/O要求较高。
  • 数据读写流程只和数据节点交互,不会和主节点打交道
  • 通过配置node.data: true(默认)开使一个节点成为数据节点,也可通过下面的配置创建一个数据节点
node.master: false
node.data: true
node.ingest: false

预处理节点

这是从5.0版本开始引入的概念。预处理操作允许在所有文档之前,即写入数据之前,通过事先预定好的一系列的processors(处理器)和pipeline(管道),对数据进行某种转换、富化。processors 和 pipeline拦截bulk和index请求,在应用相关操作后将文档传回给index或bulk
API

  • 默认情况下,在所有的节点上启用ingest,如果想在某个节点上禁用ingest则可以添加配置node.ingest:
    false,也可以通过下面的配置创建一个仅用于预处理的节点
node.master: false
node.data: false
node.ingest: true

协调节点: 均衡每个节点的负载, 处理客户端请求

客户端请求可以发送到集群的任何节点,每个节点都知道任意文档所处的位置,然后转发这些请求,收集数据并返回给客户端

  • 协调节点将请求转发给保存数据的数据节点。每个数据节点在本地执行请求,并将结果返回协调节点。协调节点收集完数据后,将每个数据节点的结果合并为单个全局结果。
  • 对结果收集和排序的过程可能需要很多CPU和内存资源
  • 通过下面的配置创建一个仅用于协调的节点
node.master: false
node.data: false
node.ingest: false
*注:在5.0本本之前还有一个部落节点,在5.0之后被协调节点所取代*
  • 用于路由请求,本质上是一个智能负载均衡器(从负载均衡器的定义来说,智能和非智能的区别在于是否知道访问的内容存在于哪个节点)

Cluster

Elasticsearch的集群是由具有相同cluster.name的一个或多个Elasticsearch节点组成的,各个节点协同工作,共享数据。同一个集群内节点的名字不能重复,但集群名称一定要相同

:在实际使用中,一般需要给集群起一个有意义的名字。可以防止一个新启动的节点加入相同网络中的另一个同名的集群中

Elasticsearch集群的三种状态

  • Green:表示节点运行状态为健康状态。所有的主分片和副本分片都可以正常工作
  • Yellow:表示节点的运行状态为预警状态。所有的主分片都可以正常工作,但至少有一个副本分片是不能正常工作的。此时集群仍然可以正常工作,但集群的高可用性在某种程度上被弱化了
  • Red:表示集群无法正常使用。此时,集群中至少有一个分片的主分片及它的全部副本分片都不可正常工作。虽然集群的查询操作还可以进行,但是也只能返回部分数据(其他正常分片的数据可以返回),而分配到这个有问题分片上的写入请求将会报错,最终导致数据丢失

Elasticsearch 的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看Elasticsearch集群,在逻辑上是一个整体,你与任何一个节点的通信和于整个Elasticsearch集群通信时等价的

Shards

Elasticsearch中的每个分片其实就是Lucene中的一个索引文件,因此每个分片必须有一个主分片和零到多个副本分片。

当索引的数据量巨大时,受限于单个节点的内存、磁盘处理能力等,节点无法足够快地响应客户端的请求,此时需要将一个索引上的数据进行水平拆分。拆出来的每个数据部分称之为一个分片

  • Elasticsearch实际上就是利用分片来实现分布式的
    分片是数据的容器:文档保存在分片内,分片又被分配到集群内的各个节点里。当集群规模扩大或缩小,ES会自动的在各节点中迁移分片,使得数据仍然均匀分布在集群里
  • 分片分为主分片和副本分片
  1. 主分片: 索引内任意一个文档都属于一个主分片,所以主分片的数量决定着索引能够存储的最大数据量

  2. 副本分片: 副本分片只是一个主分片的拷贝。副本分片作为硬件故障时保护数据不丢失的冗余备份,并为搜索和返回文档等操作提供服务

数据的读写

  • 当在一个设置有多个分片的索引中写入数据时,是通过路由来确定具体写入哪个分片中的,因此在创建索引时需要指定分片的数量,并且分片的数量一旦确定就不能更改
  • 在查询索引时,需要在索引对于的多个分片上进行查询。Elasticsearch会把查询发送给每个相关的分片,并汇总各个分片的查询结果。对上层的应用程序而言,分片是透明的,即应用程序并不知道分片的存在

Replicas

备份,也可以称之为副本。副本指的是对主分片的备份,这种备份是精确复制模式。每个主分片可以有零个或多个副本,主分片和备份分片都可以对外提供数据查询服务。当构建索引进行写入操作时,首先在主分片上完成数据的索引,然后从主分片分发到副本分片上进行索引。

当主分片不可用时,Elasticsearch会在副本分片中选举出一个分片作为主分片,从而避免数据丢失
注:副本分片即可以提升Elasticsearch系统的靠可用性,又可以提升搜索时的并发性能;但副本分片也是一把双刃剑,如果副本分片数据量设置得太多,则在写操作时会增加数据同步的负担

Index

索引,在Elasticsearch中索引由一个或多个分片组成。在使用索引时,需要通过索引名称在集群内进行唯一标识。

Type

类别,指的是索引内部的逻辑分区,通过Type在索引内部进行唯一标识。在查询时如果没有该值,则表示需要在整个索引中查询。

:在Elasticsearech7.x中Type默认只有一个为_doc,在8.x中将被完全废弃。

Document

文档,在索引中的每一条数据叫做一个文档,与关系型数据库的使用方式类似,一条文档数据通过_id进行唯一标识。

Settings

Settings时对集群中索引的定义信息,比如一个索引默认的分片数、副本数等。

Mapping

Mapping中保存了索引中字段(Field)的存储类型、分词方式、是否存储等信息。

在Elasticsearch中,Mapping是可以动态识别的。如果没有特殊需求,则不需要手动创建Mapping,因为Elasticsearch会根据数据格式自动识别它的类型。当需要对某些字段添加特殊属性时,如定义使用其他分词器、是否分词、是否存储等,就需要手动设置Mapping了,一个索引的Mapping一旦创建,就不可修改了。

Analyzer

A

nalyzer表示的是字段分词方式的定义。一个Analyzer通常由一个Tokenizer和零到多个Filter组成。在Elasticsearch中。默认的标准Analyzer包含一个标准的Tokenizer和三个Filter,即Standard
Token Filter、Lower Case Token Filter、Stop Token Filter。

关注我的公众号了解更多

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值