基於Centos6搭建Solr集羣(漫天之步步爲營)

zookeeper集羣搭建

新建一臺虛擬機

我們在安裝單機版的Solr的時候就已經新建了一臺虛擬機,因此這兒不必再新建一臺虛擬機了,就使用原有的虛擬機就可以了。

安裝JDK環境

我們在安裝單機版的Solr時就已經安裝過JDK了,這兒我不想再多費口舌。而且關於如何在Linux系統上安裝JDK,我的Linux系統上安裝JDK這篇文章已經說的很清楚了。

搭建zookeeper集羣

首先,將zookeeper的壓縮包上傳到服務器上,我下載的zookeeper的壓縮包如下圖所示。 
這裏寫圖片描述 
關於怎樣將文件上傳到Linux系統上,我想我已經說的要吐了,所以這兒不再浪費口舌。與以往一樣,我把zookeeper-3.4.6.tar.gz上傳到了用戶主目錄(即root)下,如下圖所示。 

接着,我們使用tar zxf zookeeper-3.4.6.tar.gz命令將zookeeper的壓縮包解壓縮到用戶主目錄(即root)下,解壓完之後,可以看到解壓後的zookeeper-3.4.6目錄。 

緊接着先在/usr/local目錄下面創建一個solr-cloud目錄,然後我們把zookeeper-3.4.6往/usr/local/solr-cloud目錄下面複製三份。 

進入/usr/local/solr-cloud目錄中,可以看到有三個zookeeper實例。 
 
下面我們進入到zookeeper01目錄中,使用mkdir data命令在該目錄中創建一個data目錄,創建成功之後使用ll命令查看一下zookeeper01目錄,效果如下: 

然後使用echo 1 >> myid命令在data目錄下創建一個myid文件,文件名就叫做“myid”,其內容就是每個實例的id,例如1、2、3。創建完myid文件之後,即可使用cat myid命令查看文件的內容。 
 
接着我們就要修改配置文件了。進入到zookeeper01/conf目錄下,可以看到該目錄下有個zoo_sample.cfg文件。 

緊接着我們需要使用mv zoo_sample.cfg zoo.cfg命令將zoo_sample.cfg文件改下名字,改爲zoo.cfg,修改成功之後使用ll命令查看一下conf目錄,效果如下: 

接下來我們就要修改zoo.cfg文件了,我們使用的命令是vim zoo.cfg,在打開的文件中修改”dataDir”的路徑爲我們上面創建的data的絕對路徑,即/usr/local/solr-cloud/zookeeper01/data/,除此之外還要修改一下clientPort所指定的端口號,clientPort是客戶端要連接zookeeper的端口號,現在我們要啓動三個zookeeper實例,這個端口號不能衝突,所以需要改一下端口號。最後還得在文件的最後添加上三行配置,如下圖所示。 

修改完zoo.cfg之後,按esc退出編輯模式,然後再輸入:wq命令來保存並退出zoo.cfg,這樣我們便配置好了。 
我們配置好zookeeper01這個實例之後,可以仿照zookeeper01實例的配置來配置好zookeeper02和zookeeper03這兩個實例,這樣三個zookeeper實例就配置好了。 
下面我們需要啓動每個zookeeper實例。如果想啓動每個zookeeper實例的話,不必每個實例一個個啓動,這樣太麻煩了,我們可以寫個批處理程序來把它們一下子啓動起來。在solr-cloud目錄下使用vim start-zookeeper-all.sh命令來創建一個批處理文件,文件內容爲:

cd /usr/local/solr-cloud/zookeeper01/bin
./zkServer.sh start
cd /usr/local/solr-cloud/zookeeper02/bin
./zkServer.sh start
cd /usr/local/solr-cloud/zookeeper03/bin
./zkServer.sh start

 

保存完該文件之後,使用ll命令查看一下solr-cloud目錄,可以發現start-zookeeper-all.sh文件,如下圖所示。 

但是這個批處理程序是不能運行的,所以你需要使用chmod u+x start-zookeeper-all.sh命令改一下它的權限,這樣我們就可以使用./start-zookeeper-all.sh命令來啓動每個zookeeper實例了。 

啓動完每個zookeeper實例之後,我們先查看一下zookeeper01的狀態,發現該節點的zookeeper的角色是follower,如下圖所示。 

