美文网首页
ElasticSearch | 分片设计 & 管理

ElasticSearch | 分片设计 & 管理

作者: 乌鲁木齐001号程序员 | 来源:发表于2020-06-01 18:22 被阅读0次

    单个分片

    7.0 开始,新创建一个索引时,默认只有 1 个主分片;

    优点
    • 单个分片可以避免算分不准,聚合不准的问题;
    缺点
    • 单个索引,单个分片时,集群无法实现水平扩展,即使增加新的节点,也无法实现水平扩展;

    两个分片

    如果一个索引的主分片数是 2,那么集群增加一个节点后,ElasticSearch 会自动进行分片的移动,也叫 Shard Rebalancing。

    如何设计分片数

    分片数 > 节点数
    • 集群中有新的节点加入,分片就可以进行自动分配;
    • 分片在重新分配时,系统不会有 downtime;
    多分片的好处

    一个索引的多个分片,如果分布在多个节点,多个节点可以并行执行:

    • 查询可以并行执行;
    • 数据写入可以分散到多个机器;

    分片过多所带来的副作用

    Shard 是 ElasticSearch 实现集群水平扩展的最小单位,过多设置分片数会带来一些潜在的问题;

    • 每个分片是一个 Lucene 的 Index,会占用机器的资源,过多的分片会导致额外的性能开销;
    • 每次搜索的请求,需要从每个分片上获取数据;
    • 分片的 Meta 信息由 Master 节点维护,过多,会增加管理的负担,经验值,控制分片的总数在 10w 以内;

    如何确定主分片数

    从存储的角度看
    • 日志类应用:单个分片不要大于 50 GB;
    • 搜索类应用:单个分片不要超过 20 GB;
    为什么要控制分片存储的大小?
    • 提高 Update 的性能;
    • Merge 时,减少所需的资源;
    • 丢失节点后,具备更快的恢复速度,便于分片在集群内 Rebalancing;

    如何确定副本分片数

    副本是主分片的拷贝,需要占用和主分片一样的资源,其主要作用有:

    • 提高系统的可用性;
    • 防止数据丢失;
    • 响应查询请求;
    副本分片对性能的影响
    • 副本会降低数据的索引(写入)速度,有几份副本,就会有几倍的 CPU 资源消耗在索引上;
    • 会减缓对主分片的查询压力,但是会消耗同样的内存资源;如果机器资源充足,提高副本数,可以提高整体的 QPS;

    ElasticSearch 的分片策略

    ElasticSearch 会尽量保证节点上的分片数大致相同,有些时候会有一些问题:

    • 扩容的新节点没有数据,导致新索引集中在新的节点;
    • 热点数据过于集中,可能会产生性能问题;
    几个影响 ElasticSearch 分片策略的参数
    • index.routing.allocation.total_shards_per_node
    • cluster.routing.allocation.total_shards_perL_node

    相关文章

      网友评论

          本文标题:ElasticSearch | 分片设计 & 管理

          本文链接:https://www.haomeiwen.com/subject/uuvszhtx.html