ElasticSearch | 分片设计 & 管理

单个分片

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值