面试题答案
一键面试可优化的配置参数及原因
cluster.routing.allocation.node_concurrent_recoveries
- 原因:该参数控制每个节点上同时进行恢复(包括从gateway恢复数据)的分片数量。如果设置过大,可能会导致节点资源(如磁盘I/O、网络带宽)竞争激烈,影响性能;设置过小,则恢复速度缓慢。通过合理调整此参数,可以平衡资源利用和恢复效率。
- 示例:默认值可能为2,若磁盘I/O能力较强,网络带宽充足,可以适当提高该值,如设置为4,以加快恢复速度。
cluster.routing.allocation.disk.watermark.low
、cluster.routing.allocation.disk.watermark.high
和cluster.routing.allocation.disk.watermark.flood_stage
- 原因:这些参数用于控制磁盘空间相关的分片分配策略。如果磁盘空间使用不合理,可能会导致某些节点因空间不足而影响恢复和分配过程。合理设置磁盘水位标记,能避免节点因磁盘问题出现性能瓶颈。例如,
low
标记设置过低,可能导致磁盘空间剩余不多时仍进行分片分配,影响恢复;high
和flood_stage
标记不合理也会导致类似问题。 - 示例:适当提高
low
值,如从默认的85% 提高到90%,让系统更早对磁盘空间紧张做出反应,防止在空间较小时才进行分片迁移或停止分配。
- 原因:这些参数用于控制磁盘空间相关的分片分配策略。如果磁盘空间使用不合理,可能会导致某些节点因空间不足而影响恢复和分配过程。合理设置磁盘水位标记,能避免节点因磁盘问题出现性能瓶颈。例如,
indices.recovery.max_bytes_per_sec
- 原因:此参数限制了每个分片恢复时的最大带宽。若带宽限制设置不合理,可能会出现带宽占用过高影响其他业务,或者带宽利用不足导致恢复过慢的情况。合理设置该参数,可以在保证其他业务正常运行的同时,优化恢复性能。
- 示例:如果网络带宽充足,且没有其他对带宽敏感的业务,可以适当提高此值,如从默认的40mb提高到100mb,加快恢复速度。
gateway.recover_after_nodes
、gateway.expected_nodes
和gateway.recover_after_time
- 原因:
gateway.recover_after_nodes
定义了集群中至少有多少个节点启动后才开始从gateway恢复数据;gateway.expected_nodes
设定预期的节点数;gateway.recover_after_time
表示等待指定时间后开始恢复。这些参数设置不当,可能导致恢复过早或过晚,影响整体性能。合理设置它们,可以确保在集群状态稳定时才进行恢复,提高恢复成功率和性能。 - 示例:在一个有10个节点的集群中,如果经常出现节点启动延迟的情况,可以适当提高
gateway.recover_after_nodes
的值,如从默认的2提高到5,同时合理设置gateway.recover_after_time
,如设置为1m,避免过早开始恢复导致恢复失败或性能不佳。
- 原因:
优化后的预期效果
- 恢复速度提升:通过合理调整
cluster.routing.allocation.node_concurrent_recoveries
和indices.recovery.max_bytes_per_sec
等参数,在不影响节点其他业务和整体稳定性的前提下,提高从gateway到allocation流程中数据恢复的速度,减少整体的恢复时间。 - 资源利用更合理:优化
cluster.routing.allocation.disk.watermark.*
等参数,可以确保节点磁盘空间得到更合理的使用,避免因磁盘空间问题导致的分片分配失败或性能下降,使集群资源利用更加均衡和高效。 - 集群稳定性增强:恰当设置
gateway.recover_after_nodes
、gateway.expected_nodes
和gateway.recover_after_time
等参数,使得数据恢复在集群状态相对稳定时进行,减少恢复过程中因节点状态不稳定导致的失败次数,增强集群的整体稳定性和可靠性。