You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Solr Cloud 8.7.0与外部ZooKeeper 3.6.2集群通信异常排查求助

排查Solr Cloud与ZooKeeper集群间歇性连接异常的思路

这种时好时坏的节点连接问题在Docker环境下的ZK+Solr部署中并不少见,结合你给出的配置和现象,我整理了几个核心排查方向:

1. 修正ZooKeeper集群的节点地址配置

你当前的ZOO_SERVERS里,server.1用了0.0.0.0:2888:3888;2181,这个配置的问题在于:ZK集群内部通信时,其他节点(以及连接集群的Solr节点)需要获取到每个ZK节点的实际可访问地址,而0.0.0.0是监听所有网卡的占位符,并不是一个可被外部节点解析的有效地址。

建议修改server.1的配置为该ZK节点的实际主机名(比如${ZOO_NODE_01},和另外两个节点的变量保持一致):

ZOO_SERVERS: server.1=${ZOO_NODE_01}:2888:3888;2181 server.2=${ZOO_NODE_02}:2888:3888;2181 server.3=${ZOO_NODE_03}:2888:3888;2181

修改后重启所有ZK节点,确保集群内部能正常通信,再重启Solr节点观察状态。

2. 检查Docker网络的稳定性

Docker默认的bridge网络DNS解析偶尔会有不稳定的情况,加上网络链路的间歇性丢包,也会导致这类问题:

  • 确认所有ZK和Solr节点都加入了同一个自定义Docker网络(而非默认bridge),自定义网络的DNS解析更可靠。
  • 在Solr容器内执行连通性测试:
    • 持续ping每个ZK节点的主机名,观察是否有丢包:ping zk-node-01 -c 100
    • 测试2181端口的连通性:telnet zk-node-01 2181,重复几次看是否能稳定连接。

3. 调整Solr的ZK客户端超时配置

如果网络存在轻微延迟,默认的ZK客户端超时可能不足以应对,导致间歇性连接失败:

  • 编辑Solr的solr.xml配置文件,调大zkClientTimeout参数(比如从默认15000ms改为30000ms):
    <solrcloud>
      <str name="zkClientTimeout">30000</str>
    </solrcloud>
    
  • 确保Solr启动时指定的是完整的ZK集群地址,而非单个节点,比如:
    solr start -c -z zk-node-01:2181,zk-node-02:2181,zk-node-03:2181
    

4. 验证ZooKeeper的连接数与状态

虽然你已经调大了ZOO_MAX_CLIENT_CNXNS到200,但可以进一步验证是否存在连接耗尽的情况:

  • 在任意ZK节点执行echo mntr | nc <zk-host> 2181,查看输出中的zk_num_alive_connections指标,确认数值远低于200。
  • 用ZK自带的客户端工具zkCli.sh连接集群,执行stat命令,检查所有节点的状态是否正常,没有节点处于"disconnected"状态。

5. 排查防火墙/安全组限制

即使是Docker环境,宿主机的防火墙或者云平台的安全组也可能间歇性阻断端口:

  • 确保ZK节点之间的2888(集群通信)、3888(选举)端口,以及ZK与Solr之间的2181(客户端连接)端口都完全开放,没有临时的规则变更。

内容的提问来源于stack exchange,提问作者Prithwi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 06:57:31