elasticsearch笔记_索引文档时的集群内部操作(二)

来源:互联网 发布:js数据类型转换 编辑:程序博客网 时间:2024/06/05 14:31

关于集群的一些说明.

1 . node(节点) : 一个运行的Elasticsearch实例就是一个节点.

用户可以将请求发送给任意节点,每个节点都知道任意文档的位置,并且能将我们的请求转发到任意存储我们需要的文档的节点上.

2 . shard(分片) : 一个分片是一个底层的工作单元,它仅仅保存的数据的一部分.

索引(名词)其实是一个或者多个分片的逻辑命名空间.其实一个分片是一个Lucene实例.分片分为主分片和副本分片.

3 . 查询集群健康 : GET / _cluster/health

主要注意该请求返回结果的status字段,分为green,yellow,red三种状态.green表示所有的主,副分片都可用;yellow表示所有的主分片都可用,有的副分片都不可用;red有主分片不可用.


索引(动词)文档时,集群的内部操作

1 . 每当一个文档被索引(动词)时,elasticsearch是如何知道文档应该存放在哪个分片呢?

公式 :shard = hash(routing) %number_of_primary_shards

公式里面routing是一个固定的值,通常默认为文档的id,hash函数将routing生成一个值,这个值再与主分片的数量取余.结果范围就是在0~(主分片数量-1)之间.

所有的API都支持routing这个参数,我们可以根据控制这个参数来自定义文档和分片之间的映射.

2 . 新建,索引(动词),删除索引时,分片之间是如何交互的?

举例 : 假设目前集群有3个node(节点),每个节点有两个分片,节点的属性如图,现在请求一个分片向并没有存储该分片的主分片的node请求.

步骤如图 :

这里写图片描述

当shard2的两个副分片都操作成功并向主分片报告以后,node1再将结果返回给用户.

0 0