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

配置项作用 #

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

操作影响分析 #

操作类型allwritemetadata_write
读取文档❌ 阻塞✅ 允许✅ 允许
写入文档❌ 阻塞❌ 阻塞✅ 允许
创建索引❌ 阻塞❌ 阻塞❌ 阻塞
删除索引❌ 阻塞❌ 阻塞❌ 阻塞
更新映射❌ 阻塞❌ 阻塞❌ 阻塞
搜索请求❌ 阻塞✅ 允许✅ 允许

使用场景 #

推荐使用 write(默认)的场景 #

  • 生产环境: 需要在主节点故障时仍能读取数据
  • 数据一致性: 阻止写操作防止数据冲突
  • 监控可用: 允许监控系统读取集群状态

推荐使用 all 的场景 #

  • 强一致性要求: 绝对不能容忍数据不一致
  • 运维操作: 需要确保集群完全正常后才操作
  • 关键业务: 数据准确性比可用性更重要

推荐使用 metadata_write 的场景 #

  • 数据导入: 允许在无主节点时继续导入数据
  • 日志收集: 允许继续写入日志数据
  • 非关键操作: 元数据变更不频繁的场景

注意事项 #

  1. 已弃用: 此配置已被标记为弃用,建议迁移到 cluster.no_master_block

  2. 数据一致性: 无主节点时的阻塞是防止数据不一致的重要机制。

  3. 返回状态: 所有被阻塞的操作都返回 SERVICE_UNAVAILABLE 状态。

  4. 动态更新: 旧配置和新配置都支持动态更新,可以运行时修改。

  5. 监控建议: 监控主节点状态和无主节点阻塞事件。

  6. 业务影响: 根据业务需求选择合适的阻塞级别。

  7. 恢复行为: 主节点选举完成后,阻塞自动解除。

  8. 配置测试: 在生产环境使用前,在测试环境中验证配置效果。