zl程序教程

您现在的位置是:首页 >  工具

当前栏目

es 中常见概念以及分片的详解

ES概念 详解 以及 常见 分片
2023-09-27 14:22:13 时间

一.基本概念

1.elasticsearch集群elasticsearch集群是由一个或者多个节点组成的集合。每一个集群都有一个唯一的名称。默认是elasticsearch,我们可以自己设置的cluster_name的值,cluster_name的值非常重要,一个节点就是通过集群的名称加入集群的。然后,每一个节点都有自己的名称。节点是可以存储数据,参与集群索引数据,以及搜索数据的独立服务。

2.索引:是含有相同属性的文档集合,相当于数据库。索引在elasticsearch中是通过一个名称来识别的,必须是英文字母小写的,且不含中划线的,我们通过这个索引来对文档进行增删查改的操作。

3.类型:索引可以定义一个或者多个类型,文档必须属于一个类型,相当于数据表。

4.关系索引、类型、文档之间的关系,索引相当于数据库里面的database即数据库,类型相当于数据库里面的table即数据表,文档相当于数据库SQL里面的一行记录。

5.分片每个索引都有多个分片,每个分片是一个Lucene索引

6.副本(备份):每一个分片的备份。

 注意:elasticsearch在创建索引的时候,默认创建5个分片,一份副本,这个数据可以进行修改。分片的数量只能在创建索引的时候进行指定,不能在后期进行修改,备份可以进行动态修改的

二.分片

1.集群有节点组成,节点有分片、副本组成,一个索引分为多个分片,一个分片有索引,类型组成,类型有文档组成。这是他们之间的关系。

2.分片:每一个分片就是一个完整的索引。分片里面包含索引,type。

因为 ES 是个分布式的搜索引擎, 所以索引通常都会分解成不同部分, 而这些分布在不同节点的数据就是分片. ES自动管理和组织分片, 并在必要的时候对分片数据进行再平衡分配, 所以用户基本上不用担心分片的处理细节。

3.副本:ES 默认为一个索引创建 5 个主分片, 并分别为其创建一个副本分片. 也就是说每个索引都由 5 个主分片成本, 而每个主分片都相应的有一个 copy。对于分布式搜索引擎来说, 分片及副本的分配将是高可用及快速搜索响应的设计核心.主分片与副本都能处理查询请求,它们的唯一区别在于只有主分片才能处理索引请求.副本对搜索性能非常重要,同时用户也可在任何时候添加或删除副本。额外的副本能给带来更大的容量, 更高的呑吐能力及更强的故障恢复能力。

如下图:有集群两个节点,并使用了默认的分片配置. ES自动把这5个主分片分配到2个节点上, 而它们分别对应的副本则在完全不同的节点上。其中 node1 有某个索引的分片1、2、3和副本分片4、5,node2 有该索引的分片4、5和副本分片1、2、3。

三.分片的注意事项

1.避免使用非常大的分片,因为这会对群集从故障中恢复的能力产生负面影响 对分片的大小没有固定的限制,但是通常情况下很多场景限制在 50GB 的分片大小以内。

2.当在ElasticSearch集群中配置好你的索引后, 你要明白在集群运行中你无法调整分片设置. 既便以后你发现需要调整分片数量, 你也只能新建创建并对数据进行重新索引(reindex)(虽然reindex会比较耗时, 但至少能保证你不会停机).
3.如果担心数据的快速增长, 建议根据这条限制: ElasticSearch推荐的最大JVM堆空间 是 30~32G, 所以把分片最大容量限制为 30GB, 然后再对分片数量做合理估算。例如, 如果的数据能达到 200GB, 则最多分配7到8个分片

4.当数据量可以合理预测并且变化缓慢时,具有固定时间间隔的基于时间的索引很有效。在分片分配上并没有绝对的答案。

参考:https://www.jianshu.com/p/297e13045605