1. 程式人生 > >CentOS7.5搭建Solr7.4.0單機版與集群版

CentOS7.5搭建Solr7.4.0單機版與集群版

resources ren 設置 ima -s and tar json 嘗試

一.Solr安裝環境

1.官方參考文檔

Solr教程參考指南:http://lucene.apache.org/solr/guide/7_4/solr-tutorial.html

2.Solr運行環境

系統要求:Java 8+ 這裏我們把solr服務部署到Tomacat服務器中,Tomcat安裝過程參考:https://www.cnblogs.com/frankdeng/p/9597699.html

在solr5以前solr的啟動都有tomcat作為容器,但是從solr5以後solr內部集成jetty服務器,可以通過bin目錄中腳本直接啟動。就是從solr5以後跟solr4最大的區別是被發布成一個獨立的應用。

3.Solr下載

下載地址:http://archive.apache.org/dist/lucene/solr/

技術分享圖片

[admin@node21 software]$ wget http://archive.apache.org/dist/lucene/solr/7.4.0/solr-7.4.0.tgz
[admin@node21 software]$ ll
-rw-rw-r-- 1 admin admin 167346886 Jun 19 02:51 solr-7.4.0.tgz

二.Solr單機安裝

1. 解壓安裝包

[admin@node21 software]$ tar zxvf solr-7.4
.0.tgz [admin@node21 software]$ ls solr-7.4.0 bin CHANGES.txt contrib dist docs example licenses LICENSE.txt LUCENE_CHANGES.txt NOTICE.txt README.txt server

2.部署solr到tomcat下

註意,這裏因為我用的是solr7.4最新版,所以跟solr4版本要拷貝*.war文件,然後再啟動tomcat解壓的操作是不一樣的 ,

1)復制並重命名solr目錄裏的server/solr-webapp/webapp文件夾到/usr/local/tomcat8/webapps/solr

[admin@node21 software]$ sudo cp -r solr-7.4.0/server/solr-webapp/webapp /usr/local/tomcat8/webapps/solr

技術分享圖片

2)拷貝solr-7.4.0\server\lib\ext 下的jar包以及lib目錄下gmetric4j-1.0.7.jar和metrics開頭的jar包拷貝到 tomcat8\webapps\solr 項目的WEB-INF\lib下

