如何配置SolrCloud使用HTTPS创建集合?Windows部署报错求助
解决SolrCloud 7.2.1创建集合时使用HTTP而非HTTPS的问题
我之前部署SolrCloud SSL集群时也碰到过一模一样的问题,这是因为只开启了Web端的SSL,但没把SSL配置同步到集群通信和集合创建的逻辑里。下面是具体的解决方法,以及修改配置文件前必须做的准备:
一、问题根源
当你设置SOLR_SSL_ENABLED=true后,Solr的Web界面和单个节点的API会切换到HTTPS,但SolrCloud的节点间通信、集合创建命令默认还是会沿用HTTP协议,除非你明确配置所有SSL相关参数,并且告诉Solr用HTTPS来发现节点和执行集群操作。
二、具体解决步骤
1. 完善每个节点的SSL配置(修改solr.in.cmd)
在Windows Server 2016上,每个Solr节点的solr.in.cmd需要补充以下关键配置(替换成你的实际路径和密码):
# 启用SSL set SOLR_SSL_ENABLED=true # 密钥库和信任库配置(必须指定,否则节点间SSL握手会失败) set SOLR_SSL_KEY_STORE=C:\solr\config\solr-ssl.keystore.jks set SOLR_SSL_KEY_STORE_PASSWORD=your_secure_password set SOLR_SSL_TRUST_STORE=C:\solr\config\solr-ssl.truststore.jks set SOLR_SSL_TRUST_STORE_PASSWORD=your_secure_password # 节点间通信的SSL认证设置(根据你的安全需求调整) set SOLR_SSL_NEED_CLIENT_AUTH=false set SOLR_SSL_WANT_CLIENT_AUTH=false # 明确指定HTTPS的主机和端口 set SOLR_HOST=https://your-solr-node-hostname set SOLR_PORT=8983 # 填写你的SSL端口,默认是8983 set SOLR_SSL_PORT=8983
2. 创建集合时强制指定HTTPS地址
不管用命令行还是Web界面,都要确保使用HTTPS格式的节点地址:
- 命令行创建:
solr create_collection -c collectionname -shards 2 -replicationFactor 2 -url https://your-solr-node-hostname:8983/solr
- Web界面操作:在创建集合的表单中,把所有节点的地址改成
https://solrurl:8983/solr和https://solrurl:8984/solr,替换掉默认的HTTP格式。
3. 清理ZooKeeper中的旧节点信息(若之前用HTTP启动过集群)
如果你的集群之前是用HTTP启动的,ZooKeeper里会留存旧的HTTP节点地址,导致创建集合时Solr尝试连接无效的HTTP地址。可以用Solr自带的zkcli工具清理:
zkcli.bat -zkhost your-zookeeper-host:2181 -cmd rm /live_nodes zkcli.bat -zkhost your-zookeeper-host:2181 -cmd rm /overseer/node
清理完成后,重启所有Solr节点,让它们以HTTPS地址重新注册到ZooKeeper。
三、修改配置文件前的必要操作
- 停止所有Solr节点:务必执行
solr stop -all,确保所有节点完全关闭,避免配置文件被进程占用,导致修改无法生效。 - 备份原配置文件:复制一份
solr.in.cmd到其他目录(比如solr.in.cmd.backup),万一配置出错可以快速恢复到原始状态。 - 验证SSL证书有效性:检查密钥库和信任库的路径是否正确,密码是否匹配,并且集群中所有节点使用相同的证书文件,避免节点间SSL握手失败。
额外排查点
如果还是出现IO异常,要检查节点间的防火墙是否允许HTTPS端口(8983、8984)的通信——虽然你能通过浏览器访问HTTPS,但节点间的内部通信可能被防火墙拦截,这也是常见的诱因之一。
内容的提问来源于stack exchange,提问作者Lars-Pascal Körber
相关产品推荐
相关产品推荐

