SolrCloud 5.5.0重启后出现分片无服务器托管及PKI解密失败错误
问题一:Solr-cloud - no servers hosting shard: shard1
这个报错说明集群找不到托管shard1的节点,通常是重启后ZooKeeper的集群状态和实际节点状态不一致导致的。下面是分步排查和解决方法:
第一步:确认ZooKeeper中的集群状态
用ZooKeeper客户端工具查看集群状态文件,确认shard1的节点分配情况:./zkCli.sh -server <你的ZK地址>:<端口> get /solr/clusterstate.json检查输出里对应collection下的shard1条目,看是否有active的节点。如果没有任何节点关联,说明shard的分配信息丢失了。
第二步:检查Solr节点的启动状态
逐个查看所有Solr节点的日志(默认在solr_home/logs目录),搜索ZooKeeper相关的日志,确认节点是否成功连接到ZK集群。如果有连接超时或者会话过期的报错,需要调整Solr配置文件solr.xml中的zkClientTimeout参数,建议调大到30000(30秒),然后重启节点。第三步:手动修复shard分配
如果节点正常启动但shard仍未分配,用Solr Collections API手动重新平衡leader或者添加副本:- 重新平衡shard1的leader:
curl -X POST "http://<Solr节点地址>:<端口>/solr/admin/collections?action=REBALANCELEADERS&collection=<你的collection名称>&shard=shard1" - 如果shard1完全没有副本,添加新副本:
curl -X POST "http://<Solr节点地址>:<端口>/solr/admin/collections?action=ADDREPLICA&collection=<你的collection名称>&shard=shard1&node=<目标节点名称>"
节点名称可以从Solr Admin的Cloud页面查看,格式通常是
<节点IP>:<端口>_solr。- 重新平衡shard1的leader:
问题二:PKIAuthenticationPlugin解密失败(java.security.InvalidKeyException: No installed provider supports this key: (null))
这个报错的核心是密钥没有被正确加载,导致解密时找不到有效的密钥提供者。下面是排查方向:
检查密钥文件的路径和权限
打开你的solrconfig.xml,找到PKIAuthenticationPlugin的配置段,确认privateKey或publicKey的路径是绝对路径,比如:<plugin name="pki" class="org.apache.solr.security.PKIAuthenticationPlugin"> <str name="privateKey">/opt/solr/security/private.key</str> <!-- 其他配置 --> </plugin>同时确保Solr进程的运行用户(通常是solr用户)对该密钥文件有读取权限,用
chmod 640 /opt/solr/security/private.key和chown solr:solr /opt/solr/security/private.key调整权限。确认密钥格式是否符合要求
Solr的PKIAuthenticationPlugin要求私钥是PKCS#8格式,如果你的密钥是PKCS#1格式(比如开头是-----BEGIN RSA PRIVATE KEY-----),需要用OpenSSL转换:openssl pkcs8 -topk8 -inform PEM -in old_private.key -out new_private.key -nocrypt然后把solrconfig.xml里的密钥路径改成转换后的新文件。
检查加密提供者是否存在
Solr 5.5.0依赖BouncyCastle作为加密提供者,确认Solr的lib目录下是否有bcprov-jdk15on.jar(对应JDK 1.5+的版本)。如果没有,下载对应版本的jar包放到solr_home/lib目录,然后重启Solr。
另外,也可以在JRE的lib/security/java.security文件中添加BouncyCastle作为安全提供者:security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider注意序号不要和已有的提供者冲突。
排查环境变量问题
重启后Solr的启动环境可能变化,检查启动脚本(比如solr start的脚本)中的JAVA_OPTS是否包含密钥相关的配置,比如是否指定了密钥库路径等。确保启动参数和重启前一致。
内容的提问来源于stack exchange,提问作者user3008692

