Elasticsearch的这几个概念你还不知道啥意思呢?

一、node

1、核心概念

  • 节点。一个ES实例就是一个node,本质上就是一个Java进程,但并不是说一台机器就是一个node,因为一台机器可以运行多个ES实例,也就是多个Java进程。
  • 每个node都有名称,通过配置文件elasticsearch.yml里的node.name属性指定。
  • 每个node启动后,都会自动分配一个UID放到data目录下。
  • 多个Node凑成一个集群。

2、node种类

  • master node

主节点,负责索引的创建与删除以及决定shard被分到哪个node上。

  • data node

保存shard以及shard上的全部数据,由master node决定如何把分片分发到数据节点上。

  • coordinating node

协调节点
1.负责路由请求到正确的节点,如创建索引的请求需要路由到 Master 节点
2.也负责汇集各个shard返回的结果,比如统计一批数据,这批数据在不同shard上,最终会将结果返回到协调节点上统一处理返回给client
3.所有节点默认都是Coordinating Node。

  • 其它节点类型,感兴趣的自行Google

二、shard

1、啥意思

分片,每个shard都可以理解成是一个lucene实例,主要负责搜索分析和倒排索引。

2、种类

  • Primary Shard
  • Replica Shard

3、Primary Shard

用于解决数据水平扩展的问题,通过主分片可以将数据分部到集群内的所有node上,一个数据(document)只能落到一个主分片上,但是可能落到多个副分片上,因为副分片是备份分片,用于高可用和提升读取吞吐量的。

4、Replica Shard

用于解决数据高可用的问题的,是主分片的拷贝,好比主从复制一样,副分片可以提高服务可用性也可以提高读取的吞吐量。

5、Shard的个数设定

  • ES7.0之前,创建一个index默认会为这个index创建5个PrimaryShard和5个ReplicaShard(每个PrimaryShard都有一个ReplicaShard),但是ES7.0开始个数从5个变成了1个。
  • 主分片在索引创建的时候指定,创建完成后后续不允许修改个数,除非Reindex(重建索引)。
  • 副本分片数可以随时动态调整,增加个数还能再一定程度上提高服务的可用性和读取吞吐量。
  • 分片设置过小会导致单个分片的数据量太大,影响性能,而后续又无法动态修改主分片数,分片设置过多时,会影响搜索结果的相关性打分,影响统计结果的准确性,数据量达不到那么大的时候也造成资源浪费,到底划分多少合适后面单独出文章。

6、shard自动负载均衡

6.1、概念

ES会自动在nodes上为我们做shard的负载均衡。

实现高可用最少需要2个node,因为Primary Shard和Replica Shard不能同时存到同一个node上,否则这个node挂了就单点故障了 ,不叫高可用。

6.2、画图说明

假设现在只有1个index,每个index有5个Primary Shard和5个Replica Shard。
假设我们只有一台node节点,那肯定这10个shard都在这一台node上
假设我们新增了一台node节点与之前那台凑成了集群。那么ES会自动将这个shard平分到两台node上,比如变成如下:

Anode:2个PrimaryShard+3个ReplicaShard(这3个是Bnode中3P的副本,这样可以保证高可用)
Bnode:3个PrimaryShard+2个ReplicaShard(这2个是Anode中2P的副本,这样可以保证高可用)

只有一个node的样子:
在这里插入图片描述
新增一个node,变成了两个node:
在这里插入图片描述

三、index

索引,包含一堆具有相似结构的document数据。可以粗糙理解成mysql的库的概念。

四、type

类型,ES7.0开始无需手动指定type,统一采取默认的type (名叫_doc),相当于把type去掉了,会默认为我们生成。可以粗糙理解成mysql的表的概念,只是表名都叫_doc而已。

Elasticsearch7.0开始已经将type这个概念去掉了。
因为type的概念是错误的使用方式,毕竟在RDBMS中,表与表之间的数据是分割存储的,而ES中同一个索引的不同type数据最终是放在一起的,必须保证不同type之间同名field的类型一致,还不算其他乱七八糟的问题。设计上就不合理。
详情可以看官方blog:https://www.elastic.co/cn/blog/moving-from-types-to-typeless-apis-in-elasticsearch-7-0

五、document

文档,Elasticsearch中的最小数据单元,一般用JSON表示,理解成mysql里的一条数据。

六、field

字段,一个document里可包含多个field。也就是一行数据有多个字段,字段有字段类型,理解成MySQL的field。

七、mapping

理解成MySQL表的结构,也就是说包含表字段、字段类型等,其实里面还包含分词器设置等等,非常核心,后面单独搞一篇出来讲解。目前理解成MySQL表结构即可。

八、DSL语句

ES的语句,理解成SQL语句就行了。

九、贯穿全文的总结

每个ES实例就是一个node,每个node都有一堆自动负载均衡的shard,每个shard就是一个lucene实例,负责管理我们的“数据库”index和“数据行”document以及“表结构”mapping等信息。

【微信公众号】
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【原】编程界的小学生

没有打赏我依然会坚持。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值