搞定了一切的一切以后下一步就是正式使用了,可是以前介绍的都是在单台服务器上进行的部署,若是在生产环境出现了单台故障怎么办呢?提供稳定性和性能的最直观的方式就是集群,solr官方提供了cloud的集群方式java
附上:mysql
喵了个咪的博客:http://w-blog.cnweb
Solr官网:http://lucene.apache.org/solr/sql
PS:8.0.0版本已经发布,本文使用此时较为稳定的7.7.1版本apache
下载solrvim
> cd /app/install/ > wget http://mirror.bit.edu.cn/apache/lucene/solr/7.7.1/solr-7.7.1.tgz > tar -zxvf solr-7.7.1.tgz > mv solr-7.7.1 /usr/local/ > vim /etc/profile export PATH=/usr/local/solr-7.7.1/bin:$PATH > source /etc/profile
在tomcat包下的webapps目录新建一个目录,取名solrtomcat
> cd /data/wwwroot/default > mkdir solr
> cp -rf /usr/local/solr-7.7.1/server/solr-webapp/webapp/* /data/wwwroot/default/solr > cp -rf /usr/local/solr-7.7.1/server/lib/ext/* /data/wwwroot/default/solr/WEB-INF/lib > cp -rf /usr/local/solr-7.7.1/server/lib/metrics-* /data/wwwroot/default/solr/WEB-INF/lib > cp -rf /usr/local/solr-7.7.1/dist/solr-dataimporthandler-extras-7.7.1.jar /data/wwwroot/default/solr/WEB-INF/lib > cp -rf /usr/local/solr-7.7.1/dist/solr-dataimporthandler-7.7.1.jar /data/wwwroot/default/solr/WEB-INF/lib
> mkdir /home/solr-home > cp -rf /usr/local/solr-7.7.1/server/solr/* /home/solr-home/
> vim /data/wwwroot/default/solr/WEB-INF/web.xml <env-entry> <env-entry-name>solr/home</env-entry-name> <env-entry-value>/home/solr-home</env-entry-value> <env-entry-type>java.lang.String</env-entry-type> </env-entry> <!-- <security-constraint> <web-resource-collection> <web-resource-name>Disable TRACE</web-resource-name> <url-pattern>/</url-pattern> <http-method>TRACE</http-method> </web-resource-collection> <auth-constraint/> </security-constraint> <security-constraint> <web-resource-collection> <web-resource-name>Enable everything but TRACE</web-resource-name> <url-pattern>/</url-pattern> <http-method-omission>TRACE</http-method-omission> </web-resource-collection> </security-constraint> -->
分别给予权限服务器
> chown -R www:www /home/solr-home/ > chown -R www:www /data/wwwroot/default/solr/
把配置好的solr 和 solrhome 复制到其他两个节点app
> scp -r /home/solr-home root@solr-2:/home/ > scp -r /home/solr-home root@solr-3:/home/ > scp -r /data/wwwroot/default/solr root@solr-2:/data/wwwroot/default/ > scp -r /data/wwwroot/default/solr root@solr-3:/data/wwwroot/default/
配置solrCloud相关的配置。每一个solrhome下都有一个solr.xml,把其中的ip及端口号配置好负载均衡
> vim /home/solr-home/solr.xml
让zookeeper统一管理配置文件。须要把/conf目录上传到zookeeper
> cd /app/install/solr-7.7.1/server/scripts/cloud-scripts
> ./zkcli.sh -zkhost solr-1:2181,solr-2:2181,solr-3:2181 -cmd upconfig -confdir /home/solr-home/new_core/conf -confname myconf
使用zkCli.sh来确认一下文件已经上传了
修改tomcat/bin目录下的catalina.sh文件,关联solr和zookeeper 三台都须要修改
> vim /usr/local/tomcat/bin/catalina.sh JAVA_OPTS="-DzkHost=solr-1:2181,solr-2:2181,solr-3:2181"
此时重启全部的tomcat就能够正常访问到solr-ui了
PS:集群下的Collection等同于单机的core
使用SolrCloud来去进行配置过程和单机模式基本一致,可是有如下几个多出来的事情:
> vim server/solr/new_core/conf/solrconfig.xml
在solrconfig.xml 下添加如下配置,添加位置大约在 680行,SearchHandler 配置上面:
<!-- Request Handlers http://wiki.apache.org/solr/SolrRequestHandler Incoming queries will be dispatched to a specific handler by name based on the path specified in the request. If a Request Handler is declared with startup="lazy", then it will not be initialized until the first request that uses it. --> <!-- add property --> <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler> <!-- SearchHandler http://wiki.apache.org/solr/SearchHandler For processing Search Queries, the primary Request Handler provided with Solr is "SearchHandler" It delegates to a sequent of SearchComponents (see below) and supports distributed queries across multiple shards -->
> vim server/solr/new_core/conf/data-config.xml <?xml version="1.0" encoding="UTF-8"?> <dataConfig> <dataSource name="source" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/appstore" user="root" password="sunmi388" /> <document> <entity name="app" pk="id" dataSource="source" query="select * from app" deltaImportQuery="select * from app where id = '${dih.delta.id}'" deltaQuery="select id from app where update_date > '${dataimporter.last_index_time}' and type = 1"> <field column="id" name="id"/> <field column="app_name" name="app_name"/> <field column="update_date" name="update_date"/> </entity> </document> </dataConfig>
> vim server/solr/new_core/conf/managed-schema <!-- add propertity --> <field name="appName" type="string" indexed="true" stored="true" /> <field name="score" type="string" indexed="true" stored="true" /> <field name="downLoadNum" type="string" indexed="true" stored="true" /> <field name="top" type="string" indexed="true" stored="true" /> <field name="type" type="string" indexed="true" stored="true" /> <field name="update_date" type="string" indexed="true" stored="true" />
添加jar包时每一个节点都须要添加
> cd /data/wwwroot/default/solr/WEB-INF/lib/ > wget http://pic.w-blog.cn/mysql-connector-java.jar
上传配置:
> ./zkcli.sh -zkhost solr-1:2181,solr-2:2181,solr-3:2181 -cmd upconfig -confdir /home/solr-home/new_core/conf -confname myconf
PS:分词配置和依赖jar包同理
测试容错
测试分词在集群下的生效范围,在solr-1增长新的分词
> vim /data/wwwroot/default/solr/WEB-INF/classes/ext.dic 美团
增长了分词文件的节点能够识别
未增长分词文件的节点没法识别
影响范围是局部的,而且必定要重启才能生效(固然这个是IK分词库决定的)
验证 查询时自动负载均衡 经过一台服务器对一台进行压力查看整个集群的状况
> ab -c 1000 -n 100000 -k "http://solr-1:8080/solr/mycollection/select?q=appName%3Agongju"
solr-1
solr-2 -3
承载了接口请求的节点压力会比较大,其他在集群状况下提供了支持