分片策略优化之写入速度

tamoadmin 热门赛事 2024-04-25 21 0

对于Elasticsearch的分片策略优化,主要可以从以下几个方面来提高写入速度:

1.硬件选择

Elasticsearch的基础是Lucene,所有的索引和文档数据都是存储在本地的磁盘中。磁盘在现代服务器上通常都是瓶颈。因此,优化磁盘I/O是非常重要的。以下是一些优化磁盘I/O的技巧:

使用SSD,因为他们比机械磁盘优秀多了。

使用RAID0,可以提高磁盘I/O,但要注意,当一块硬盘故障时整个就故障了。

使用多块硬盘,并允许Elasticsearch通过多个path.data目录配置把数据条带化分配到它们上面。

不要使用远程挂载的存储,比如NFS或者SMB/CIFS,因为这个引入的延迟对性能来说完全是背道而驰的。

2.分片策略

合理设置分片数:分片和副本的设计为ES提供了支持分布式和故障转移的特性,但并不意味着分片和副本是可以无限分配的。一个分片的底层即为一个Lucene索引,会消耗一定文件句柄、内存、以及CPU运转。如果有许多分片,每一个都只有很少的数据会导致很低的相关度。一个业务索引具体需要分配多少分片可能需要架构师和技术人员对业务的增长有个预先的判断,横向扩展应当分阶段进行。

推迟分片分配:对于节点瞬时中断的问题,默认情况,集群会等待一分钟来查看节点是否会重新加入,如果这个节点在此期间重新加入,重新加入的节点会保持其现有的分片数据,不会触发新的分片分配。通过修改参数delayed_timeout,可以延长再均衡的时间

分片策略优化之写入速度

3.路由选择

当我们查询文档的时候,Elasticsearch如何知道一个文档应该存放到哪个分片中呢?它是通过下面这个公式来计算出来的:shard=hash(routing)%number_of_primary_shards。路由默认值是文档的id,也可以采用自定义值,比如用户id

4.写入速度优化

ES的默认配置,是综合了数据可靠性、写入速度、搜索实时性等因素。实际使用时,我们需要根据公司要求,进行偏向性的优化。针对于搜索性能要求不高,但是对写入要求较高的场景,我们需要尽可能的选择恰当写优化策略。以下是一些提升写入速度的方法:

加大TranslogFlush,目的是降低Iops、Writeblock。

增加IndexRefresh间隔,目的是减少SegmentMerge的次数。

调整Bulk线程池和队列。

优化磁盘间的任务均匀情况,将shard尽量均匀分布到物理主机的各磁盘。

优化节点间的任务分布,将任务尽量均匀地发到各节点。

以上就是Elasticsearch的分片策略优化之写入速度的一些方法,希望对您有所帮助。