Elasticsearch 分片和副本

一.分片

  分片包括主分片和副本分片,主分片的数量在创建索引时就固定下来了,无法更改主分片数量。

  1.es的分片是使用在索引上,数据量少的建议使用1个分片,每个分片最好不超过30GB。你认为你的数据能达到200GB, 我们推荐你最多分配7到8个分片。

    如下示例:GET /_cat/shards/supplier_quote-2024.02?v=true   当前索引每个分片在21GB,属于合理。

 

  2.过多的分片也需要额外的成本:
    1)每个分片本质上就是一个Lucene索引, 因此会消耗相应的文件句柄, 内存和CPU资源。
    2)每个搜索请求会调度到索引的每个分片中. 如果分片分散在不同的节点倒是问题不太. 但当分片开始竞争相同的硬件资源时, 性能便会逐步下降。
    3)ES使用词频统计来计算相关性. 当然这些统计也会分配到各个分片上. 如果在大量分片上只维护了很少的数据, 则将导致最终的文档相关性较差。

  3.不要现在就为你可能在三年后才能达到的10TB数据做过多分配. 如果真到那一天, 你也会很早感知到性能变化的。

  4.较大的分片在失败后需要更长的时间才能恢复。当一个节点发生故障时,Elasticsearch 会在数据层的剩余节点之

    间重新平衡该节点的分片。此恢复过程通常涉及通过网络复制分片内容,因此 100GB 分片的恢复时间是 50GB 分片的两倍。

    查询语句:GET _cat/shards?v=true&h=index,prirep,shard,store&s=prirep,store&bytes=gb

  5.避免大量碎片问题。一个节点可以容纳的分片数量与可用的堆空间成正比。作为一般规则,每 GB 堆空间的分片数应小于 20。 例如:一个节点的堆为4G, 分片数量应小于80个。

  6.集群环境下,查询索引的主节点和副本节点分配情况

  GET /_cat/shards/product_specification?v=true

   P是主节点,R是副本节点

    

   下面索引是创建了6个分片,和每个分片对应的一个副本, 分别分配到了不同节点,就算down掉一个节点,也能保证正常运行

   下面是没有集群的ES,副本没有分配,如下所示:

二.副本分片

  1. 副本提供数据的冗余,副本以防止硬件故障并增加处理读取请求(如搜索或检索文档)

  2.索引中主分片的数量在创建索引时是固定的,但副本分片的数量可以随时更改,而不会中断索引或查询操作。

#查看当前副本数
get  /supplier_quote-2024.03/_settings

#动态设置当前副本数
put  /supplier_quote-2024.03/_settings
{
  "number_of_replicas":2
}

  3.查看分片信息

GET /_cat/shards/supplier_quote-2024.03?v=true

      r表示副本,由来的一个副本,再添加了一个副本,副本共6个分片

     此时集群状态为yellow,有三个未分配, 分配根据数据量需要一定时间,最好不在高峰期添加副本

 

posted on 2022-12-26 16:02  花阴偷移  阅读(186)  评论(0编辑  收藏  举报

导航