此文章只能说是记录我踩到的坑,或者说是前任挖的,也可以说是自己的问题,希望自己以后别再犯!
前段时间接手一个项目,用到了solr,稍微学习了一下,会简单使用用以后就没有管了,也算是怪自己没有认真去了解学习吧!
最近调整服务器,把服务器拆分成了很多个虚拟机,一个放项目,一个放数据库,一个放solr等,再加上领导比较时髦,喜欢用最先的版本,之前一直用的solr-5.5.0,这次直接用最新的solr7.5...
迁徙项目后,改了新的solr配置,发现连接不上,提示“Solr HTTP Error 7: 'Couldn't connect to server”,开始检查:
1.仔细检查配置的IP,端口,path都没有问题
2.本地和测试环境都装solr7.5测试,同样的方法去测试,可以使用...
3.关掉solr,发现依然是“Solr HTTP Error 7: 'Couldn't connect to server”,那就是说,从头到尾都没有访问过去
4.检查防火墙,关掉防火墙测试,依然是这个提示!
5.再查php扩展,phpinfo(),发现新的php没有安装solr扩展!好吧,装上再试试,依然报错
6.php -m看solr是否有扩展(因为曾经有两个版本php,而web用的和命令行用的php不是同一个,命令行里用的php没有装solr),这次服务器上也有一个php5.6和一个php7,排查这个原因。也不是。。。
7.比较两边扩展是否一样,版本是否一致,也没有问题...
8.再次检查了一次配置,和连接方法,本地和测试环境都使用同样的方法去插入索引,可以!
9.抱着绝望和侥幸的心理去用本地连接测试环境,并添加索引。。。嗯?!!本地solr添加了一条,而测试环境没添加?!!(看到了希望!!)
10.打印
$solrClient = new SolrClient($solr);
print_r($solrClient->ping());exit;
出来看!内容如下:
object(SolrPingResponse)#14 (11) { ["http_status":protected] => int(200) ["parser_mode":protected] => int(0) ["success":protected] => bool(true) ["response_writer":protected] => string(3) "xml" ["http_status_message":protected] => string(1) " " ["http_request_url":protected] => string(80) "http://localhost:8983/solr/ad_info_data/admin/ping/?version=2.2&indent=on&wt=xml" ["http_raw_request_headers":protected] => string(211) "HEAD /solr/ad_info_data/admin/ping/?version=2.2&indent=on&wt=xml HTTP/1.1 User-Agent: PHP Solr Client 2.1.0 Host: localhost:8983 Accept: */* Accept-Charset: utf-8 Keep-Alive: 300 Connection: keep-alive " ["http_raw_request":protected] => string(1) " " ["http_raw_response_headers":protected] => string(84) "HTTP/1.1 200 OK Content-Type: application/xml; charset=UTF-8 Content-Length: 0 " ["http_raw_response":protected] => string(84) "HTTP/1.1 200 OK Content-Type: application/xml; charset=UTF-8 Content-Length: 0 " ["http_digested_response":protected] => string(1) " " }
找到了!居然在连接本地!那就是说,我配置的访问IP根本没有起作用!
11.查看相关文档说明,原来配置IP用的是 hostname,而我一直跟着前任用host!
好吧,原来solr没有传入hostname的时候,默认使用本地solr,而本地和测试环境都有,因此一直可以正常使用,偏偏正式环境分成了很多个虚拟机,solr没有放一起,导致始终链接不上!改回来,测试,成功!
不知道以前的版本是使用host,新版本hostname还是从头到尾都用错了,我更倾向于后者。也不能怪别人,只能怪自己不认真去学习...敲个警钟!