当前位置 博文首页 > wang785994599的博客:Elasticsearch问题

    wang785994599的博客:Elasticsearch问题

    作者:[db:作者] 时间:2021-09-06 18:51

    • Elasticsearch 如何知道一个文档应该存放到哪个分片中呢?
      首先这肯定不会是随机的,否则将来要获取文档的时候我们就不知道从何处寻找了。实际上,这个过程是根据下面这个公式决定的:

      shard = hash(routing) % number_of_primary_shards
      routing 是一个可变值,默认是文档的 _id ,也可以设置成一个自定义的值。 routing 通过 hash 函数生成一个数字,然后这个数字再除以 number_of_primary_shards (主分片的数量)后得到 余数 。这个分布在 0 到 number_of_primary_shards-1 之间的余数,就是我们所寻求的文档所在分片的位置。

      这就解释了为什么我们要在创建索引的时候就确定好主分片的数量 并且永远不会改变这个数量:因为如果数量变化了,那么所有之前路由的值都会无效,文档也再也找不到了。

    • 新建,索引,删除时的工作流程
      新建、索引和删除文档编辑
      新建、索引和删除 请求都是 写 操作, 必须在主分片上面完成之后才能被复制到相关的副本分片,如下图所示 图 9 “新建、索引和删除单个文档”.

      图 9. 新建、索引和删除单个文档
      在这里插入图片描述
      新建、索引和删除单个文档
      以下是在主副分片和任何副本分片上面 成功新建,索引和删除文档所需要的步骤顺序:

      客户端向 Node 1 发送新建、索引或者删除请求。
      节点使用文档的 _id 确定文档属于分片 0 。请求会被转发到 Node 3,因为分片 0 的主分片目前被分配在 Node 3 上。
      Node 3 在主分片上面执行请求。如果成功了,它将请求并行转发到 Node 1 和 Node 2 的副本分片上。一旦所有的副本分片都报告成功, Node 3 将向协调节点报告成功,协调节点向客户端报告成功。

    • 多少个分片正常时,es才会执行写操作
      consistency
      consistency,即一致性。在默认设置下,即使仅仅是在试图执行一个_写_操作之前,主分片都会要求 必须要有 规定数量(quorum)(或者换种说法,也即必须要有大多数)的分片副本处于活跃可用状态,才会去执行_写_操作(其中分片副本可以是主分片或者副本分片)。这是为了避免在发生网络分区故障(network partition)的时候进行_写_操作,进而导致数据不一致。_规定数量_即:

      int( (primary + number_of_replicas) / 2 ) + 1
      (主分片+ 副本分片)/2 +1
      consistency 参数的值可以设为 one (只要主分片状态 ok 就允许执行_写_操作),all(必须要主分片和所有副本分片的状态没问题才允许执行_写_操作), 或 quorum 。默认值为 quorum , 即大多数的分片副本状态没问题就允许执行_写_操作。

    cs
    下一篇:没有了