• Elasticsearch的节点和分片


    1. 节点和分片

    下图为3个节点集群,即一个运行Elasticsearch的进行为一个节点,一个索引会通过默认或自定的方式分为多个分片。在下图中有5个主分片和5个副本分片,相同数据的主分片和副本分片不会处于同一节点。

    一份分片是一个目录中的文件,Lucene用这些文件存储索引数据。分片也是 Elasticsearch将数据从一个节点迁移到另一个节点的最小单位。

    image-20201119152257469

    1.1 索引一片文档的过程

    默认情况下,当索引一篇文档的时候,系统首先根据文档ID的散列值选择一个主分片,并将文档发送到该主分片。这份主分片可能位于另一个节点,如下图所示:该文档ID的散列值指向的是分片1,但是请求的是节点1,因此节点1中的主分片0将该文档索引到节点2的分片1中。

    然后文档被发送到该主分片的所有副本分片进行索引(图左)这使得副本分片和主分片之间保持数据的同步。数据同步使得副本分片可以服务于搜索请求,并在原有主分片无法访问时自动升级为主分片。

    image-20201119153255562

    当搜索一个索引时,Elasticsearch需要在该索引的完整分片集合中进行查找(图右)这些分片可以是主分片,也可以是副本分片,原因是对应的主分片和副本分片通常包含一样的文档。Elasticsearch在索引的主分片和副本分片中进行搜索请求的负载均衡,使得副本分片对于搜索性能和容错都有所帮助。

    1.2 主分片和副本分片

    Elasticsearch处理数据的最小单元:分片。一份分片是 Lucene的索引(一个包含倒排索引的文件目录)。倒排索引的结构使得 Elasticsearch在不扫描所有文档的情况下,就能得知哪些文档包含特定的词条。

    Elasticsearch索引和Lucene索引的对比:Elasticsearch索引被分解为多块分片。一份分片是一个 Lucene的索引,所以一个 Elasticsearch的索引由多个 Lucene的索引组成。

    在图2-5中,聚会(get-together)索引的首个主分片可能包含何种信息。该分片称为 get-together0,它是一个 Lucene索引、一个倒排索引。它默认存储原始文档的内容,再加上些额外的信息,如词条字典和词频。

    image-20201119154506359

    根据倒排序索引可以迅速的定位到 查询的文档。如:查询包含denver单词的文档,查表可以发现文档id1,id3匹配该查询条件,而且denver单词在id3中出现的频率比id1高,所以可能id3文档会更加符合查询条件。

    分片分为:主分片和副本分片。其中副本分片是主分片的完整副本。副本分片用于搜索,或者是在原有主分片丢失后成为新的主分片。
    Elasticsearch索引由一个或多个主分片以及零个或多个副本分片构成。在图2-6中,可以看到Elasticsearch索引 get-together由6份分片组成:2份主分片(深色的盒子)和4份副本分片(浅色的盒子),每份主分片有2个副本分片。

    image-20201119155025549

    副本分片可以在运行的时候进行添加和移除,而主分片不可以。
    可以在任何时候改变每个分片的副本分片的数量,因为副本分片总是可以被创建和移除。这并不适用于索引划分为主分片的数量,在创建索引之前,必须决定主分片的数量。

  • 相关阅读:
    创建与合并分支
    Git丢弃本地修改
    《人月神话》小记
    财商培养
    赚钱有道,增加睡后收入
    学点经济学,升级认知
    保险小白普及知识
    管理决策、资源分配的最理想状态
    AI时代做一个终身学习者
    基于需求的测试
  • 原文地址:https://www.cnblogs.com/code-duck/p/14006058.html
Copyright © 2020-2023  润新知