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

配置项作用 #

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

当集群启动时,只有在达到指定数量的数据节点后,才会开始恢复集群状态和分片数据。

配置项属性 #

  • 配置路径: gateway.recover_after_data_nodes
  • 数据类型: integer
  • 默认值: -1(表示禁用此条件)
  • 最小值: -1
  • 是否可选: 是

配置项详解 #

工作机制 #

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

决策逻辑 #

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

配置建议 #

生产环境(推荐) #

gateway.recover_after_data_nodes: 3

建议: 设置为集群中数据节点数量的一半或更多,确保有足够的节点参与恢复。

高可用环境 #

gateway.recover_after_data_nodes: 5

建议: 设置为较大值(如数据节点总数的 70%-80%),确保高可用性。

开发环境 #

gateway.recover_after_data_nodes: -1

建议: 设置为 -1(禁用),在开发环境中可以立即开始恢复。

单节点集群 #

gateway.recover_after_data_nodes: 1

建议: 设置为 1,确保至少有一个数据节点可用。

代码示例 #

easysearch.yml 配置 #

gateway:
  # 至少有 3 个数据节点才开始恢复
  recover_after_data_nodes: 3

  # 配合超时使用
  recover_after_time: 5m

完整的 Gateway 配置 #

gateway:
  # 期望的数据节点数量
  expected_data_nodes: 5

  # 恢复所需的最少数据节点
  recover_after_data_nodes: 3

  # 超时后即使节点不足也强制恢复
  recover_after_time: 10m

与其他恢复条件配合 #

gateway:
  # 可以同时设置多个恢复条件
  recover_after_data_nodes: 3      # 至少 3 个数据节点
  recover_after_master_nodes: 2    # 至少 2 个主节点
  recover_after_nodes: 5            # 至少 5 个总节点
  recover_after_time: 5m            # 或等待 5 分钟后强制恢复

相关配置 #

配置项作用默认值
gateway.expected_data_nodes期望的数据节点数量-1
gateway.recover_after_master_nodes恢复所需的主节点数量-1
gateway.recover_after_nodes恢复所需的总节点数量-1
gateway.recover_after_time恢复等待的超时时间0(不等待)

恢复条件的关系 #

恢复开始当满足以下任一条件:

1. recover_after_data_nodes 达到
2. recover_after_master_nodes 达到
3. recover_after_nodes 达到
4. recover_after_time 超时

所有条件都是"或"的关系

使用场景 #

大型集群逐步启动 #

gateway:
  recover_after_data_nodes: 10

用途: 确保大部分数据节点上线后再开始恢复,避免部分节点承担过多负载。

高可用集群 #

gateway:
  recover_after_data_nodes: 5
  recover_after_time: 10m

用途: 等待足够的数据节点,如果超时则强制恢复以保证可用性。

数据完整性优先 #

gateway:
  recover_after_data_nodes: 7
  recover_after_time: 30m

用途: 数据完整性优先,等待足够多的节点或超时很长时间。

快速恢复 #

gateway:
  recover_after_data_nodes: 1

用途: 只要有 1 个数据节点就开始恢复,优先考虑可用性。

行为示例 #

场景 1:节点数量充足 #

配置: recover_after_data_nodes = 3
当前数据节点: 4 个

结果: ✅ 立即开始恢复

场景 2:节点数量不足 #

配置: recover_after_data_nodes = 3
当前数据节点: 2 个

结果: ⏳ 等待更多节点加入
日志: "not recovering from gateway, nodes_size (data) [2] < recover_after_data_nodes [3]"

场景 3:禁用条件 #

配置: recover_after_data_nodes = -1
当前数据节点: 1 个

结果: ✅ 立即开始恢复(条件被禁用)

注意事项 #

  1. 默认禁用: 默认值为 -1,表示此条件被禁用。

  2. 仅限数据节点: 此配置只计算数据节点,不包括主节点(非数据节点)。

  3. 与其他条件配合: 可以与 recover_after_time 配合使用,实现超时强制恢复。

  4. 不是强制要求: 设置此值不意味着必须有这么多节点,只是何时开始恢复的条件。

  5. 动态更新: 此配置支持动态更新,修改后立即生效。

  6. 集群重启: 集群完整重启时,此配置可以帮助控制恢复顺序。

  7. 日志监控: 启用调试日志可以看到节点等待恢复的详细信息。