1. 程式人生 > >CentOS 7下 linux中Solr偽叢集搭建

CentOS 7下 linux中Solr偽叢集搭建

什麼是SolrCloud

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

 SolrCloud是基於SolrZookeeper的分散式搜尋方案,它的主要思想是使用Zookeeper作為叢集的配置資訊中心。

它有幾個特色功能:

1)集中式的配置資訊

2)自動容錯

3)近實時搜尋

4)查詢時自動負載均衡

Solr叢集的系統架構: 

1. 物理結構

三個Solr例項,組成一個SolrCloud

2. 邏輯結構

索引集合包括兩個Shardshard1shard2),shard1shard2分別由三個Core組成,其中一個Leader兩個ReplicationLeader是由zookeeper選舉產生,zookeeper控制每個shard上三個Core的索引資料一致,解決高可用問題。

使用者發起索引請求分別從shard1shard2上獲取,解決高併發問題。

collection:

CollectionSolrCloud叢集中是一個邏輯意義上的完整的索引結構。它常常被劃分為一個或多個Shard(分片),它們使用相同的配置資訊。

比如:針對商品資訊搜尋可以建立一個collection

 collection=shard1+shard2+....+shardX

Core:

每個CoreSolr中一個獨立執行單位,提供 索引和搜尋服務。一個shard需要由一個Core或多個Core組成。由於collection由多個shard組成所以collection一般由多個core組成。

MasterSlave

Mastermaster-slave結構中的主結點(通常說主伺服器),Slavemaster-slave結構中的從結點(通常說從伺服器或備伺服器)。同一個Shardmasterslave儲存的資料是一致的,這是為了達到高可用目的。

Shard:

Collection的邏輯分片。每個Shard被化成一個或者多個replication,通過選舉確定哪個是Leader

需要實現的solr叢集架構



注意

    在搭建solr叢集前,建議最好有一個solr服務是已經搭建好的,並且有zookeeper叢集(三臺),可以簡化大量重複的配置操作,省去了很大一部分時間

實際搭建分散式:

搭建solr叢集需要7臺伺服器。

搭建偽分散式:

需要三個zookeeper節點

需要四個tomcat節點。

建議虛擬機器的記憶體1G以上。

1.建立四個tomcat例項。並且每個埠號都不相同:8180、8280、8380、8480

進入到解壓好的檔案目錄(這個tomcat目錄中,有我的solr例項,是配置solr服務使用到的tomcat)


複製tomcat到之前搭建zookeeper叢集時,建立的/usr/local/solrcloud目錄裡,複製4個tomcat

cp -r apache-tomcat-8.0.52/ /usr/local/solrcloud/tomcat_01


進入solrcloud目錄檢視

 cd /usr/local/solrcloud/


修改每個tomcat目錄下的conf裡的server.xml檔案,修改每個tomcat的埠號,保證每個埠都不想同,相互不衝突

vi tomcat_01/conf/server.xml


用/port命令搜尋port字串,按n搜尋下一個,一共有三個地方需要更改




按Esc健,輸入:wq!按Enter健,儲存並退出。

其他三個tomcat按照順序依次修改:

vi tomcat_02/conf/server.xml

 tomcat_02:8025, 8280, 8029

vi tomcat_03/conf/server.xml

 tomcat_03:8035, 8380, 8039

vi tomcat_04/conf/server.xml

 tomcat_04:8045, 8480, 8049

注意四個tomcat中的server.xml檔案一定都要修改,每個檔案修改三個地方,每個埠號都要相互不衝突

2.把單機版的solr工程複製到叢集中的tomcat中

搭建好的單機solr服務裡,進入到tomcat/webapps檔案中將solr複製到第一步的四個tomcat/webapps中,因為我複製的tomcat中就配置了solr服務,所以這裡我就不復制,不實時操作了,大概描述一下方法。

例:

進入到solr單機版的tomcat中,進入到webapps檔案中,輸入以下命令進入到目錄:

 cd usr/tomcat-8.0.25/apache-tomcat-8.0.52/webapps/

