CentOS7.5搭建Solr7.4.0集羣服務

一.Solr集羣概念

solr單機版搭建參考: http://www.javashuo.com/article/p-ompcnpwa-mg.htmlhtml

1.概念

        SolrCloud(solr 雲)是Solr提供的分佈式搜索方案,當你須要大規模,容錯,分佈式索引和檢索能力時使用 SolrCloud。當一個系統的索引數據量少的時候是不須要使用SolrCloud的,當索引量很大,搜索請求併發很高,這時須要使用SolrCloud來知足這些需求node

2.結構

        SolrCloud爲了下降單機的處理壓力,須要由多臺服務器共同來完成索引和搜索任務。實現的思路是將索引數據進行Shard(分片)拆分,每一個分片由多臺的服務器共同完成,當一個索引或搜索請求過來時會分別從不一樣的Shard的服務器中操做索引。SolrCloud須要Solr基於Zookeeper部署,Zookeeper是一個集羣管理軟件,因爲SolrCloud須要由多臺服務器組成,由zookeeper來進行協調管理。web

二.Solr集羣安裝

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

1. 安裝環境,集羣部署

系統 節點名稱 IP

Javaapache

zookeeperjson

Solrbash

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集羣安裝參考:http://www.javashuo.com/article/p-wtkdvahq-cb.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)app

[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:爲主機運行的級別,表示主機運行在二、三、四、5個級別時都會啓動zookeeper,而0 、一、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) 13] ls /configs/myconf
[protwords.txt, managed-schema, solrconfig.xml, synonyms.txt, stopwords.txt, lang, params.json]
[zk: localhost:2181(CONNECTED) 14] ls /solr/configs/_default
[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集羣信息

jps查看服務進程

刪除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中文分詞器

解壓ik中文分詞安裝包

[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 包拷貝到各solr安裝節點solr-7.4.0/server/solr-webapp/webapp/WEB-INF/lib/

[root@node21 ikanalyzer-solr5]# cp ik-analyzer-solr5-5.x.jar solr-analyzer-ik-5.1.0.jar /opt/module/solr/solr-7.4.0/server/solr-webapp/webapp/WEB-INF/lib/

2)將詞典 配置文件拷貝到各solr節點solr-7.4.0/server/solr-webapp/webapp/WEB-INF/classes下

[root@node21 ikanalyzer-solr5]# mkdir -p  /opt/module/solr/solr-7.4.0/server/solr-webapp/webapp/WEB-INF/classes 
[root@node21 ikanalyzer-solr5]# cp ext.dic IKAnalyzer.cfg.xml stopword.dic /opt/module/solr/solr-7.4.0/server/solr-webapp/webapp/WEB-INF/classes 

3)更改solr-7.4.0/server/solr/configsets/_default/conf/managed-schema配置文件,末尾添加如下保存

[root@node21 software]# vi /opt/module/solr/solr-7.4.0/server/solr/configsets/_default/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)更新配置文件到zk節點

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

5)重啓服務測試中文分詞

root@node21 solr]# ./solr/bin/solr create -c collection3 -n collection3 -shards 2 -replicationFactor 2 -p 8983 -force

三.設置禁止開機啓動項

測試完畢以後,我這裏設置solr與zookeeper服務禁止開機啓動,

顯示開機能夠自動啓動的服務
[root@node21 ~]# chkconfig --list
添加開機自動啓動***服務
[root@node21 ~]# chkconfig --add *** 
刪除開機自動啓動***服務
[root@node21 ~]# chkconfig --del ***

查看

[root@node21 ~]# chkconfig --list

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

netconsole         0:off    1:off    2:off    3:off    4:off    5:off    6:off
network            0:off    1:off    2:on    3:on    4:on    5:on    6:off
redis_6379         0:off    1:off    2:on    3:on    4:on    5:on    6:off
solr               0:off    1:off    2:on    3:on    4:on    5:on    6:off
solr2              0:off    1:off    2:on    3:on    4:on    5:on    6:off
zookeeper          0:off    1:off    2:on    3:on    4:on    5:on    6:off

xinetd based services:
    chargen-dgram:     off
    chargen-stream:    off
    daytime-dgram:     off
    daytime-stream:    off
    discard-dgram:     off
    discard-stream:    off
    echo-dgram:        off
    echo-stream:       off
    tcpmux-server:     off
    time-dgram:        off
    time-stream:       off

以後手動啓動

[root@node23 ~]# service zookeeper start
[root@node23 ~]# service solr  start
[root@node23 ~]# service solr2 start

其餘明細參考文檔:http://www.javashuo.com/article/p-hoftqkto-m.html

                                http://www.javashuo.com/article/p-mmjjsozf-m.html

相關文章
相關標籤/搜索