CentOS 7下 linux中Solr偽叢集搭建
什麼是SolrCloud
SolrCloud(solr 雲)是Solr提供的分散式搜尋方案,當你需要大規模,容錯,分散式索引和檢索能力時使用 SolrCloud。當一個系統的索引資料量少的時候是不需要使用SolrCloud的,當索引量很大,搜尋請求併發很高,這時需要使用SolrCloud來滿足這些需求。
SolrCloud是基於Solr和Zookeeper的分散式搜尋方案,它的主要思想是使用Zookeeper作為叢集的配置資訊中心。
它有幾個特色功能:
1)集中式的配置資訊
2)自動容錯
3)近實時搜尋
4)查詢時自動負載均衡
Solr叢集的系統架構:
1. 物理結構
三個Solr例項,組成一個SolrCloud
2. 邏輯結構
索引集合包括兩個Shard(shard1和shard2),shard1和shard2分別由三個Core組成,其中一個Leader兩個Replication,Leader是由zookeeper選舉產生,zookeeper控制每個shard上三個Core的索引資料一致,解決高可用問題。
使用者發起索引請求分別從shard1和shard2上獲取,解決高併發問題。
collection:
Collection在SolrCloud叢集中是一個邏輯意義上的完整的索引結構。它常常被劃分為一個或多個Shard(分片),它們使用相同的配置資訊。
比如:針對商品資訊搜尋可以建立一個collection。
collection=shard1+shard2+....+shardX
Core:
每個Core是Solr中一個獨立執行單位,提供 索引和搜尋服務。一個shard需要由一個Core或多個Core組成。由於collection由多個shard組成所以collection一般由多個core組成。
Master或Slave
Master是master-slave結構中的主結點(通常說主伺服器),Slave是master-slave結構中的從結點(通常說從伺服器或備伺服器)。同一個Shard下master和slave儲存的資料是一致的,這是為了達到高可用目的。
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.訪問叢集