面试题答案
一键面试1. 分片数量调整
- 合理预估:根据数据量和查询模式预估合适的分片数。过少的分片可能导致单个分片数据量过大,影响查询性能;过多的分片会增加集群管理开销。例如,如果数据增长较为稳定,可根据当前数据量及未来一段时间的增长预期,结合节点数量来计算合理分片数。公式可大致为:预期数据量 / 单分片合理承载数据量 = 总分片数。
- 动态调整:Elasticsearch支持动态调整分片数量,但这一操作开销较大。仅在必要时(如数据量急剧增长或前期预估严重失误)进行,且建议在业务低峰期操作。
2. 副本数量设置
- 权衡可用性与性能:副本数增加可提升数据可用性和读性能,但会占用更多磁盘空间和网络带宽(副本同步时)。一般生产环境中,建议设置1 - 2个副本。对于读多写少的场景,可适当增加副本数量;而写操作频繁的场景,过多副本会影响写性能,应适当减少。
- 动态调整副本:根据业务高峰低谷动态调整副本数量。例如,在业务高峰期前,适当增加副本以提升读性能;在业务低谷期,减少副本以释放资源。
3. 分片分配参数调整
- cluster.routing.allocation.enable:控制分片分配的类型,有
all
(默认,允许分配主分片和副本分片)、primaries
(仅允许分配主分片)、new_primaries
(仅允许分配新创建索引的主分片)、none
(禁止所有分片分配)。在节点维护或故障恢复时,可临时设置为primaries
或none
,避免不必要的分片分配,提升集群稳定性。 - cluster.routing.allocation.node_concurrent_recoveries:控制每个节点上并发恢复的分片数量。默认值为2,可根据节点的硬件资源(如CPU、网络带宽)进行调整。若节点性能强劲,可适当增大该值以加快恢复速度;若节点资源紧张,应减小该值防止对正常业务产生过大影响。
- cluster.routing.allocation.node_initial_primaries_recoveries:控制每个节点上初始主分片恢复的并发数。默认值为4,同样可依据节点资源情况调整。在新索引创建或节点重启时,此参数影响主分片的恢复速度。
4. 感知硬件条件
- 根据磁盘类型调整:如果使用的是SSD磁盘,由于其读写性能远高于机械磁盘,可适当增加并发恢复数量等参数,充分利用磁盘性能。例如,将
cluster.routing.allocation.node_concurrent_recoveries
适当增大。 - 内存与CPU考量:内存充足且CPU性能高的节点,可承载更多的并发分片操作。在设置参数时,应考虑节点的内存和CPU资源,避免因参数设置过高导致节点资源耗尽,影响整体性能。例如,可根据节点的CPU核心数和内存大小,按一定比例调整并发参数。