Solr 基於java的複製(Master-Slave配置)

 

 

        Solr支持兩種複製,一是java實現的複製,通過RequestHandler實現,Slave定期調用Master的ReqeuestHandler,與Master上的索引同步。另外是利用Unix腳本實現的複製。本文以案例的形式詳細說明第一種複製的配置過程,搭建一個Master-Slave環境的Solr服務。

Solr基於JAVA的主從複製有下面幾個優點:
無需依賴外部腳本
只需在solrconfig.xml中配置
可以賦值配置文件
可以用相同的配置實現擴平臺複製
無需依賴操作系統
與solr緊密集成,可以通過管理頁面查看每個複製的狀態

        在本文中使用了2臺獨立的服務器,一臺作爲Master服務器,另一臺作爲Slave服務器。Slave定時從Master上覆制索引文件到本地,保證索引文件同步。多個Slave的配置與一個Slave的配置相同,可以參考本案例自行擴展。

測試環境
服務器1(Master)
操作系統:      CentOS Linux
IP:                   192.168.1.1
JDK:               Sun JDK 1.6
Web服務器: Apache Tomcat6

服務器2(Slave)
操作系統:       CentOS Linux
IP:                    192.168.1.2
JDK:                Sun JDK 1.6
Web服務器:  Apache Tomcat6

         爲了確保後面步驟的順利進行,請先檢查一下自己的測試環境是否能夠正常運行。比如,每臺服務器上的tomcat是否可以正常啓動,並能訪問默認頁面(如果沒有默認頁面,可以自己建立一個簡單jsp/html頁面進行一下簡單的測試)。tomcat除了在本機可以訪問外,還要保證不同的服務器之間可以互相訪問運行在其它服務器上的tomcat上的頁面。這是因爲,Slave的複製是通過http協議訪問Master完成的,就像用瀏覽器訪問一個web頁面一樣。

         主要的配置工作可以分成2大部分,一是tomcat上配置solr應用, 二是配置solr的配置文件。
本文中可能會忽略一些關於solr的基本概念或基本solr的配置方面的說明,如果需要幫助請參考關於solr相關方面的文檔。

準備工作:
在2臺服務器上建立如下目錄
/usr/local/program/webapps  
/usr/local/program/solr.home 

webapps用於放置solr的web的應用,solr.home存放solr的配置文件和索引文件。

 

1:建立solr的web應用
在服務器1上,將solr提供的solr.war拷貝到/usr/local/program/webapps下,solr.war在solr的下載文件中的example/webapps中。
在%CATALINA_HOME%/conf/Catalina/localhost目錄下建立一個solr.xml文件,內容如下:

 

 

這是一種在tomcat上部署web應用的一種方式,特點是可以將web應用放在tomcat的默認應用目錄webapps以外。

solr運行時需要一個變量solr.home,在上面的配置文件中Environment標籤在jndi環境中定義了這個變量,使solr的主目錄指向/usr/local/program/solr.home。solr主目錄中存放着solr的配置文件和索引文件,後面會再次提到。

 

2:準備solr.home中內容
在下載到的solr壓縮文件的example中有一個solr目錄,此目錄下是solr的一些配置文件,將此目錄下的所有文件和子目錄一起復制到/usr/local/program/solr.home(solr的主目錄)下。
此時solr主目錄中應該有2個子目錄和一個文件,子目錄bin、conf和文件readme.txt,bin和readme.txt不會有什麼影響。conf下面是solr的主要配置文件,實現主從服務器複製主要的也就是配置這幾個文件。

 

3:按照步驟1、2在服務器2(Slave)上部署Solr應用並準備好Solr主目錄的內容。


4:在Master的配置文件中添加一個RequestHandler
RequestHandler是複製在Master端的主要手段,Slave會定期向這個RequestHandler發送請求,並完成索引文件的同步。
編輯Solr主目錄/conf(/usr/local/program/solr.home/conf)下的solrconfig.xml文件,在<config></config>標籤內添加如下內容:

 

 

 


requestHandler的屬性name是這個Master上覆制處理器的名字,無需修改,在slave的配置文件中將會用到這個屬性值。

<lst name="master">說明這個Master節點,如果name=”slave”這個服務器就是Slave節點。

replicateAfter說明什麼時候進行復制,取值可以是startup, commit, optimize分別是創建索引、提交索引、優化索引之後。每當這些動作執行結束後,Slave就可以從Master上進行復制了。

 

5:配置Slave的solrconfig.xml
在Slave服務器上的solr主目錄(/usr/local/program/sole.home/conf)中的soleconfig.xml中加入下面配置

 

 



與Master上的配置很相似,只是屬性值有些卻別。
最重要的一個屬性就是:

<str name="masterUrl">http://master_host:port/solr/corename/replication</str>


屬性值是一個url,指向了Master服務器上的提供複製功能的requestHandler,
master_host:master服務器的IP或主機名
port:master服務器上部署solr應用的tomcat端口
solr:solr的web應用名稱
corename: solr中的core,關於core的概念請參考相關文檔。由於本案例中不涉及多個core,所以此處的url中可以去掉這項,也不對core進行過多的說明。
replaction: Master上提供複製的requestHandler名稱,也就是requestHandler的name屬性的取值。

<str name="pollInterval">00:00:20</str>是Slave定期檢測Master的時間,格式是HH:mm:ss。這裏配置的時間是20秒,因此Slave每個20秒會主動請求一次Master服務器,獲得Master服務器上索引文件的狀態,比如最後修改時間,文件尺寸等,如果與本機的索引文件不同就進行復制,實現同步。  

 

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