[admin@node21 software]$ sudo cp solr-7.4.0/server/lib/ext/* /usr/local/tomcat8/webapps/solr/WEB-INF/lib/
[admin@node21 software]$ sudo cp solr-7.4.0/server/lib/gmetric4j-1.0.7.jar /usr/local/tomcat8/webapps/solr/WEB-INF/lib/
[admin@node21 software]$ sudo cp solr-7.4.0/server/lib/metrics-*  /usr/local/tomcat8/webapps/solr/WEB-INF/lib/

技術分享圖片

技術分享圖片

3)創建一個索引庫solrhome

拷貝solr-7.4.0\server 下的solr文件夾到其它非中文目錄下,重命名為solrhome,我是建立到了/usr/local/tomcat8/solrhome下

[admin@node21 software]$ sudo cp -r solr-7.4.0/server/solr /usr/local/tomcat8/solrhome

技術分享圖片

4)關聯solr及索引庫solrhome,需要修改tomcat裏solr工程的web.xml文件

[admin@node21 software]$ sudo vi /usr/local/tomcat8/webapps/solr/WEB-INF/web.xml 

找到如下代碼,打開註釋,修改自己的solrhome的路徑/put/your/solr/home/here,我的是 /usr/local/tomcat8/solrhome 路徑。

40   <!--
41     <env-entry>
42        <env-entry-name>solr/home</env-entry-name>
43        <env-entry-value>/put/your/solr/home/here</env-entry-value>
44        <env-entry-type>java.lang.String</env-entry-type>
45     </env-entry>
46    -->

如下圖:

技術分享圖片

然後到最下方,將這一段註釋掉,不然會報403錯誤,完成後保存退出(solr4部署不用註釋這個)

技術分享圖片

5)拷貝solr7.4.0\server\resources下的 log4j2.xml 到tomcat8/webapps/solr/WEB-INF\classes,如果WEB-INF下沒有classes文件那麽就創建一個classes文件夾

[admin@node21 tomcat8]$ sudo mkdir -p /usr/local/tomcat8/webapps/solr/WEB-INF/classes/
[admin@node21 tomcat8]$ sudo cp -r /opt/software/solr-7.4.0/server/resources/log4j2.xml /usr/local/tomcat8/webapps/solr/WEB-INF/classes/

3.啟動服務

啟動tomcat,訪問需要完整路徑,我的是http://node21:8080/solr/index.html

技術分享圖片

4.配置solr的索引庫core

1)點擊Core Admin,接著點擊Add Core這項,創建的instanceDir和dataDir 需存在,報錯如下。(Solr裏面的core就像數據庫裏面的一個表,用來管理索引和相關配置。)

技術分享圖片

2)在索引庫目錄solrhome下創建new_core目錄,拷貝配置文件到new_core目錄下

[admin@node21 tomcat8]$ su root
[root@node21 tomcat8]$  mkdir /usr/local/tomcat8/solrhome/new_core 
[root@node21 solrhome]$ cp -r /usr/local/tomcat8/solrhome/configsets/sample_techproducts_configs/conf  /usr/local/tomcat8/solrhome/new_core/

然後重啟tomcat服務,重新創建core成功

技術分享圖片

5.配置IK中文分詞器

項目地址:https://github.com/magese/ik-analyzer-solr7

內置的分詞器不支持停用,擴展功能,ik中文分詞器支持屏蔽關鍵詞、新詞匯的配置。下載地址:https://pan.baidu.com/s/1vxs98d440NSQIqjc50w1Rw,密碼:9dbe

解壓分詞器安裝包

[root@node21 software]# unzip ikanalyzer-solr6.5.zip  
[root@node21 software]# lsikanalyzer-solr5 ikanalyzer-solr6.5.zip
[root@node21 software]# ls ikanalyzer-solr5/
ext.dic  IKAnalyzer.cfg.xml  ik-analyzer-solr5-5.x.jar  solr-analyzer-ik-5.1.0.jar  stopword.dic

1)將IK分詞器 JAR 包拷貝到Tomcat8\webapps\solr\WEB-INF\lib下

[root@node21 ikanalyzer-solr5]# cp ik-analyzer-solr5-5.x.jar solr-analyzer-ik-5.1.0.jar /usr/local/tomcat8/webapps/solr/WEB-INF/lib/

2)將詞典 配置文件拷貝到 Tomcat8\webapps\solr\WEB-INF\classes下

[root@node21 ikanalyzer-solr5]# cp ext.dic IKAnalyzer.cfg.xml stopword.dic /usr/local/tomcat8/webapps/solr/WEB-INF/classes/

3)更改在Tomcat8\solr_h\solrhome\new_core\conf找到managed-schema配置文件,末尾添加以下保存

[root@node21 ikanalyzer-solr5]# vi /usr/local/tomcat8/solrhome/new_core/conf/managed-schema 
<!--IK中文分詞器-->
 <fieldType name="text_ik" class="solr.TextField">  
        <analyzer type="index" useSmart="false"
            class="org.wltea.analyzer.lucene.IKAnalyzer" />
        <analyzer type="query" useSmart="true"
            class="org.wltea.analyzer.lucene.IKAnalyzer" />
</fieldType> 

技術分享圖片

4)重啟tomcat服務,測試

技術分享圖片

6. 停止服務

如果要關閉solr服務,直接關閉tomcat就可以了。

三.Solr集群安裝

這裏把solr當成獨立服務安裝,官方參考文檔:http://lucene.apache.org/solr/guide/7_4/taking-solr-to-production.html#taking-solr-to-production

1. 安裝環境,集群部署

系統節點名稱IP

Java

zookeeper

Solr

CentOS7.5 node21 192.168.100.21 8983/8984
CentOS7.5 node22 192.168.100.22 8983/8984
CentOS7.5 node23 192.168.100.23

Zookeeper集群安裝參考:https://www.cnblogs.com/frankdeng/p/9018177.html ,啟動zookeeper集群 zkServer.sh start

2. 解壓安裝包,運行安裝腳本

[admin@node21 software]$ tar zxvf solr-7.4.0.tgz 

技術分享圖片

[admin@node21 software]$ tar xzf solr-7.4.0.tgz solr-7.4.0/bin/install_solr_service.sh --strip-components=2

上一個命令將install_solr_service.sh腳本從存檔中提取到當前目錄中,如果在Red Hat上安裝,請確保在運行Solr安裝腳本(之前安裝了lsof,sudo yum install lsof安裝腳本必須以root身份運行:下一個命令時運行服務安裝腳本。

[admin@node21 software]$ sudo bash ./install_solr_service.sh solr-7.4.0.tgz -i /opt/module/solr  -d /opt/module/solr/solrhome -u solr -s solr -p 8983

報錯找不到JAVA_HOME,原因:如果使用bash,建議將其放入/etc/bashrc(基於RH)或/etc/bash.bashrc(基於Debian)

技術分享圖片

[root@node21 software]# bash ./install_solr_service.sh solr-7.4.0.tgz -i /opt/module/solr  -d /opt/module/solr/solrhome -u solr -s solr -p 8983

切換root用戶再次執行安裝成功,默認情況下,腳本將分發存檔解壓縮/opt,配置Solr以將文件寫入/var/solr,並以solr用戶身份運行Solr ,也可以指定路徑,安裝信息如下

[root@node21 software]# bash ./install_solr_service.sh solr-7.4.0.tgz -i /opt/module/solr  -d /opt/module/solr/solrhome -u solr -s solr -p 8983
We recommend installing the lsof command for more stable start/stop of Solr
id: solr: no such user
Creating new user: solr

Extracting solr-7.4.0.tgz to /opt/module/solr


Installing symlink /opt/module/solr/solr -> /opt/module/solr/solr-7.4.0 ...


Installing /etc/init.d/solr script ...


Installing /etc/default/solr.in.sh ...

Service solr installed.
Customize Solr startup configuration in /etc/default/solr.in.sh
*** [WARN] ***  Your Max Processes Limit is currently 4096. 
 It should be set to 65000 to avoid operational disruption. 
 If you no longer wish to see this warning, set SOLR_ULIMIT_CHECKS to false in your profile or solr.in.sh
NOTE: Please install lsof as this script needs it to determine if Solr is listening on port 8983.

Started Solr server on port 8983 (pid=2147). Happy searching!


Found 1 Solr nodes: 

Solr process 2147 running on port 8983
INFO  - 2018-09-07 11:39:26.210; org.apache.solr.util.configuration.SSLCredentialProviderFactory; Processing SSL Credential Provider chain: env;sysprop
{
  "solr_home":"/opt/module/solr/data/data",
  "version":"7.4.0 9060ac689c270b02143f375de0348b7f626adebc - jpountz - 2018-06-18 16:55:13",
  "startTime":"2018-09-07T15:39:11.678Z",
  "uptime":"0 days, 0 hours, 0 minutes, 19 seconds",
  "memory":"25.3 MB (%5.2) of 490.7 MB"}

[root@node21 software]# 

技術分享圖片

3.安裝多個solr服務

node21上再實例化一個solr2,端口8984

[root@node21 software]# mkdir /opt/module/solr2
[root@node21 software]# bash ./install_solr_service.sh solr-7.4.0.tgz -i /opt/module/solr2  -d /opt/module/solr2/solrhome -u solr -s solr2 -p 8984 

安裝腳本,安裝包拷貝一份到node22上,實例化solr 8983,solr2 8984兩個服務。

[root@node21 software]# scp -r install_solr_service.sh solr-7.4.0.tgz root@node22:`pwd`
[root@node22 software]# mkdir /opt/module/solr
[root@node22 software]# bash ./install_solr_service.sh solr-7.4.0.tgz -i /opt/module/solr  -d /opt/module/solr/solrhome -u solr -s solr -p 8983
[root@node22 software]# mkdir /opt/module/solr2
[root@node22 software]# bash ./install_solr_service.sh solr-7.4.0.tgz -i /opt/module/solr2  -d /opt/module/solr2/solrhome -u solr -s solr2 -p 8984

啟動停止驗證服務命令

#在root用戶下操作
service solr  start|stop|status
service solr2 start|stop|ststus

修改對應jetty服務的端口8983/8984

[root@node21 solr]# vi  /opt/module/solr/solrhome/data/solr.xml 
[root@node21 solr]# vi  /opt/module/solr2/solrhome/data/solr.xml 
[root@node22 solr]# vi  /opt/module/solr/solrhome/data/solr.xml 
[root@node22 solr]# vi  /opt/module/solr2/solrhome/data/solr.xml 

技術分享圖片

4. 配置zk啟動優先級

solr集群需要zk來管理節點,目前solr是開機自啟動,然後自己手工再啟動zookeeper,solr是不能訪問的,要求zookeeper集群先於solr集群啟動,因此在設置zookeeper集群開機啟動前要先查看solr開機啟動的優先級 ls /etc/rc3.d/*solr*

技術分享圖片

"S50solr"分析:

S:代表啟動

50:代表啟動的順序,值越小越先啟動

solr:服務名字,就是/etc/init.d中的文件名

因zookeeper要先於solr啟動,所以它的啟動順序對應的值應該小於50

編寫腳本設置zookeeper開機啟動

[root@node21 software]# vi /etc/init.d/zookeeper
#!/bin/bash
#chkconfig:2345 20 90
#description:zookeeper
#processname:zookeeper
export JAVA_HOME=/opt/module/jdk1.8
export ZOO_LOG_DIR=/opt/module/zookeeper-3.4.12/logs
case $1 in
        start) su root /opt/module/zookeeper-3.4.12/bin/zkServer.sh start;;
        stop) su root /opt/module/zookeeper-3.4.12/bin/zkServer.sh stop;;
        status) su root /opt/module/zookeeper-3.4.12/bin/zkServer.sh status;;
        restart) su root /opt/module/zookeeper-3.4.12/bin/zkServer.sh restart;;
        *) echo "require start|stop|status|restart" ;;
esac     

其中chkconfig:2345 20 90非常重要

2345:為主機運行的級別,表示主機運行在2、3、4、5個級別時都會啟動zookeeper,而0 、1、6級別時停止zookeeper

20:開機啟動的優先級,要比solr的50大

90:關機停止的順序

一般設置時,先啟動,則後停止,註意不要把啟動值設置得太小,否則可能一些系統核心服務還沒有啟動起來,導致你的應用無法啟動

JAVA_HOME是必須的

ZOO_LOG_DIR是可選的,用於保存zookeeper啟動時的日誌文件,我把它指定到了自定義目錄,否則你得使用root用戶啟動zookeeper或者給root用戶根目錄的寫權限授予給zookeeper的啟動用戶

賦權限給腳本,啟動zookeeper,設置為開機啟動

[root@node21 software]# chmod +x /etc/init.d/zookeeper
[root@node21 software]# service zookeeper start
[root@node21 software]# chkconfig --add zookeeper

然後去/etc/rc3.d中查看zookeeper的啟動順序,查看zookeeper的停止順序

[root@node21 software]# ls /etc/rc3.d/*zoo*
/etc/rc3.d/S20zookeeper
[root@node21 software]# ls /etc/rc0.d/*zoo*
/etc/rc0.d/K90zookeeper

5. 關聯solr集群與zk集群

1)設置zookeeper集群關聯solr集群,更新Solr的包含文件(solr.in.shsolr.in.cmd),這樣就不必在啟動Solr時輸入zk連接地址。

[root@node21 solr]# vi /etc/default/solr.in.sh      vi /etc/default/solr2.in.sh 
[root@node22 solr]# vi /etc/default/solr.in.sh      vi /etc/default/solr2.in.sh 
修改如下信息(對應主機host註意更改):
ZK_HOST="node21:2181,node22:2181,node23:2181/solr"
SOLR_HOST="192.168.100.21"

技術分享圖片

首次連接需要創建節點管理目錄

[root@node21 solr]# ./solr/bin/solr  zk mkroot /solr -z node21:2181,node22:2181,node23:2181

2)使用Solr的ZooKeeper CLI上傳solr配置信息到zk節點

[root@node21 module]# sh solr/solr-7.4.0/server/scripts/cloud-scripts/zkcli.sh -zkhost node21:2181,node22:2181,node23:2181 -cmd upconfig -confdir /opt/module/solr/solr-
7.4.0/server/solr/configsets/_default/conf -confname myconf

查看配置文件是否上傳成功,zk客戶端查看zkCli.sh

[zk: localhost:2181(CONNECTED) 6] ls /solr/configs/myconf
[managed-schema, protwords.txt, solrconfig.xml, synonyms.txt, stopwords.txt, lang, params.json]

6.配置solr集群的分片規則

創建core與collection,分片規則可以自定義,也可以自動分配,我這裏采取自動分配

[root@node21 solr]# ./solr/bin/solr create -c collection1 -n collection1 -shards 2 -replicationFactor 2 -p 8983 -force
[root@node22 solr2]# ./solr2/bin/solr create -c collection2 -n collection2 -shards 2 -replicationFactor 2 -p 8984 -force

參數說明:

-c <name> 要創建的核心或集合的名稱(必需)。

-n <configName> 配置名稱,默認與核心或集合的名稱相同。

-p <port> 發送create命令的本地Solr實例的端口; 默認情況下,腳本會嘗試通過查找正在運行的Solr實例來檢測端口。

-s <shards> 要麽 -shards 將集合拆分為的分片數,默認為1; 僅適用於Solr在SolrCloud模式下運行的情況。

-rf <replicas> 要麽 -replicationFactor 集合中每個文檔的副本數。默認值為1(無復制)。

-force 如果嘗試以“root”用戶身份運行create,則腳本將退出並顯示運行Solr或針對Solr的操作作為“root”的警告可能會導致問題。可以使用-force參數覆蓋此警告。

-d <confdir> 配置目錄。默認為_default

7. Web界面查看solr集群狀態

solr默認端口,查看地址:http://192.168.100.21:8983/solr/#/

技術分享圖片

技術分享圖片

zk客戶端查看solr集群信息

技術分享圖片

技術分享圖片

刪除core與collection

[root@node21 solr]# ./solr/bin/solr delete -c collection1 
INFO  - 2018-09-09 07:59:04.479; org.apache.solr.util.configuration.SSLCredentialProviderFactory; Processing SSL Credential Provider chain: env;sysprop
{
  "responseHeader":{
    "status":0,
    "QTime":1560},
  "success":{
    "192.168.100.21:8983_solr":{"responseHeader":{
        "status":0,
        "QTime":305}},
    "192.168.100.21:8984_solr":{"responseHeader":{
        "status":0,
        "QTime":305}},
    "192.168.100.22:8983_solr":{"responseHeader":{
        "status":0,
        "QTime":353}},
    "192.168.100.22:8984_solr":{"responseHeader":{
        "status":0,
        "QTime":421}}}}


Deleted collection collection1 using command:
http://192.168.100.21:8984/solr/admin/collections?action=DELETE&name=collection1

8. 安裝IK中文分詞器(略)

四.安裝過程問題

1.警告Max Processes Limit

最大限制用戶進程數,個人電腦低配,由於系統需要更改設置

查看個人最大限制用戶進程數 ulimit -u

技術分享圖片

[root@node21 software]# vi /etc/security/limits.conf
末尾添加如下兩行信息,保存退出,重新登錄生效
* soft nproc 65535
* hard nproc 65535

技術分享圖片

或者根據官網的建議,在solr.in.sh中設置SOLR_ULIMIT_CHECKS=false 。

 

其他明細參考文檔:https://www.cnblogs.com/jepson6669/p/9134652.html

https://my.oschina.net/u/3049601/blog/1800909

CentOS7.5搭建Solr7.4.0單機版與集群版