es动态分配分片_Es官方文档整理-2.分片内部原理

1.集群

一个运行的Elasticsearch实例被称为一个节点,而集群是有一个或多个拥有相同claster.name配置的节点组成,他们共同承担数据和负载压力,当有节点加入或从集群中移除的时候,集群或自动平局分布所有数据。

当一个节点被选举成为主节点时,他哈不负责额管理集群范围内的所有变更,例如增加、删除索引,或者增加、删除节点等。而主节点不涉及文档级别的变更和搜索操作,所以集群只有一个主节点,即使流量增加,他也不会成为瓶颈。任何节点都可以成为主节点。

3.添加索引

PUT /blogs

{

"settings":{

"number_of_shards":3,

"number_of_replicas":1

}

}

设置三个主分片,1个复制分片。

4.水平扩展

PUT /blogs/_settings

{

"number_of_replicas":2

}

复制分片从一个增加到两个。不能修改主分片个数。

5.路由一个文档到分片

当索引一个文档时,文档会被存储到主分片中。存到哪个主分片由下面这个公式决定:

shard = hash(routing) % number_of_primary_shards.

routing是一个可变值,默认是文档_id,也可以设置一个自定义的值。

number_of_primary_shards主分片数。

这里解释了为什么不能改变主分片数量:因为如果数量变化了,那么所有的之前路由的值都会无效,文档也找不到了。

6.新建、索引和删除单个文档

1).客户端向集群中的一个节点(协调节点)发送请求。

2).节点使用文档的_id确定文档所属的分片,转发请求到分片所属的节点(master).

3).主分片执行请求。若执行成功,将请求并行转发到复制节点。一旦所有复制节点报告执行成功。master节点向协调节点报告成功,协调节点向客户端报告成功。

7.检索单个文档

1).客户端向集群中的一个节点(node1)发出请求。

2).node1节点使用_id确定文档所属分片,将请求转发大其中个一个分片所属节点(node2)。

3).node2将文档返回给node1,然后将文档返回给客户端。

协调节点每次请求的时候选择不同的副本分片达到负载均衡。

8.局部更新

1).客户端向node1发送更新请求。

2).转发请求到主分片所在的node2。

3).node2从主分片检索文档,修改_source字段中的JSON,并尝试重新索引主分片文档。如果文档已经被另一个进程修改了,他将重试步骤3,超过retry_on_conflict次后放弃。

4).如果node2成功更新索引,它将新版本的文档转发到所有副本分片所在的节点,重新建立索引

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值