面试题答案
一键面试1. 调整的配置参数
- discovery.zen.minimum_master_nodes:
- 此参数定义了为了形成一个可用集群,必须可见的主节点的最小数量。在节点频繁加入和离开的高负载场景下,适当调整这个值很关键。如果设置过小,可能导致脑裂问题;设置过大,可能使得新节点加入或节点恢复时难以形成集群。
- cluster.routing.allocation.node_concurrent_recoveries:
- 控制每个节点上并发恢复(如分片恢复、副本分配等)的数量。在高负载下,减少此值可以避免过多的恢复操作消耗过多资源,影响集群稳定性。
- indices.recovery.max_bytes_per_sec:
- 限制每个分片恢复时的最大带宽。在高负载场景,通过降低此值,可防止恢复操作占用过多网络带宽,影响其他正常的集群通信。
2. 调整的先后顺序
- 首先调整 discovery.zen.minimum_master_nodes:
- 因为确保集群正确选主是集群稳定运行的基础。先根据集群当前节点数量、网络状况等因素,合理估算该值。例如,假设集群有
N
个潜在的主节点,一般设置为(N / 2) + 1
,这样能在防止脑裂和快速形成集群之间取得平衡。
- 因为确保集群正确选主是集群稳定运行的基础。先根据集群当前节点数量、网络状况等因素,合理估算该值。例如,假设集群有
- 接着调整 cluster.routing.allocation.node_concurrent_recoveries:
- 主节点选举稳定后,考虑节点上资源的合理分配。根据节点的硬件资源(如 CPU、内存等)来调整此值。例如,如果节点 CPU 使用率经常过高,可适当降低这个并发恢复数,避免过多恢复任务同时进行导致资源耗尽。
- 最后调整 indices.recovery.max_bytes_per_sec:
- 在确保主节点选举和节点资源分配合理后,再关注网络资源的控制。根据网络带宽情况,设置合适的带宽限制。例如,如果集群网络带宽有限,适当降低此值,防止恢复操作占满带宽,导致集群通信不畅。
3. 通过监控指标验证调整的有效性
- 集群健康状态:
- 使用
/_cluster/health
API 监控。绿色状态表示所有分片和副本都已分配且正常工作,黄色表示所有主分片都已分配,但部分副本未分配,红色表示存在未分配的主分片,集群不可用。调整配置后,集群健康状态应尽快达到并保持绿色,说明选主和分片分配策略有效。
- 使用
- 节点资源利用率:
- 监控节点的 CPU、内存、磁盘 I/O 和网络带宽等指标。例如,使用 Elasticsearch 内置的监控工具或结合系统监控工具(如 Prometheus + Grafana)。调整
cluster.routing.allocation.node_concurrent_recoveries
和indices.recovery.max_bytes_per_sec
后,CPU 和内存使用率应保持在合理范围(如 CPU 使用率低于 80%,内存使用率低于 90%),磁盘 I/O 和网络带宽也不应出现长时间满负荷情况,表明资源分配合理,集群稳定性增强。
- 监控节点的 CPU、内存、磁盘 I/O 和网络带宽等指标。例如,使用 Elasticsearch 内置的监控工具或结合系统监控工具(如 Prometheus + Grafana)。调整
- 选举耗时:
- 可以通过监控日志或自定义脚本来记录每次选举的时间。调整
discovery.zen.minimum_master_nodes
后,选举耗时应明显缩短,且在节点加入和离开时,能快速完成新的选举过程,保证集群的可用性,说明选主配置调整有效。
- 可以通过监控日志或自定义脚本来记录每次选举的时间。调整
- 分片恢复速度:
- 使用
/_cat/recovery
API 查看分片恢复情况。调整cluster.routing.allocation.node_concurrent_recoveries
和indices.recovery.max_bytes_per_sec
后,分片恢复应能平稳进行,既不会因资源限制过严导致恢复过慢,也不会因资源使用过度影响集群其他功能,证明恢复配置调整合适。
- 使用