輸入以下命令進行復制到solrcloud下四個tomcat/webapps目錄下(每個tomcat都要複製)

cp -r solr/ /usr/local/solrcloud/tomcat_01/webapps/
cp -r solr/ /usr/local/solrcloud/tomcat_02/webapps/
cp -r solr/ /usr/local/solrcloud/tomcat_03/webapps/
cp -r solr/ /usr/local/solrcloud/tomcat_04/webapps/


3.為每個solr例項建立對應的solrhome。

在之前搭建的單機solr服務中,將當時配置的solrhome目錄,複製到solrcloud中,複製成四份


進入到solrcloud目錄中,檢視現在的目錄

cd usr/local/solrcloud/


4.配置solrCloud相關的配置。將每個solrhome下的solr.xml檔案中的ip及埠號配置好

在搭建單機版solr服務的時候,沒有配置過solrhome裡的檔案。在搭建叢集的時候,需要修改配置資訊。

輸入以下命令進行編輯:

 vi solrhome_01/solr.xml 


進入之後點選i進行編輯


第一個修改的是改成自己本機linux的地址;

第二個是修改成剛才配置的tomcat埠號,solrhome_01和tomcat_01對應,tomcat_01在server.xml中配置的埠號是8180。

配置完成是這樣:


修改以後:wq!儲存並退出。

其他三個solrhome中的solr.xml中也需要修改,可以對比這上面的進行修改。ip地址都是一樣的,埠號分別是solrhome_01對應8180, solrhome_02對應8280, solrhome_03對應8380, solrhome_04對應8480

vi solrhome_02/solr.xml 
vi solrhome_03/solr.xml 
vi solrhome_04/solr.xml 

5.修改tomcat中solr服務的web.xml檔案,將solrhome檔案關聯起來。

修改web.xml檔案和單機版配置是一樣的:

vi tomcat_01/webapps/solr/WEB-INF/web.xml 

這是當時單機版配置的路徑:


現在修改成叢集中的solrcloud/solrhome_01路徑:

/usr/local/solrcloud/solrhome_01


修改完成,儲存並退出。

其他三個tomcat裡的web.xml也要對應這改:

vi tomcat_02/webapps/solr/WEB-INF/web.xml 

/usr/local/solrcloud/solrhome_02

vi tomcat_03/webapps/solr/WEB-INF/web.xml

/usr/local/solrcloud/solrhome_03

vi tomcat_04/webapps/solr/WEB-INF/web.xml

/usr/local/solrcloud/solrhome_04

6.讓zookeeper統一管理配置檔案

現在我們每一個solr都有了自己的solrhome,現在我們要讓每一個solr例項的配置檔案都一樣,這個配置檔案需要集中管理,這個時候我們使用zookeeper來統一管理配置檔案。所以要將配置檔案上傳到zookeeper中。那麼上傳哪些配置檔案呢?

這裡需要注意下,好像是從5.0版本開始不使用schema.xml,使用的檔名是managed-schema,其實內容都一樣,搞不懂為啥要換個名字,而且內容格式是xml,但是檔名卻沒有.xml的後輟,這裡直接上傳整個conf目錄就行。

知道了要上傳什麼,那麼怎麼上傳呢?開啟最早solr解壓出來的原始檔案(如果刪了那就重新上傳解壓吧)


在/solr-5.0.0/server/scripts/cloud-scripts/的目錄下有個指令碼檔案,執行這個指令碼就可以將配置檔案上傳到zookeeper了


注意:在執行指令碼上傳配置檔案前,必須先去啟動zookeeper叢集

進入到叢集目錄:

cd /usr/local/solrcloud/

通過批量指令碼來啟動zookeeper叢集:

./start-zookeeper-all.sh 


啟動完成以後,去執行指令碼:

 cd /usr/solr-5.0.0/solr-5.0.0/server/scripts/cloud-scripts/


指令碼的執行命令(引數比較多,建議複製出來改好後再貼上上去):

./zkcli.sh -zkhost 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183 -cmd upconfig -confdir /usr/local/solrcloud/solrhome_01/configsets/sample_techproducts_configs/conf -confname myconf

