--- title: "按主节点数量恢复配置" date: 2026-01-09 lastmod: 2026-01-09 description: "gateway.recover_after_master_nodes 配置项用于控制集群恢复所需的最少主节点数量(已弃用)。" tags: ["Gateway", "集群恢复", "主节点", "已弃用"] summary: "配置项作用 # gateway.recover_after_master_nodes 配置项用于指定集群恢复状态所需要的最少主节点数量。 当集群启动时,只有在达到指定数量的主节点(有资格成为 master 的节点)后,才会开始恢复集群状态。 配置项属性 # 配置路径: gateway.recover_after_master_nodes 数据类型: integer 默认值: 0 最小值: 0 是否可选: 是 弃用状态: ⚠️ 已弃用 配置项详解 # 工作机制 # 集群启动过程 │ ↓ 读取配置 recover_after_master_nodes = 2 │ ↓ 检测当前主节点数量 │ ├──────── 当前数量 < 配置数量 │ │ │ ↓ │ 不开始恢复,继续等待 │ │ │ ↓ │ [调试日志] 主节点数量不足 │ │ │ ↓ │ 等待更多主节点加入... │ └──────── 当前数量 ≥ 配置数量 │ ↓ 开始恢复集群状态 决策逻辑 # // 简化的代码逻辑 if (recoverAfterMasterNodes !" --- ## 配置项作用 `gateway.recover_after_master_nodes` 配置项用于指定集群恢复状态所需要的**最少主节点数量**。 当集群启动时,只有在达到指定数量的主节点(有资格成为 master 的节点)后,才会开始恢复集群状态。 ## 配置项属性 - **配置路径**: `gateway.recover_after_master_nodes` - **数据类型**: `integer` - **默认值**: `0` - **最小值**: `0` - **是否可选**: 是 - **弃用状态**: ⚠️ **已弃用** ## 配置项详解 ## 工作机制 ``` 集群启动过程 │ ↓ 读取配置 recover_after_master_nodes = 2 │ ↓ 检测当前主节点数量 │ ├──────── 当前数量 < 配置数量 │ │ │ ↓ │ 不开始恢复,继续等待 │ │ │ ↓ │ [调试日志] 主节点数量不足 │ │ │ ↓ │ 等待更多主节点加入... │ └──────── 当前数量 ≥ 配置数量 │ ↓ 开始恢复集群状态 ``` ## 决策逻辑 ```java // 简化的代码逻辑 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` ## 使用替代配置(推荐) ```yaml # 推荐使用以下配置替代 # 控制主节点选举所需的最小节点数 discovery.zen.minimum_master_nodes: 2 # 控制数据节点数量 gateway.recover_after_data_nodes: 3 ``` ## 代码示例 ## easysearch.yml 配置(已弃用) ```yaml # 不推荐使用此配置 gateway: recover_after_master_nodes: 2 # 期望 2 个主节点才开始恢复 ``` ## 推荐的替代配置 ```yaml cluster: discovery: zen: # 控制主节点选举,防止脑裂 minimum_master_nodes: 2 gateway: # 确保有足够的数据节点 recover_after_data_nodes: 3 ``` ## 完整的恢复配置 ```yaml 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` | ✅ 推荐 | 主节点选举所需最小节点数 | ## 默认值回退逻辑 ```java // 如果未设置 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` | ## 配置组合示例 ## 生产环境配置(推荐) ```yaml cluster: discovery: zen: # 防止脑裂:设置为 (master_eligible_nodes / 2) + 1 minimum_master_nodes: 2 gateway: # 确保有足够的数据节点才恢复 recover_after_data_nodes: 3 # 超时后强制恢复 recover_after_time: 5m ``` ## 高可用配置 ```yaml 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. **升级迁移**: 如果使用此配置,建议在升级时迁移到新的配置方式。