赞
踩
在一个索引中,可以定义一种或者多种数据类型,一个类型是你的缩影的一个逻辑上的分类/分区。在不同的版本,类型发生了不同变化。
版本 | Type | |
5.x | 支持多种类型type | |
6.x | 只能有一个type | |
7.x | 默认不再支持指定地索引类型,默认为:_doc |
当你创建一个索引的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置到集群中的任何节点上。
Elasticsearch 允许你创建分片的一份或多份拷贝,这些拷贝叫做复制分片(副本)。
一个运行中的 Elasticsearch 实例称为一个节点,而集群是由一个或者多个拥有相同cluster.name 配置的节点组成, 它们共同承担数据和负载的压力。当有节点加入集群中或者从集群中移除节点时,集群将会重新平均分布所有的数据。
当一个节点被选举成为主节点时,它将负责管理集群范围内的所有变更,例如增加、删除索引,或者增加、删除节点等。
作为用户,我们可以将请求发送到集群中的任何节点,无论我们将请求发送到哪个节点,它都能负责从各个包含我们所需文档的节点收集回数据,并将最终结果返回給客户端。 Elasticsearch 对这一切的管理都是透明的。
分配 3 个主分片和一份副本(每个主分片拥有一个副本分片):总共存储为6个分片。
如果启动了第二个节点,我们的集群将会拥有两个节点的集群 : 所有主分片和副本分片都已被分配。
当启动了第三个节点,我们的集群将会拥有三个节点的集群 : 为了分散负载而对分片进行重新分配。
副本数量改为2:
当我们向es进行添加数据时候,首先要进行路由选择。主键(_id)的hash值和主分片的数量进行取模运算,得出的余数就是要存储到分片的位置。
Shard=hash(routing)% number_of_primary_shards;
routing 默认是文档的 _id ,也可以设置成一个自定义的值
我们假设有一个集群由三个节点组成。 它包含一个叫 emps 的索引,有两个主分片, 每个主分片有两个副本分片。相同分片的副本不会放在同一节点。
1.每一个节点都存储整个完整的信息;
2.每个节点中的主分片和副本分片都不在一个节点(单节点除外)
Node1: RO和P1 组合后完整信息
Node2: RO和R1 组合后成完整信息
Node3: P0和R1 组合后完整信息
3.P0和副本R0存储到不同节点;P1和R1存储到不同节点
1.客户端向es服务发送索引请求
2.假设节点1接收到之后,进行路由算法(主键(_id)的hash值和主分片的数量进行取模运算,得出的余数就是要存储到分片的位置),确定数据所属的分片id,假设分片id为0,且在节点3上,则请求就会转发到节点3上
3.节点3上开始进行写入操作,并将请求转发到节点1,节点2的副本分片上,所有副本写入成功,节点3上告知节点1,节点1返回给客户端相应。
路由算法:Shard=hash(routing)% number_of_primary_shards;
routing 默认是文档的 _id ,也可以设置成一个自定义的值
从主分片或者副本分片检索文档的步骤顺序:
1.客户端向 Node 1 发送获取请求。
2.节点使用文档的 _id 来确定文档属于分片 0 。分片 0 的副本分片存在于所有的三个节点上。 在这种情况下,采用轮询策略,假设它将请求转发到 Node 2 。
3. Node 2 将文档返回给 Node 1 ,然后将文档返回给客户端。
在处理读取请求时,协调结点在每次请求的时候都会通过轮询所有的副本分片来达到负载均衡。在文档被检索时,已经被索引的文档可能已经存在于主分片上但是还没有复制到副本分片。 在这种情况下,副本分片可能会报告文档不存在,但是主分片可能成功返回文档。 一旦索引请求成功返回给用户,文档在主分片和副本分片都是可用的。
我们可以利用 version 号来确保应用中相互冲突的变更不会导致数据丢失。
1.不加分词器,查看分词效果
2.将ik分词器放到es的安装目录下的plugins文件夹中(如果不存在ik文件夹,新建一个ik文件夹),重启 ES 即可使用。
3.添加分词器后,查看具体分词效果:
主分片,副本和节点最大数之间数量,我们分配的时候可以参考以下关系:
节点数<=主分片数*(副本数+1)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。