紅色框代表zookeeper叢集的ip和埠號列表(搭建zookeeper叢集的時候配置過的)

黃色框代表要執行的是上傳配置檔案操作

綠色框代表的是要上傳的配置檔案目錄(低版本不太一樣,具體以那兩個主要的配置檔案所在目錄為準,不知到在哪就find命令搜吧)

藍色框代表的是你給上傳的配置起的名字,可以隨意修改

上傳完成以後,我們需要檢視一下是否上傳成功。去zookeeper叢集的一個目錄找到bin裡zookeeper的客戶端指令碼

cd /usr/local/solrcloud/zookeeper1/bin/

    

執行後會出現一大堆內容,如果不指定引數預設會訪問localhost:2181

./zkCli.sh 


然後在最下面執行下面這個命令,檢視在根目錄下有什麼

ls /

有兩個資料夾一個configs,有個zookeeper,進入到configs中看看有什麼

ls /configs

這就是我們剛才上傳的配置了,名字是一樣的,說明上傳成功了

然後用quit命令退出


如果需要修改配置的話,只需要在solrhome_01/configsets/sample_techproducts_configs/conf目錄裡修改,改好後再上傳一次就行了,就會覆蓋原來的配置檔案

7.關聯solr和zookeeper,修改tomcat/bin目錄下的catalina.sh 檔案

現在配置檔案已經上傳好了,可是solr和zookeeper還沒有建立任何關係,這個時候需要修改4個tomcat的配置檔案。

進入到集合目錄:

cd /usr/local/solrcloud/


修改tomcat_01/bin/目錄下catalina.sh檔案:

vi tomcat_01/bin/catalina.sh 

  用/JAVA_OPTS搜尋,N是下一個(因為低版本加的位置長的不太一樣,但這句話的例子是不變的)


找到這一行以後,在這行的下面新增下面的內容:

JAVA_OPTS="-DzkHost=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183"

儲存並退出。

其他三個tomcat也需要修改位置和內容是一樣的,不用變

vi tomcat_02/bin/catalina.sh
vi tomcat_03/bin/catalina.sh
vi tomcat_04/bin/catalina.sh

全部新增完成以後,這樣每個solr例項就通過這個引數和zookeeper叢集建立了聯絡,solr會將自己的狀態傳送給zookeeper,比如ip地址,埠號等,zookeeper就可以連線到solr了,建立了通訊關係。

8.啟動tomcat

現在需要啟動每個tomcat,在啟動之前要保證zookeeper叢集是啟動狀態。

為了避免每次啟動的時候都需要進去資料夾一個一個的啟動,這裡為了方便,可以寫一個批量指令碼

在叢集目錄下,通過輸入以下命令來進行編輯一個指令碼:

vi start-tomcat-all.sh


指令碼中填寫以下內容:

/usr/local/solrcloud/tomcat_01/bin/startup.sh 
/usr/local/solrcloud/tomcat_02/bin/startup.sh 
/usr/local/solrcloud/tomcat_03/bin/startup.sh 
/usr/local/solrcloud/tomcat_04/bin/startup.sh 

儲存並退出。


這時候還沒有執行許可權,需要新增執行許可權。

chmod u+x start-tomcat-all.sh 


然後執行tomcat批量啟動指令碼。

 ./start-tomcat-all.sh 


如果你想看啟動起來了沒,可以去看看tomcat的日誌資訊(相當於看控制檯列印資訊),可以通過以下命令檢視:

 tail -f /usr/local/solrcloud/tomcat_01/logs/catalina.out 

在搭建叢集的時候看見網上有的說,從tomcat8開始,預設啟動的是NIO模式,7預設啟動的是BIO模式,還可以通過配置設定APR模式啟動,至於APR,NIO和BIO的區別,是和tomcat併發效能有關的,高併發的系統應該將tomcat的模式設定成APR模式,會大幅度的提高伺服器的處理和響應效能。感興趣的可以自己百度下。

9.訪問叢集