• Elasticsearch优化


    一、优化-硬件选择

    Elasticsearch 的基础是Lucene,所有的索引和文档数据是存储在本地的磁盘中,具体的路径可在 ES 的配置文件elasticsearch.yml中配置,如下:

    1. #
    2. # Path to directory where to store the data (separate multiple locations by comma):
    3. #
    4. path.data: /path/to/data
    5. #
    6. # Path to log files:
    7. #
    8. path.logs: /path/to/logs

    磁盘在现代服务器上通常都是瓶颈,Elasticsearch重度使用磁盘,你的磁盘能处理的吞吐量越大,你的节点就越稳定。这里有一些优化磁盘I/O的技巧:

    • 使用SSD(固态硬盘),它们比机械磁盘优秀多了。
    • 使用RAID0。条带化RAID会提高磁盘IO,代价显然就是当一块硬盘故障时整个就故障了。不要使用镜像或者奇偶校验RAID,因为副本已经提供了这个功能。
    • 使用多块硬盘,并允许Elasticsearch 通过多个path data目录配置把数据条带化分配到它们上面。
    • 不要使用远程挂载的存储,比如NFS或者SMB/CIFS,这个引入的延迟对性能来说完全是背道而驰的。

    二、优化-分片策略 

    2.1 合理设置分片数 

    分片和副本的设计为ES提供了支持分布式和故障转移的特性,但并不意味着分片和副本是可以无限分配的。而且索引的分片完成分配后由于索引的路由机制,我们是不能重新修改分片数的。

    可能有人会说,我不知道这个索引将来会变得多大,并且后面我也不能更改索引的大小,所以为了保险起见,还是给它设为 1000 个分片吧。但是需要知道的是,一个分片并不是没有代价的。这里我们需要了解下面这三个点:

    • 一个分片的底层即为一个 Lucene 索引,会消耗一定文件句柄、内存、以及 CPU运转。

    • 每一个搜索请求都需要命中索引中的每一个分片,如果每一个分片都处于不同的节点还好, 但如果多个分片都需要在同一个节点上竞争使用相同的资源就有些糟糕了。

    • 用于计算相关度的词项统计信息是基于分片的。如果有许多分片,每一个都只有很少的数据会导致很低的相关度。

    一个业务索引具体需要分配多少分片可能需要架构师和技术人员对业务的增长有个预先的判断,横向扩展应当分阶段进行。为下一阶段准备好足够的资源。 只有当你进入到下一个阶段,你才有时间思考需要作出哪些改变来达到这个阶段。 一般来说,我们遵循一些原则:

    • 控制每个分片占用的硬盘容量不超过 ES 的最大 JVM 的堆空间设置(一般设置不超过 32G,参考下文的 JVM 设置原则),因此,如果索引的总容量在 500G 左右,那分片大小在 16 个左右即可;当然,最好同时考虑原则 2。
    • 考虑一下 node 数量,一般一个节点有时候就是一台物理机,如果分片数过多,大大超过了节点数,很可能会导致一
  • 相关阅读:
    Linux和Windows之间文件自动同步
    4.0、C语言——goto语句
    Web前端:2022年最新web开发技术
    MongoDB 中的锁分析
    MongoDB下载详细安装(Windows10)
    MySQL学习(四)
    学习编程-先改变心态
    显示器鼠标滚动时或者拖拽文字变为绿色
    上海亚商投顾:沪指冲高回落 短剧、地产股集体走强
    【评价类模型】Topsis法(优劣解距离法)
  • 原文地址:https://blog.csdn.net/y_bccl27/article/details/128207414