
# 集群Master节点过载
#### 问题描述
当Elasticsearch/OpenSearch集群的Master节点出现过载时，会导致以下问题：
- 集群状态显示为yellow或red，无法进行元数据操作。
- 集群中多个节点同时脱离。
- 日志中出现"master node failed"、"restarting discovery"等提示。
- 调用接口时提示Master节点不存在。
 
#### 问题原因
- Pending Task过载：任务积压和优先级冲突会导致Pending Task过载，例如业务变更产生大量PUT mapping任务阻塞，或urgent级别任务抢占资源导致创建索引任务无法执行。
- 分片数过多：分片数过多会增加Master节点的负担，使其内存占用过高、CPU资源耗尽，并引发任务处理延迟。
- 元数据处理过载：频繁的元数据操作（如索引创建、分片分配）或集群状态更新超时，可能导致Master节点CPU使用率持续高于90%，进而影响集群稳定性。
 
#### 解决方法
**场景一：Pending Task过载**
- 任务积压时的处理方案：
  1. 重启集群（所有节点），释放积压的pending_tasks任务，恢复集群的正常运行。
  
  2. 阻止索引的写入和mapping更新操作，以防止任务进一步积压，确保集群稳定。
     ```
     PUT my_index/_settings
     {
       "index.blocks.metadata": true,
       "index.blocks.write": true,
       "index.blocks.read_only": true
     }
     ```
     
  
  3. 等待集群恢复稳定后，恢复索引的写入和mapping更新操作，以恢复正常业务。
     ```
     PUT my_index/_settings
     {
       "index.blocks.metadata": false,
       "index.blocks.write": false,
       "index.blocks.read_only": false
     }
     ```
     
  
  4. 验证集群状态，当返回green时表示故障修复。
     ```
     GET _cluster/health?pretty
     ```
     
   
- 任务优先级冲突的处理方案：
  1. 定位无法创建索引的原因，如检查索引模板配置、验证分片数是否超过集群容量、检查存储空间是否充足。
  
  2. 修复配置问题，如修改索引模板参数（如分片数、副本数）、清理存储空间、修复分片分配策略。
  
  3. 重新提交创建索引请求，确认问题解决。
   
**场景二：分片数过多**
- 方案1：升级Master节点规格，缓解分片数过多导致的过载。 建议堆内存与分片数比例为：每GB堆内存支撑200分片。例如，当前分片数为4000，则建议堆内存至少为20GB。
  
- 方案2：优化分片策略，减少Master节点的元数据处理压力。 例如，合并小分片（使用_shrink API）、调整索引模板分片数、增加副本数分散负载。
  
**场景三：元数据处理过载**
- 方案1：扩容Master节点规格，提升Master节点的处理能力，避免CPU过载。 增加CPU核心数，建议至少8核；提升内存容量，建议至少32GB。
  
- 方案2：优化元数据操作，减少元数据处理的频率和复杂度。 例如，避免频繁的元数据变更操作、合并批量操作（如批量创建索引）、优化分片分配策略。
  
 