接着看下zookeeper02的狀態,發現該節點的zookeeper角色是follower,如下圖所示。 

最後看下zookeeper03的狀態,發現該節點的zookeeper的角色是leader(領導者),這說明我們的zookeeper集羣搭建成功了! 

Solr集羣搭建

我們說過Solr要運行在tomcat中,所以這4個Solr節點也就是4個tomcat,要保證4個tomcat都能啓動,它們的啓動端口就不能衝突,所以我們需要將這4個tomcat的端口號給改一下。由於我們之前已經搭了一個Solr單機版,Solr本身就是一個web工程,我們就可以直接把單機版配好的那個Solr直接複製到我們這個集羣裏面,這樣就可以用了。還有一個Solr單機版的那個solrhome我們也可以直接用,所以我們就不再直接配置了。 
下面我講一下我本人是如何搭建Solr集羣的。 
首先,將用戶主目錄(即root)下的apache-tomcat-7.0.47複製4份到/usr/local/solr-cloud/目錄下,這樣就能創建4個tomcat實例了,如下圖所示。 

然後將這4個tomcat的端口號給改一下,使每個tomcat運行在不同的端口。我們先到tomcat01的conf目錄下(/usr/local/solr-cloud/tomcat01/conf)修改server.xml文件,依次修改下面這三段配置的port的值,如下所示。

  1. 將port的值由8005改爲8105 
  2. 將port的值由8080改爲8180 
  3. 將port的值由8009改爲8109 

按照上面步驟依次修改tomcat02、tomcat03和tomcat04這3個tomcat的端口號。改完之後,在solr-cloud目錄下使用ll命令查看一下該目錄,可以看到4個tomcat實例,如下圖所示。 

接下來就要部署Solr的war包了,之前我們弄了一個Solr單機版,現在只須把單機版的Solr工程複製到集羣中的tomcat中即可。具體做法是將/usr/local/solr/tomcat/webapps目錄下的Solr工程分別複製4份到我們剛纔那4個tomcat下面,如下圖所示。 

接着爲每個Solr實例創建一個對應的solrhome,使用單機版的solrhome即可。具體做法是將/usr/local/solr目錄下的solrhome分別複製4份到/usr/local/solr-cloud目錄下,如下圖所示。 

我們可在solr-cloud目錄下使用ll命令查看一下該目錄,可以看到4個solrhome,如下圖所示。 

solrhome有了之後,我們還須對solrhome裏面的solr.xml配置文件進行修改。每個solrhome下都有一個solr.xml文件,修改該文件時我們修改的只有<solrcloud>裏面的前兩項——host和hostPort,host的值修改爲我們solr的IP地址,hostPort修改爲我們剛纔爲tomcat修改的端口號,其它不用動。 

以上是solrhome01裏面的solr.xml文件的修改。同理我們還需要對solrhome02、solrhome03、solrhome04裏面的solr.xml文件進行相關配置,下面是solrhome02裏面的solr.xml文件的配置。 

下面是solrhome03裏面的solr.xml文件的配置。 

下面是solrhome04裏面的solr.xml文件的配置。 

solrhome配置好了之後,接下來需要關聯每一個solrhome和Solr,即需要修改每一個Solr工程的web.xml文件。 

以上是tomcat01裏面的web.xml文件的修改。同理我們還需要對tomcat02、tomcat03、tomcat04裏面的web.xml文件進行相關配置。下面是tomcat02裏面的web.xml文件的配置。 

下面是tomcat03裏面的web.xml文件的配置。 

下面是tomcat04裏面的web.xml文件的配置。 

這樣,Solr服務就和自己的solrhome關聯起來了。現在每一個Solr都對應一個solrhome,都有其自己的配置文件,如果我們要想保證每一個Solr實例的配置文件都一樣的話,那麼這個配置文件就應該集中管理,要集中管理我們應該使用誰來管理呢?這時候就需要用到zookeeper了,zookeeper集中管理配置文件,所以我們應該把配置文件上傳到zookeeper。那好了,接下來考慮上傳哪些配置文件?我們只須把solrhome/collection1/conf目錄上傳到zookeeper即可,上傳任意solrhome中的conf目錄都可以喲!其中conf目錄下面最重要的兩個配置文件是schema.xml和solrconfig.xml。我們只要上傳一份就行了,這樣的話,每個Solr要連接zookeeper,它就從zookeeper上讀取這一份配置文件,每一個Solr實例都共用這一份就可以了。我們已經確定下來上傳什麼東西了,接下來就是怎麼上傳的問題了?我們可使用工具上傳配置文件,先找到該工具所在的位置,如下圖所示。 

