配置项作用 #
discovery.zen.no_master_block 配置项用于控制当集群中没有主节点时,对哪些操作进行限制。
此配置确保在没有主节点协调的情况下,防止执行可能导致数据不一致的操作。
配置项属性 #
- 配置路径:
discovery.zen.no_master_block - 数据类型:
string(枚举值) - 默认值:
write - 可选值:
all,write,metadata_write - 是否可选: 是
- 弃用状态: ⚠️ 已弃用(推荐使用
cluster.no_master_block)
配置项详解 #
工作机制 #
集群状态检测
检查集群是否有主节点
│
├──────── 有主节点
│ ↓
│ 所有操作正常 ✅
│
└──────── 无主节点
↓
根据 no_master_block 阻塞操作
│
┌──────────┴──────────┐
│ │
阻塞级别 操作状态
│ │
all ─────→┐ 所有操作被阻塞 ❌
│ (包括读取)
│
write ────→┐ 写操作被阻塞 ❌
│ 读操作允许 ✅
│
metadata_write ─→ 只阻塞元数据写 ❌
普通数据写允许 ✅
三种阻塞级别 #
1. all(全部阻塞) #
无主节点时的行为:
读操作 (GET):
→ 阻塞 ❌
→ 错误: SERVICE_UNAVAILABLE
写操作 (POST/PUT/DELETE):
→ 阻塞 ❌
→ 错误: SERVICE_UNAVAILABLE
元数据操作:
→ 阻塞 ❌
→ 错误: SERVICE_UNAVAILABLE
2. write(写阻塞,默认) #
无主节点时的行为:
读操作 (GET):
→ 允许 ✅
→ 可以读取已有数据
写操作 (POST/PUT/DELETE):
→ 阻塞 ❌
→ 错误: SERVICE_UNAVAILABLE
元数据操作:
→ 阻塞 ❌
→ 错误: SERVICE_UNAVAILABLE
3. metadata_write(元数据写阻塞) #
无主节点时的行为:
读操作 (GET):
→ 允许 ✅
普通数据写操作:
→ 允许 ✅
→ 可以写入普通文档
元数据写操作:
→ 阻塞 ❌
→ 创建索引等操作被阻止
配置建议 #
⚠️ 重要提示 #
此配置项已被标记为弃用,推荐使用新的 cluster.no_master_block 配置。
生产环境(默认) #
discovery.zen.no_master_block: write
建议: 保持默认值 write。阻塞写操作但允许读取,平衡了数据一致性和可用性。
高可用要求 #
discovery.zen.no_master_block: all
建议: 使用 all。当数据一致性至关重要时使用,但在无主节点时完全不可用。
灵活配置 #
discovery.zen.no_master_block: metadata_write
建议: 使用 metadata_write。允许普通数据写入,但阻止元数据变更。
代码示例 #
easysearch.yml 配置(已弃用) #
discovery:
zen:
no_master_block: write # 默认值
推荐的替代配置 #
cluster:
no_master_block: write # 新配置(推荐)
阻塞所有操作 #
discovery:
zen:
no_master_block: all # 阻塞所有操作
允许普通写入 #
discovery:
zen:
no_master_block: metadata_write # 只阻塞元数据写
相关配置 #
| 配置项 | 状态 | 作用 | 默认值 |
|---|---|---|---|
discovery.zen.no_master_block | ⚠️ 已弃用 | 旧版无主节点阻塞配置 | write |
cluster.no_master_block | ✅ 推荐 | 新版无主节点阻塞配置 | write |
迁移配置 #
旧配置(已弃用):
discovery.zen.no_master_block: write
新配置(推荐):
cluster.no_master_block: write
操作影响分析 #
| 操作类型 | all | write | metadata_write |
|---|---|---|---|
| 读取文档 | ❌ 阻塞 | ✅ 允许 | ✅ 允许 |
| 写入文档 | ❌ 阻塞 | ❌ 阻塞 | ✅ 允许 |
| 创建索引 | ❌ 阻塞 | ❌ 阻塞 | ❌ 阻塞 |
| 删除索引 | ❌ 阻塞 | ❌ 阻塞 | ❌ 阻塞 |
| 更新映射 | ❌ 阻塞 | ❌ 阻塞 | ❌ 阻塞 |
| 搜索请求 | ❌ 阻塞 | ✅ 允许 | ✅ 允许 |
使用场景 #
推荐使用 write(默认)的场景 #
- 生产环境: 需要在主节点故障时仍能读取数据
- 数据一致性: 阻止写操作防止数据冲突
- 监控可用: 允许监控系统读取集群状态
推荐使用 all 的场景 #
- 强一致性要求: 绝对不能容忍数据不一致
- 运维操作: 需要确保集群完全正常后才操作
- 关键业务: 数据准确性比可用性更重要
推荐使用 metadata_write 的场景 #
- 数据导入: 允许在无主节点时继续导入数据
- 日志收集: 允许继续写入日志数据
- 非关键操作: 元数据变更不频繁的场景
注意事项 #
已弃用: 此配置已被标记为弃用,建议迁移到
cluster.no_master_block。数据一致性: 无主节点时的阻塞是防止数据不一致的重要机制。
返回状态: 所有被阻塞的操作都返回
SERVICE_UNAVAILABLE状态。动态更新: 旧配置和新配置都支持动态更新,可以运行时修改。
监控建议: 监控主节点状态和无主节点阻塞事件。
业务影响: 根据业务需求选择合适的阻塞级别。
恢复行为: 主节点选举完成后,阻塞自动解除。
配置测试: 在生产环境使用前,在测试环境中验证配置效果。





