目录:
1、 Solr:solr-4.4.0;
2、 jdk:jdk-6u13-linux-i586(由于solr采用4.4版本,所以jdk最低版本要求1.6);
3、 tomcat:apache-tomcat-7.0.42.tar;
4、 中文分词:IKAnalyzer2012FF_hf1;
5、 Slave环境通过复制Master来搭建;
安装jdk及tomcat过程
其中需要配置tomcat最大链接数,可参考:
<Connector port="9080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" maxThreads="1000" minSpareThreads="100" maxSpareThreads="200" acceptCount="1000" URIEncoding="UTF-8"/>
- minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10
- maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75
- acceptCount:允许的最大连接数,应大于等于maxProcessors,默认值为100
- enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false
- connectionTimeout: 网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加大并发连接数,应同时加大这两个参数。
webserver允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。
安装solr
第一步:测试环境
服务器1(Master)
操作系统: Centos 6.2
IP:192.168.17.128:9080
JDK: Sun JDK 1.6
Web服务器: Apache Tomcat6
Solr版本: Solr4.4.0服务器2(Slave)
操作系统: Centos 6.2
IP:192.168.17.128:9081
JDK: Sun JDK 1.6
Web服务器: Apache Tomcat6
Solr版本: Solr4.4.0
1、 拷贝solr.war到tomcat目录;
cp -rf solr-4.4.0/example/webapps/solr.war /usr/local/apache-tomcat-7.0.42/webapps/solr.war
2、 创建solr工作主目录;
mkdir -p /home/solr/master/solr4server
mkdir -p /home/solr/master/solr4home
mkdir -p /home/solr/slave/solr4server
mkdir -p /home/solr/slave/solr4home
[root@demoserver solr\]\# pwd
cd /home/solr
ll
total 16
drwxr-xr-x. 2 root root 4096 Jan 27 20:14 solr4home
drwxr-xr-x. 2 root root 4096 Jan 27 20:15 solr4home
drwxr-xr-x. 2 root root 4096 Jan 27 20:14 solr4server
drwxr-xr-x. 2 root root 4096 Jan 27 20:15 solr4server
cp -a . /home/solr/master/solr4home/
cp -a . /home/solr/slave/solr4home/
cd tomcat/
ll
total 88
drwxr-xr-x. 2 root root 4096 Jan 27 01:35 bin
drwxr-xr-x. 3 root root 4096 Jan 27 04:51 conf
drwxr-xr-x. 2 root root 4096 Jan 27 01:35 lib
\-rw-r--r--. 1 root root 37951 Jan 27 01:35 LICENSE
drwxr-xr-x. 2 root root 4096 Jan 27 04:51 logs
\-rw-r--r--. 1 root root 556 Jan 27 01:35 NOTICE
\-rw-r--r--. 1 root root 7317 Jan 27 01:35 RELEASE-NOTES
\-rw-r--r--. 1 root root 6368 Jan 27 01:35 RUNNING.txt
drwxr-xr-x. 2 root root 4096 Jan 27 01:35 temp
drwxr-xr-x. 7 root root 4096 Jan 27 01:35 webapps
drwxr-xr-x. 3 root root 4096 Jan 27 04:51 work
[root@demoserver tomcat\]\# cp -R . /home/solr/master/solr4server/
3、 配置solrhome;
vi /home/solr/master/solr4server\_master/bin/catalina.sh
# -----------------------------------------------------------------------------
# configure at 2014/2/14 at in catalina.sh
export JAVA_HOME=/usr/local/jdk
export SOLR_HOME=/home/solr/master
export JAVA_OPTS="$JAVA_OPTS -server -Xmx1024m -Xms512m -Dsolr.solr.home=$SOLR_HOME/solr4home/"
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/lib
export CATALINA_HOME=$SOLR_HOME/solr4server
export CATALINA_BASE=$SOLR_HOME/solr4server
3、 拷贝solr启动的依赖文件;
* 复制example/lib/ext目录中的jar包到项目的classpath下,可以将这些jar包放到%TOMCAT_HOME%/lib下,
也可以将它们放到项目的lib下(在我的电脑上是/webapps/solr/WEB-INF/lib);
* example/resources/log4j.properties也拷到classpath(我在/solr_server/webapps/solr/目录下新建了一个classes目录,
放log4j.properties放了进去);
4、 配置好后可以直接启动tomcat;
pwd
/home/solr/master/solr4server/bin
./startup.sh
5、 如果第三步没有执行这时会无法访问,solr4.4.0需要拷贝一些jar;
cp solr-4.4.0/example/lib/ext/\* /usr/local/apache-tomcat-7.0.42/webapps/solr/WEB-INF/lib/
cp solr-4.4.0/example/resources/log4j.properties /usr/local/apache-tomcat-7.0.42/lib/
6、 重启tomcat,访问URLhttp://10.248.12.135:9080/solr;
http://blog.csdn.net/natureice/article/details/9109351export JAVA\_HOME=/usr/java/jdk1.6.0\_38
export SOLR\_HOME=/usr/local/solr/solr1
export JAVA\_OPTS="$JAVA\_OPTS -server -Xmx1024m -Xms512m -Dsolr.solr.home=$SOLR\_HOME/solrhome/"
export PATH=$PATH:$JAVA\_HOME/bin
export CLASSPATH=$JAVA\_HOME/lib
export CATALINA\_HOME=$SOLR\_HOME/tomcat
export CATALINA\_BASE=$SOLR\_HOME/tomcat
7、 查看启动过日志;
错误信息 :
INFO - 2014-02-16 11:50:04.751; org.apache.solr.handler.component.QueryElevationComponent; Loading QueryElevation from: /home/solr/master/solr4home/collection1/conf/elevate.xml
Feb16, 2014 11:50:10 AM org.apache.catalina.connector.Connector pause
SEVERE: Protocol handler pause failed
java.net.UnknownHostException: demoserver: demoserver
atjava.net.InetAddress.getLocalHost(InetAddress.java:1402)
atorg.apache.jk.common.ChannelSocket.unLockSocket(ChannelSocket.java:485)
atorg.apache.jk.common.ChannelSocket.pause(ChannelSocket.java:284)
atorg.apache.jk.server.JkMain.pause(JkMain.java:683)
atorg.apache.jk.server.JkCoyoteHandler.pause(JkCoyoteHandler.java:153)
atorg.apache.catalina.connector.Connector.pause(Connector.java:1073)
atorg.apache.catalina.core.StandardService.stop(StandardService.java:563)
atorg.apache.catalina.core.StandardServer.stop(StandardServer.java:744)
atorg.apache.catalina.startup.Catalina.stop(Catalina.java:633)
atorg.apache.catalina.startup.Catalina.start(Catalina.java:608)
atsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
atjava.lang.reflect.Method.invoke(Method.java:597)
atorg.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
atorg.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Feb16, 2014 11:50:11 AM org.apache.catalina.core.StandardService stop
INFO: Stopping service Catalina
解决方案:
That is related with
hostname
and
/etc/hosts
If/etc/hosts doesn't containt the definition of the hostname it fails.
Just add your hostname to /etc/hosts for example
ifyour hostname is work add or modified the following line:
127、 0.0.1worklocalhost;
通过以上配置后ok。
访问solr服务
http://192.168.17.128:9080/solr/#/
![ ][nbsp]
中文分词IK Analyzer 2012FF_hf1配置与安装
1、 下载IK+Analyzer+2012FF_hf1.zip分词的安装包;
用到其中三个文件:
IKAnalyzer2012FF_u1.jar,放到$CATALINA_HOME/webapps/solr/WEB-INF/lib/目录下
IKAnalyzer.cfg.xml,stopword.dic,放到$CATALINA_HOME/webapps/solr/WEB-INF/classes/目录下,
如果classes目录没有,可以手动创建一个。
2、 将分词配置到solr的配置文件中;
#vi /usr/local/solrhome/collection1/conf/schema.xml,添加如下内容:
3、 将需要建立索引的域添加到schema.xml中;
<!-- self define field -->
<field name="wareCode" type="string" indexed="true" stored="true"/>
<field name="wareName" type="text_ik" indexed="true" stored="true"/>
<field name="wareStatus" type="string" indexed="true" stored="true"/>
<field name="openDate" type="date" indexed="true" stored="true"/>
<field name="shopPrice" type="string" indexed="true" stored="true"/>
<field name="marketPrice" type="string" indexed="true" stored="true"/>
<field name="deliverType" type="string" indexed="true" stored="true"/>
<field name="wareIntegralValue" type="long" indexed="true" stored="true"/>
<field name="gCurValue" type="long" indexed="true" stored="true"/>
<field name="mCurValue" type="long" indexed="true" stored="true"/>
<field name="eCurValue" type="long" indexed="true" stored="true"/>
<field name="isHtmlChannel" type="string" indexed="true" stored="true"/>
<field name="isWapChannel" type="string" indexed="true" stored="true"/>
<field name="isSearch" type="string" indexed="true" stored="true"/>
<field name="sKind" type="long" indexed="true" stored="true"/>
<field name="sName" type="string" indexed="true" stored="true"/>
<field name="mKind" type="long" indexed="true" stored="true"/>
<field name="mName" type="string" indexed="true" stored="true"/>
4、 最后重启tomcat,查看分词效果;
![ ][nbsp 1]
Slave环境通过复制Master来搭建
1、 复制Master中的服务和solrhome;
\[root@demoserver solr\]\# ll
total 8
drwxr-xr-x. 4 root root 4096 Jan 29 14:17 master
drwxr-xr-x. 2 root root 4096 Feb 16 15:07 slave
\[root@demoserver solr\]\# cp -R master/\* slave/
\[root@demoserver solr\]\# pwd
/home/solr
\[root@demoserver solr\]\# cd slave/
\[root@demoserver slave\]\# ll
total 8
drwxr-xr-x. 4 root root 4096 Feb 16 15:08 solr4home
drwxr-xr-x. 9 root root 4096 Feb 16 15:08 solr4server
2、 修改solr4server中的启动参数;
\[root@demoserver bin\]\# vi catalina.sh
# configure solr slave 2014/2/14 at in catalina.sh
export JAVA_HOME=/usr/local/jdk
export SOLR_HOME=/home/solr/slave
export JAVA_OPTS="$JAVA_OPTS -server -Xmx1024m -Xms512m -Dsolr.solr.home=$SOLR_HOME/solr4home/"
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/lib
export CATALINA_HOME=$SOLR_HOME/solr4server
export CATALINA_BASE=$SOLR_HOME/solr4server
3、 修改服务器的端口;
\[root@demoserver conf\]\# pwd
/home/solr/slave/solr4server/conf
编辑server.xml ,修改port为从原来8080到9081
<Connector port="9081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="1000" minSpareThreads="100" maxSpareThreads="200" acceptCount="1000" URIEncoding="UTF-8"/>
编辑server.xml ,修改port为从8005到9005
<Server port="9005" shutdown="SHUTDOWN">
4、 主从复制搭建过程;
第一步:修改主:solrconfig.xml文件(目前设置的同步周期为一分钟,具体可视生产环境的具体环境而定。)
在Master的配置文件中添加一个RequestHandler,RequestHandler是复制在Master端的主要手段,Slave会定期向这个RequestHandler发送请求,并完成索引文件的同步;
Master负责写数据(Write_A)到从服务器中;
replicateAfter说明什么时候进行复制,取值可以是startup, commit, optimize分别是创建索引、提交索引、优化索引之后。每当这些动作执行结束后,Slave就可以从Master上进行复制了;
Write_A 作为Master,solrconfig.xml 找到<requestHandler name="/replication" ,修改前内容:
<requestHandler name="/replication" class="solr.ReplicationHandler" >
<!--
Toenable simple master/slave replication, uncomment one of the
sections below, depending on whether this solr instance should be
the "master" or a "slave". If this instance is a "slave" you will
also need to fill in the masterUrl to point to a real machine.
\-->
<!--
<lst name="master">
<str name="replicateAfter">commit</str>
<str name="replicateAfter">startup</str>
<str name="confFiles">schema.xml,stopwords.txt</str>
</lst>
\-->
<!--
<lst name="slave">
<str name="masterUrl">http://your-master-hostname:8983/solr</str>
<str name="pollInterval">00:00:60</str>
</lst>
\-->
</requestHandler>
修改后内容:
<requestHandler name="/replication" class="solr.ReplicationHandler" >
<lst name="master">
<!-- 当有新的索引被提交,标记新的索引和保存新索引的文件名 -->
<str name="replicateAfter">commit</str>
<!-- 当系统启动时,标记新的索引和保存新索引的文件名 -->
<str name="replicateAfter">startup</str>
<!-- 当索引优化时,标记新的索引和保存新索引的文件名,因为 commit,optimize 基本上是同时存在的,所以一般不用设置 optimize-->
<!-- <str name="replicateAfter">optimize</str>-->
<!-- 索引优化后创建一份备份索引,这个在复制过程中不需要设置 -->
<!--<str name="backupAfter">optimize</str>-->
<!-- 索引复制时,也同步从服务器的配置文件 solrconfig_slave.xml:solrconfig.xml 表示复制时,在slave端以solrconfig.xml进行保存,这样slave才能认识这个文件-->
<str name="confFiles">solrconfig_slave.xml:solrconfig.xml,schema.xml,stopwords.txt,elevate.xml</str>
<!-- 设置验证信息 -->
<str name="httpBasicAuthUser">admin</str>
<str name="httpBasicAuthPassword">123456</str>
</lst>
</requestHandler>
第二步:从solr 文件
Slave负责读数据(Read_B)到从服务器内容。
属性值是一个url,指向了Master服务器上的提供复制功能的requestHandler,
master_host:master服务器的IP或主机名
port:master服务器上部署solr应用的tomcat端口
solr:solr的web应用名称
corename: solr中的core,关于core的概念请参考相关文档。由于本案例中不涉及多个core,所以此处的url中可以去掉这项,也不对core进行过多的说明。
replaction: Master上提供复制的requestHandler名称,也就是requestHandler的name属性的取值。
Read\_B 作为Slave,solrconfig.xml 找到