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,重复几次看是否能稳定连接。
- 持续ping每个ZK节点的主机名,观察是否有丢包:
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
相关产品推荐
相关产品推荐

