Solr是一個分佈式高性能全文搜索引擎,是基於Lucene開發的很是流行的企業搜索引擎平臺。Solr提供了很是豐富的搜索功能,能夠用來構建很是複雜的搜索業務。html
這個系列教程旨在介紹Solr的經常使用功能。java
在開始以前你須要準備一些必要的硬件及軟件設施:nginx
CentOS能夠選擇安裝,Solr是支持多操做系統的,可是在Linux下體驗更好,大部分生產環境也都是Linux系統,建議使用CentOS來學習以及使用Solr。shell
VirtualBox能夠選擇安裝,若是你是Windows操做系統,建議使用VirtualBox安裝CentOS來學習使用Solr。apache
後面的操做都是基於CentOS 7.x版本操做系統來運行。centos
安裝Solr須要Java 1.8或者更高版本,可使用java -version
命令檢查你係統上安裝的Java版本。因爲Java語言有好幾個實現,有些實現並不能很是好的支持Solr,根據Lucene JavaBugs來檢查你的Java是否對Solr有很好的支持。Solr支持的操做系統包括Linux, MacOS, Windows。瀏覽器
到https://lucene.apache.org/solr/mirrors-solr-latest-redir.html下載對應操做系統的7.5.0版本的Solr安裝包。負載均衡
solr-7.5.0.tgz
是針對Linux/Unix/MacOS系統的安裝包solr-7.5.0.zip
是針對Windows系統的安裝包solr-7.5.0-src.tgz
是源碼包tar zxf solr-7.5.0.tgz cd solr-7.5.0 bin/solr start
而後使用瀏覽器打開http://localhost:8983,你就能夠看到Solr Admin UI的界面了,這是Solr自帶的管理界面,使用很是方便,在裏面能夠查看狀態,管理core,進行查詢。curl
以bin/solr start
運行的solr是以standalone模式(非分佈式)運行的,若是是學習可使用此模式快速的嘗試。可是建議使用後面將要介紹的SolrCloud模式來運行,SolrCloud模式能夠很好的進行擴展,應對海量數據的實時搜索,動態剔除/增長機器節點,動態轉移數據分片(shard),全部這些操做均可以不停機進行操做。生產環境也建議使用SolrCloud模式運行。分佈式
這是以SolrCloud模式啓動solr的命令,只須要添加一個-c
參數便可
bin/solr start -c
詳細的命令行參數請參考Solr控制腳本參考
SolrCloud啓動以後會佔用8983端口,默認會啓動一個內置的zookeeper實例,佔用9983端口(在solr的端口上加1000)。
通常生產環境部署會把zookeeper單獨部署,其餘的solr節點單獨部署。
下面假設是生產環境部署zookeeper,建議至少須要三個zookeeper節點。 開發環境以及測試使用一個zookeeper也沒有關係。
假設已經有三個機器來運行zookeeper來組建一個小的zookeeper集羣:
步驟爲:下載zookeeper-3.4.13 -> 解壓 -> 配置conf/zoo.cfg -> 啓動
curl -o zookeeper-3.4.13.tar.gz 'https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz' tar -xzvf zookeeper-3.4.13.tar.gz cd zookeeper-3.4.13 cp conf/zoo_sample.cfg conf/zoo.cfg sed -i 's/dataDir=.*/dataDir=.\/data/g' conf/zoo.cfg mkdir data echo -e "\nserver.1=192.168.1.2:2888:3888\nserver.2=192.168.1.3:2888:3888\nserver.3=192.168.1.4:2888:3888" >> conf/zoo.cfg echo 1 > data/myid
解釋一下上面的一些命令:
前四行就不過多解釋,下載zookeeper-3.4.13安裝包,解壓,拷貝conf/zoo_example.cfg爲conf/zoo.cfg配置文件。conf/zoo.cfg爲必須的配置文件,不然zookeeper是沒法啓動的。
第五行使用sed
命令把conf/zoo.cfg配置文件裏面的dataDir設置爲安裝目錄下面的data目錄。接着第六行建立dataDir指定的目錄,不然也沒法正確啓動zookeeper。第七行寫入三臺機器互相通訊的配置,2888是鏈接leader端口,3888是選舉端口,兩個端口均可以修改。
最後一行也是最重要的一行,每臺機器在data/myid文件裏面寫入一個不重複的值來標識每一個節點。因此在其餘兩臺機器就不能再寫入1了,分別寫入2和3便可。
上面拷貝conf/zoo_example.cfg爲conf/zoo.cfg的時候,已經默認設置了2181端口爲zookeeper客戶端鏈接的端口,下面在solr啓動的時候使用。
最後運行bin/zkServer.sh start
啓動三臺機器上的zookeeper便可。
假設如今也有三個機器安裝了solr(下載下來直接解壓便可),分別爲192.168.1.10
、192.168.1.11
、192.168.1.12
,解壓的目錄都爲solr-7.5.0
。命令行切換到solr-7.5.0目錄運行以下命令:
bin/solr start -c -z 192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181
三臺機器運行一樣的命令後,整個SolrCloud集羣就已經啓動好了,能夠訪問http://192.168.1.10:8983查看solr admin ui。
這個話題比較有意思,不少人問我SolrCloud已經使用了Zookeeper來選舉leader了,SolrCloud裏面的leader shard也會把請求分發到其餘的shard上,爲何還要作負載均衡呢。若是你深刻了解過solr的search component你就會明白,接收請求的那個機器作的計算是要比其餘機器多的,若是你在代碼當中只是訪問其中一臺機器,那麼這臺機器的負載會高於其餘的機器。因此你須要在你的應用程序和SolrCloud之間搭建一個負載均衡,把請求均勻的分佈到各個機器上去。
經常使用的有nginx, haproxy這兩個作負載均衡的軟件了。最後要保證高可用,還須要作一個負載均衡層面的熱備的配置,這樣你的SolrCloud能夠說已經很是堅固了。
原文地址:https://kevinjiang.info/2019/03/05/Solr%E6%95%99%E7%A8%8B-%E5%AE%89%E8%A3%85%E8%BF%90%E8%A1%8C/