配置项作用 #
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,表示此条件被禁用。仅限数据节点: 此配置只计算数据节点,不包括主节点(非数据节点)。
与其他条件配合: 可以与
recover_after_time配合使用,实现超时强制恢复。不是强制要求: 设置此值不意味着必须有这么多节点,只是何时开始恢复的条件。
动态更新: 此配置支持动态更新,修改后立即生效。
集群重启: 集群完整重启时,此配置可以帮助控制恢复顺序。
日志监控: 启用调试日志可以看到节点等待恢复的详细信息。





