📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

配置项作用 #

gateway.recover_after_master_nodes 配置项用于指定集群恢复状态所需要的最少主节点数量

当集群启动时,只有在达到指定数量的主节点(有资格成为 master 的节点)后,才会开始恢复集群状态。

配置项属性 #

  • 配置路径: gateway.recover_after_master_nodes
  • 数据类型: integer
  • 默认值: 0
  • 最小值: 0
  • 是否可选: 是
  • 弃用状态: ⚠️ 已弃用

配置项详解 #

工作机制 #

集群启动过程
    │
    ↓
读取配置 recover_after_master_nodes = 2
    │
    ↓
检测当前主节点数量
    │
    ├──────── 当前数量 < 配置数量
    │              │
    │              ↓
    │         不开始恢复,继续等待
    │              │
    │              ↓
    │         [调试日志] 主节点数量不足
    │              │
    │              ↓
    │         等待更多主节点加入...
    │
    └──────── 当前数量 ≥ 配置数量
                   │
                   ↓
              开始恢复集群状态

决策逻辑 #

// 简化的代码逻辑
if (recoverAfterMasterNodes != -1) {
    if (nodes.getMasterNodes().size() < recoverAfterMasterNodes) {
        // 不开始恢复
        logger.debug("not recovering from gateway, nodes_size (master) [{}] < recover_after_master_nodes [{}]",
                     nodes.getMasterNodes().size(), recoverAfterMasterNodes);
        return;
    }
}
// 开始恢复

配置建议 #

⚠️ 重要提示 #

此配置项已被标记为弃用,建议使用以下替代方案:

  1. 控制主节点选举: 使用 discovery.zen.minimum_master_nodes
  2. 控制数据节点数量: 使用 gateway.recover_after_data_nodes

使用替代配置(推荐) #

# 推荐使用以下配置替代

# 控制主节点选举所需的最小节点数
discovery.zen.minimum_master_nodes: 2

# 控制数据节点数量
gateway.recover_after_data_nodes: 3

代码示例 #

easysearch.yml 配置(已弃用) #

# 不推荐使用此配置
gateway:
  recover_after_master_nodes: 2  # 期望 2 个主节点才开始恢复

推荐的替代配置 #

cluster:
  discovery:
    zen:
      # 控制主节点选举,防止脑裂
      minimum_master_nodes: 2

gateway:
  # 确保有足够的数据节点
  recover_after_data_nodes: 3

完整的恢复配置 #

cluster:
  discovery:
    zen:
      minimum_master_nodes: 2

gateway:
  # 使用数据节点控制而不是主节点
  recover_after_data_nodes: 3
  recover_after_time: 5m

相关配置 #

配置项状态作用
gateway.recover_after_master_nodes⚠️ 已弃用恢复所需的主节点数量
gateway.recover_after_data_nodes✅ 推荐恢复所需的数据节点数量
gateway.recover_after_nodes⚠️ 已弃用恢复所需的总节点数量
discovery.zen.minimum_master_nodes✅ 推荐主节点选举所需最小节点数

默认值回退逻辑 #

// 如果未设置 recover_after_master_nodes,
// 系统会回退到使用 discovery.zen.minimum_master_nodes
if (RECOVER_AFTER_MASTER_NODES_SETTING.exists(settings)) {
    recoverAfterMasterNodes = RECOVER_AFTER_MASTER_NODES_SETTING.get(settings);
} else if (discovery instanceof ZenDiscovery) {
    recoverAfterMasterNodes = settings.getAsInt("discovery.zen.minimum_master_nodes", -1);
} else {
    recoverAfterMasterNodes = -1;
}

使用场景 #

原本的使用场景(已弃用) #

此配置原适用于以下场景:

  • 防止脑裂: 确保足够的主节点参与恢复
  • 大型集群: 协调多个主节点的启动顺序
  • 高可用性: 等待冗余主节点上线

推荐的替代方案 #

需求推荐配置
防止脑裂discovery.zen.minimum_master_nodes
确保数据节点数量gateway.recover_after_data_nodes
控制恢复时机gateway.recover_after_time

配置组合示例 #

生产环境配置(推荐) #

cluster:
  discovery:
    zen:
      # 防止脑裂:设置为 (master_eligible_nodes / 2) + 1
      minimum_master_nodes: 2

gateway:
  # 确保有足够的数据节点才恢复
  recover_after_data_nodes: 3

  # 超时后强制恢复
  recover_after_time: 5m

高可用配置 #

cluster:
  discovery:
    zen:
      minimum_master_nodes: 3  # 5个主节点中的3个

gateway:
  recover_after_data_nodes: 5
  recover_after_time: 10m

注意事项 #

  1. 已弃用: 此配置已被弃用,建议使用 discovery.zen.minimum_master_nodes 替代。

  2. 仅限主节点: 此配置只计算有资格成为主节点的节点,不包括纯数据节点。

  3. 与 minimum_master_nodes 的区别:

    • recover_after_master_nodes: 控制何时开始恢复
    • minimum_master_nodes: 控制主节点选举
  4. 默认值: 默认值为 0,表示不等待特定数量的主节点。

  5. 动态更新: 此配置不支持动态更新,修改后需要重启节点。

  6. 回退行为: 如果未设置,系统会尝试使用 discovery.zen.minimum_master_nodes 的值。

  7. 升级迁移: 如果使用此配置,建议在升级时迁移到新的配置方式。