下面我們使用該zkcli.sh腳本文件來執行上傳操作,我們要上傳的文件目錄是/usr/local/solr-cloud/solrhome01/collection1/conf,執行上傳操作的命令如下:

./zkcli.sh -zkhost 192.168.25.129:2181,192.168.25.129:2182,192.168.25.129:2183 -cmd upconfig -confdir /usr/local/solr-cloud/solrhome01/collection1/conf -confname myconf


上傳成功後,我們到任何一臺zookeeper上檢驗一下配置文件是否已經被上傳上來了,我們到zookeeper01的bin目錄下,如下圖所示。 

接着使用命令./zkCli.sh來登錄服務端,如下圖所示。 

登錄成功之後,使用命令ls /來查看下根目錄下是否有configs目錄,如下所示,發現已經有了。 
 
再看configs目錄下是否有myconf目錄,如下圖所示,發現是有的。 
 
我們還可以看看myconf目錄下的所有文件,這些都是我們剛纔上傳的配置文件,如下圖所示。 

如果我們想退出,可使用quit命令。 
下面我們需要修改每一個tomcat下面的bin目錄下的catalina.sh文件,關聯Solr和zookeeper。 
首先,我們來到tomcat01的bin目錄下,如下圖所示,可以看到catalina.sh文件。 

修改catalina.sh文件,添加JAVA_OPTS=”-DzkHost=192.168.25.129:2181,192.168.25.129:2182,192.168.25.129:2183”,如下圖所示。 

修改完tomcat01之後,我們再修改其它三個tomcat,添加的內容完全一樣,我就不囉嗦了。 
現在我們的Solr知道zookeeper的地址了,Solr會主動連接zookeeper,把自己的一些狀態信息彙報給zookeeper,比如說自己的ip地址和端口號等,zookeeper 
就能連接到tomcat了,它們之間就建立了一個通信關係。 
下面我們要啓動每個tomcat實例,啓動之前要確保zookeeper集羣是啓動狀態。如果想啓動每個tomcat實例的話,不必每個實例一個個啓動,這樣太麻煩了,我們可以寫個批處理程序來把它們一下子啓動起來。在solr-cloud目錄下使用vim start-tomcat-all.sh命令來創建一個批處理文件,文件內容爲:

/usr/local/solr-cloud/tomcat01/bin/startup.sh
/usr/local/solr-cloud/tomcat02/bin/startup.sh
/usr/local/solr-cloud/tomcat03/bin/startup.sh
/usr/local/solr-cloud/tomcat04/bin/startup.sh

 

保存完該文件之後,使用ll命令查看一下solr-cloud目錄,可以發現start-tomcat-all.sh文件,如下圖所示。 

但是這個批處理程序是不能運行的,所以你需要使用chmod u+x start-tomcat-all.sh命令改一下它的權限,這樣我們就可以使用./start-tomcat-all.sh命令來啓動每個tomcat實例了。 

我們可以使用tail -f /usr/local/solr-cloud/tomcat01/logs/catalina.out命令查看第一個tomcat的啓動日誌。 
爲了防止防火牆給集羣搭建帶來不必要的麻煩,建議關掉防火牆,關閉防火牆的命令是service iptables stop,禁止防火牆重啓的命令是chkconfig iptables off如下圖所示。 

下面我們就來訪問Solr集羣,我們訪問任何一臺Solr的首頁,點擊”Cloud”,可以看到如下圖所示的效果,可知當前還沒有進行分片處理。 

接下來我們創建新的Collection進行分片處理,使用的命令是http://192.168.25.129:8180/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2,執行結果如下圖所示。 

我們再看看Solr首頁的雲圖,發現多了一個collection2的庫,如下圖所示。 

我們把沒有分片的collection1刪除掉,使用的命令是http://192.168.25.129:8180/solr/admin/collections?action=DELETE&name=collection1,如下圖所示。 

我們再來查看Solr首頁雲圖,發現現在只剩下有分片的collection2了,我們的SolrCloud集羣搭建成功了!!! 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章