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

配置项作用 #

discovery.zen.fd.register_connection_listener 配置项用于控制故障检测机制是否注册传输连接监听器到传输服务上。

连接监听器用于监听节点连接断开事件,当检测到连接断开时立即触发故障检测逻辑。

配置项属性 #

  • 配置路径: discovery.zen.fd.register_connection_listener
  • 数据类型: boolean
  • 默认值: true
  • 是否可选: 是
  • 弃用状态: ⚠️ 已弃用

配置项详解 #

工作机制 #

启用连接监听(register_connection_listener = true,默认) #

传输服务
    │
    ↓
注册 FDConnectionListener
    │
    ↓
监听连接事件
    │
    ├──────── 节点连接
    │              ↓
    │         正常通信
    │
    └──────── 节点断开
                   ↓
              立即触发故障检测
                   ↓
              handleTransportDisconnect()
                   ↓
              根据配置处理:
              - 尝试重连
              - 或判定故障

禁用连接监听(register_connection_listener = false) #

传输服务
    │
    ↓
不注册连接监听器
    │
    ↓
只通过 ping 检测故障
    │
    ↓
定期 ping (ping_interval)
    │
    ├──────── 成功 → 节点正常
    │
    └──────── 失败 → retryCount++
                        ↓
                   达到重试次数
                        ↓
                   判定故障

连接监听器工作流程 #

1. 注册阶段

FaultDetection 构造函数
    │
    ↓
创建 FDConnectionListener
    │
    ↓
if (registerConnectionListener == true)
    │
    ↓
transportService.addConnectionListener(connectionListener)
    │
    ↓
监听器开始工作


2. 事件处理阶段

节点断开连接
    │
    ↓
FDConnectionListener.onNodeDisconnected()
    │
    ↓
创建异步任务处理
    │
    ↓
handleTransportDisconnect(node)
    │
    ├──────── connectOnNetworkDisconnect = true
    │              ↓
    │         尝试重新连接
    │              │
    │         ┌────┴────┐
    │        成功      失败
    │         │          │
    │         ↓          ↓
    │    继续 ping    判定故障
    │
    └──────── connectOnNetworkDisconnect = false
                       ↓
                  立即判定故障

配置建议 #

⚠️ 重要提示 #

此配置项已被标记为弃用,主要用于测试环境。生产环境应保持默认值 true

生产环境(默认) #

discovery.zen.fd.register_connection_listener: true

建议: 保持默认值 true。代码注释明确说明 “should always be true”(应该始终为 true)。

测试环境 #

discovery.zen.fd.register_connection_listener: false

建议: 仅在测试环境中禁用,用于简化测试场景。

代码示例 #

easysearch.yml 配置(已弃用) #

discovery:
  zen:
    fd:
      register_connection_listener: true  # 默认值

禁用连接监听器(仅测试) #

discovery:
  zen:
    fd:
      register_connection_listener: false  # 仅用于测试

配合其他故障检测配置 #

discovery:
  zen:
    fd:
      register_connection_listener: true
      connect_on_network_disconnect: false
      ping_interval: 1s
      ping_timeout: 30s
      ping_retries: 3

相关配置 #

配置项作用默认值
discovery.zen.fd.register_connection_listener是否注册连接监听器true
discovery.zen.fd.connect_on_network_disconnect网络断开时是否重连false
discovery.zen.fd.ping_intervalping 间隔1s
discovery.zen.fd.ping_timeoutping 超时30s
discovery.zen.fd.ping_retriesping 重试次数3

配置配合效果 #

register_connection_listener = true
connect_on_network_disconnect = false

结果: 网络断开时立即判定故障
适用: 快速故障检测


register_connection_listener = true
connect_on_network_disconnect = true

结果: 网络断开时先尝试重连
适用: 避免网络波动误判


register_connection_listener = false

结果: 只通过 ping 检测故障
适用: 测试环境

使用场景 #

推荐保持 true 的场景 #

  • 生产环境: 需要快速发现节点故障
  • 高可用集群: 故障检测速度至关重要
  • 稳定网络: 网络连接状态可靠

可以禁用的场景 #

  • 测试环境: 简化测试场景
  • 单元测试: 需要控制故障检测触发时机
  • 集成测试: 模拟特定网络状态

注意事项 #

  1. 已弃用: 此配置已被标记为弃用,但生产环境仍应使用默认值 true

  2. 主要用于测试: 代码注释明确说明 “used mainly for testing”。

  3. 应该始终为 true: 在生产环境中应始终启用连接监听器。

  4. 快速故障检测: 启用连接监听器可以更快发现连接断开。

  5. 与 ping 的区别: 连接监听器是被动监听,ping 是主动检测。

  6. 调试日志: 可以通过日志查看连接事件和故障检测触发。

  7. 配置验证: 系统会验证配置的有效性。

  8. 测试后恢复: 测试完成后务必恢复默认值 true