一、涉及到的软件和环境
jdk1.8.0_92,tomcat8,zookeeper3.4.8,solr6.1.0
(solr6需要jdk8以上环境)
二、安装步骤
- 安装zookeeper集群
A 下载zookeeper3.4.8
B 解压至/home/zk/zookeeper-3.4.8,建立软链: tar -zxvf zookeeper-3.4.8.tar.gz ; ln -s zookeeper-3.4.8 zookeeper
C更改zk配置
i 拷贝/home/zk/zookeeper/conf/zoo_sample.cfg到同目录下,并重命名为zoo.cfg
cp /home/zk/zookeeper/conf/zoo_sample.cfg /home/zk/zookeeper/conf/zoo.cfg
ii 修改zoo.cfg
dataDir=/home/zk/zkdata/data
dataLogDir=/home/zk/zkdata/logs/
clientPort=2181
#以下配置各个zkcluster的各个node(部署几台zookeeper节点就依次都写上)
server.1=zkServer1:2888:3888
server.2=zkServer2:2888:3888
server.3=zkServer3:2888:3888
iii /home/zk目录下建zkdata/data和zkdata/logs目录
iiii /home/zk/zkdata/data目录下建立名叫myid的文件,内容为int型,表示zkserver的编号(如1,2等)
D 编辑zookeeper启动脚本$ZK_HOME_1/bin/zkServer.sh 详见下方代码块中nohup部分
nohup $JAVA -server -Xms10240m -Xmx10240m -Xmn3840m -Xss256k -XX:+CMSParallelRemarkEnabled -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+UseCMSCompactAtFullCollection -XX:+CMSClassUnloadingEnabled -XX:+DisableExplicitGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
-cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &
G 关闭zookeeper集群的防火墙以及selinux
service iptables stop
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled 重启
(setenforce 0 不需重启)
H 启动zookeeper 注意每一个zk的node都要启动,否则相互间的通信会报错.
启动命令 sh zookeeper/bin/zkServer.sh start 查看当前节点启动状态 sh zookeeper/bin/zkServer.sh status
- 安装solrcloud集群
准备包:下载solr6.1.0,网址:http://archive.apache.org/dist/lucene/solr/6.1.0/, 解压solr-6.1.0.tgz压缩包并建立软链: tar –xzvf solr-6.1.0.tgz; ln -s solr-6.1.0 solr
选择容器:solr的部署主流是jetty和tomcat两种,二种容器对于性能上有没有影响暂时还没有深究。tomcat方式我们已经历经多个项目验证,jetty作为标准运行方式,应该也差不了。
- jetty部署
solr自带了jetty容器,可以直接启动运行。
1)建立solr_home目录并拷贝solr.xml,solr_home目录下要是没有solr.xml会导致启动不起来
mkdir /home/solr_admin/solr_home;
cp /home/solr_admin/solr/server/solr/solr.xml /home/solr_admin/solr_home/
cd ;cd solr;
指定参数并启动
bin/solr start -cloud -m 16g -s /home/solr_admin/solr_home -z zkServer1:2181,zkServer2:2181,zkServer3:2181
(
-p参数可以改端口,jetty默认为8983
-s参数指明solrhome,不然默认会指向/home/solr_admin/solr/server/solr 目录
solrCloud example (start Solr running in SolrCloud mode using localhost:2181 to connect to ZooKeeper, with 1g max heap size and remote Java debug options enabled):
./solr start -c -m 4g -z localhost:2181 -a "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044"
)
依次启动各solr机器,
查看状态: bin/solr status
如果发现当前solr节点有问题,结束命令:bin/solr stop 重启命令:bin/solr restart
执行ps-ef|grep java 命令会发现 当前solr的日志目录是在 /home/solr_admin/solr/server/logs下面,后续会讲把日志配置到统一的地方
访问地址:http://solrServer1:8983/solr/#/ 8983端口取决于启动时的-p参数,默认是8993
2.tomcat部署
A 下载tomcat并解压
B 解压solr6.1.0,解压后的包的文件夹结构与以前的版本不同的是,5.0版本的solr的部署包solr.war放在了server文件夹中,而6.1.0的版本已经是解压在server/solr-webapp/webapp/ 下了。
C 将server/solr-webapp/webapp/下面的内容(solr5 /server/webapps/solr.war)拷贝到tomcat的webapps中: cp –r server/solr-webapp/webapp/* /usr/local/tomcat8/webapps/solr/
D solr6执行完C步骤之后忽略此步骤,solr5部署才需要 进入到到tomcat中,对war进行解压,然后删除war包。
cd /usr/local/tomcat7/webapps
unzip solr.war –d solr
删除solr.war文件。(不然每次启动tomcat都会发布一次)
E 设置solrhome,在$HOME/建立solr_home文件夹作为solrhome:
mkdir ~/solr_home
在该路径下放置solr.xml,内容如下:(从solr4.3开始,solr为solr.xml保有两种不同的格式,传统模式如下,发现模式如上,但是从solr5.0开始,传统模式被废弃,强制使用发现模式)
(
传统模式,4.3版本使用
<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="true">
<cores adminPath="/admin/cores" zkClientTimeout="20000" hostPort="8080">
</cores>
</solr>
发现模式,5.0及以上版本使用
<?xml version="1.0" encoding="UTF-8" ?>
<solr>
<solrcloud>
<str name="host">${host:}</str>
<int name="hostPort">${tomcat.port:8080}</int> //此端口号取决于部署solr.war包的tomcat的端口号
<str name="hostContext">${hostContext:solr}</str>
<bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
<int name="zkClientTimeout">${zkClientTimeout:30000}</int>
<int name="distribUpdateSoTimeout">${distribUpdateSoTimeout:600000}</int>
<int name="distribUpdateConnTimeout">${distribUpdateConnTimeout:60000}</int>
</solrcloud>
<shardHandlerFactory name="shardHandlerFactory"
class="HttpShardHandlerFactory">
<int name="socketTimeout">${socketTimeout:600000}</int>
<int name="connTimeout">${connTimeout:60000}</int>
</shardHandlerFactory>
</solr>
)
cp /tmp/solr-6.1.0/server/solr/solr.xml ~/solr_home/
H 配置tomcat
修改$TOMCAT_HOME_1/bin/catalina.sh插入一下配置
线上
JAVA_OPTS=" -server -Xms16384m -Xmx16384m -Xmn6144m -Xss256k -XX:PermSize=96m -XX:MaxPermSize=96m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:CMSInitiatingOccupancyFraction=85 -XX:+DisableExplicitGC -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=5 -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Dsolr.solr.home=/home/app_admin/solr_home -DzkHost=zkServer1:2181,zkServer2:2181,zkServer3:2181,zkServer4:2181"
测试环境
JAVA_OPTS=" -server -Xms1024m -Xmx1024m -Xss256k -XX:PermSize=96m -XX:MaxPermSize=96m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:CMSInitiatingOccupancyFraction=85 -XX:+DisableExplicitGC -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=5 -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Dsolr.solr.home=/home/mallsearch/solrhome -DzkHost=zkServer1:2181,zkServer2:2181,zkServer3:2181,zkServer4:2181"
I 启动tomcat,部署就此完成,打开浏览器访问 http://solrServer1:8080/solr/#/ //此端口号取决于部署solr.war包的tomcat的端口号
3.完善相关配置
1)配置solrhome
如果在jetty或者tomcat的启动参数里制定了-s 或者solr.home参数的话,此步骤可以不做
进入到
jetty版:/home/solr_admin/solr/server/solr-webapp/webapp/WEB-INF/
tomcat版:~/tomcat8/webapps/solr/WEB-INF/
修改web.xml中的solr/home为上一步骤所建solr_home的文件夹目录
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/app_admin/solr_home/</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
2)日志
拷贝solr相关的依赖jar包(solr-6.1.0\server\lib\ext\里面的所有jar包)到~/tomcat/webapps/solr/WEB-INF/lib中
一共5个,是solr的独立日志处理模块;
jetty命令:cp –r * ~/solr/server/solr-webapp/webapp/WEB-INF/lib/
tomcat命令:cp –r * ~/tomcat/webapps/solr/WEB-INF/lib
在上面的 WEB-INF/下新建一个classes目录,将example/resources下的log4j.properties文件复制到该classes目录中,否则日志模块无法正常工作
3)分词
a、复制ik的jar包到WEB-INF/lib/下,否则分词模块无法运行
之前电商环境我部署的solr5.2.0版本是 IKAnalyzer-5.0.jar 和 solr-analyzer-ik-5.1.0.jar(网上下载的针对solrIK分词问题更改后自己打的jar包)两个jar包
solr-6.1.0/dist目录下有solr-analysis-extras-6.1.0.jar和solr-analytics-6.1.0.jar两个jar包 还有网上下载 IKAnalyzer-5.0.jar
b、在WEB-INF/classes文件夹下新增一个文件:IKAnalyzer.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>IK Analyzer 扩展配置</comment> <!--用户可以在这里配置自己的扩展字典--> <entry key="ext_dict">my.dic;</entry> <!--用户可以在这里配置自己的扩展停止词字典--> <entry key="ext_stopwords">stopword.dic;</entry> </properties>
说明:
my.dic即为扩展分词库,分词库可以为多个,以分号隔开即可。停止词库一样。
c、新增my.dic文件。文件格式必需是:无BOM的UTF-8格式,示例内容为:
火影忍者
分词器的词典文件格式是无BOM 的UTF-8 编码的中文文本文件,文件扩展名不限。词典中,每个中文词汇独立占一行,使用\r\n 的DOS 方式换行。(注,如果您不了解什么是无BOM 的UTF-8 格式, 请保证您的词典使用UTF-8 存储,并在文件的头部添加一空行)。您可以参考分词器源码org.wltea.analyzer.dic 包下的.dic 文件。词典文件应部署在Java 的资源路径下,即ClassLoader 能够加载的路径中。(推荐同IKAnalyzer.cfg.xml 放在一起).
stopword.dic同理。
d、保存,重启solr。
使用了新的分词,需要重新建索引数据。