云搜索分片设定最佳实践

容器与中间件中间件技术服务知识库
什么是分片

在 Elasticsearch 中,分片是数据的载体,一个 index 会被拆分为多个 shard,不同的 shard 承载一部分数据,用来实现水平拓展。同时,每一个 shard 可以分为 primary shard(主分片),和 0 个或多个 replica shard(副本分片),副本分片是主分片的拷贝,用来解决高可用的问题。 图片

如何设定主副分片数

每一个分片为一个 Lucene 实例,对于分片的大小,分片的数量如果设置不当,会有以下影响

分片size过大

  • 导致后续无法通过增加节点水平扩展
  • 单个分片的数据量太大,如果需要增加副本,recovery 等场景中,会导致数据重新分配耗时更长,在 IO,带宽资源紧张时影响尤为明显。

分片数设置过多

多分片数的好处是提高查询速度,因为查询会跨多个分片并行执行,同时写入流量也会分散到多个实例。在7 .x 之前,默认 5 个 primary shard,每个 primary shard 默认分配一个 replica,7.0 开始,默认主分片设置成 1,解决了 over-sharding 的问题,分片数过多可能会导致如下问题:

  • 影响搜索结果的相关性打分,影响统计结果的准确性
  • 单个节点上过多的分片,会导致资源浪费,同时也会影响性能

那么我们该如何选择适合的分片数和大小?

分片大小设置建议

通常来说,有如下经验值:

  1. 在搜索类场景中,单个分片可以保持到 20GB
  2. 在日志类场景中,单个分片不要超过 50GB

分片数设置建议

基于分片大小,集群中的节点数,和节点规格来选择合适的分片数,不过需要注意的是,在关系型数据库中分库分表的概念不能在 Elasticsearch 完全套用,可能会起到反作用。建议进行一次完整的压测。通常来说有如下经验值:

  1. shard 的个数要尽可能等于数据节点数,或者是数据节点数的整数倍,避免数据倾斜。
  2. 建议单节点 shard 总数按照单节点内存 * 30 进行评估。
参考文档

42
0
0
0
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论