難得寫篇自己的原創文檔了,哈哈哈,原諒我知識淺薄,積淀太少
一、涉及到的軟件和環境
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。
使用了新的分詞,需要重新建索引數據。