Solr11-SolrCloud的詳細部署過程(基於Solr4.10.4搭建Solr叢集)
目錄
1 SolrCloud結構說明
1) ZooKeeper叢集:
a) ZooKeeper需要保證高可用, 需要搭建叢集; b) ZooKeeper需要進行投票和選舉機制, 最少需要三個節點; c) ZooKeeper的三個節點, 注意修改埠號不一樣
2) Solr叢集:
a) 需要四個節點(Solr應用伺服器); b) 四臺Tomcat部署4個 solr應用伺服器; c) 整個Collection分為兩個分片: 每個分片均由兩個副本組成.
2 環境的安裝
2.1 環境說明
- OS: CentOS 7.0
- JDK: HotSpot(TM) 1.8.0_162
- Tomcat: 8.0.53
- ZooKeeper: 3.4.10
- Solr: 4.10.4
2.2 部署並啟動ZooKeeper叢集
ZooKeeper叢集的安裝部署, 詳細文件參見 ofollow,noindex" target="_blank">學習部署ZooKeeper叢集 看這篇就夠了 .
2.3 部署Solr單機服務
參考 Solr04-Solr單機服務的部署 , 這裡通過Tomcat的虛擬環境釋出Solr專案.
(1) 建立SolrCloud的釋出路徑:
建立 /data/solr-cloud
作為專案釋出路徑, 並賦予讀寫許可權:
mkdir -p /data/solr-cloud && cd /data chmod 644 solr-cloud
(2) 將apache-tomcat-8.0.53.tar.gz拷貝到/data/solr-cloud/tomcat下並解壓:
mkdir -p /data/solr-cloud/tomcat && cd /data/solr-cloud/tomcat tar -zxf apache-tomcat-8.0.53.tar.gz
(3) 解壓solr.4.10.4.tgz:
將solr.4.10.4.tgz拷貝到任意一臺伺服器的/data/solr-cloud下, 解壓:
tar -zxf solr-4.10.4.tgz
(4) 找到Solr安裝包example/webapps下的solr.war包, 解壓縮:
cd /data/solr-cloud/solr-4.10.4/example/webapps # 使用jar命令解壓縮 jar -xvf solr.war solr # 解壓縮之後, 刪除solr.war包, 防止Tomcat自動解壓縮此包, 導致配置被覆蓋 rm -rf solr.war
(5) 部署solr專案: 建立存放solr應用的目錄, 並將解壓後的solr.war拷貝至此目錄下:
cd /data/solr-cloud mkdir -p tomcat/display/solr # 將所有檔案拷貝至solr目錄下 cp -r solr-4.10.4/example/webapps tomcat/display/solr
(6) 使用Tomcat的虛擬目錄安裝 : 這裡沒有將Solr服務新增到Tomcat的webapps目錄下, 所以需要修改Tomcat的 $TOMCAT_HOME/conf/server.xml
檔案, 新增Solr的服務路徑:
說明: 這裡將Solr服務部署在 /data/solr-cloud/tomcat/display/solr
路徑下.
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <!-- 配置訪問路徑, 效果為: http://ip:port/solr --> <Context path="/solr" privileged="true" docBase="/data/solr-cloud/tomcat/display/solr"> <Environment name="solr/home" type="java.lang.String" override="true" value="/data/solr-cloud/tomcat/solrhome"/> </Context> <!-- ... ... --> </Host>
-
path: 指定訪問該Web應用的名稱, 即 http://ip:8080/solr 中埠號之後的部分;
-
docBase: 指定Web應用的檔案路徑, 如果是war包, 必須加上字尾;
-
節點就是設定solr/home的目錄, 用來存放各個Collection的索引檔案.
(7) 配置其他檔案:
a. 拷貝Solr解壓包下的log4j.properties檔案至Solr服務的WEB-INF/classes下:
cd /data/solr-cloud mkdir -p tomcat/display/solr/WEB-INF/classes cp solr-4.10.4/example/resources/log4j.properties tomcat/display/solr/WEB-INF/classes
b. 拷貝Solr解壓包下example/lib/ext中的所有jar包拷貝到Solr服務的WEB-INF/lib下:
cd /data/solr-cloud cp -r solr-4.10.4/example/lib/ext/* tomcat/display/solr/WEB-INF/lib
c. 拷貝Solr解壓包下example/solr下的solr.xml至solrhome下( 必須存在, 否則Solr服務將不能正常啟動 ):
cd /data/solr-cloud && mkdir -p tomcat/solrhome cp -r solr-4.10.4/example/solr/solr.xml tomcat/solrhome
d. 拷貝Solr解壓包下的example/solr/collection1至tomcat目錄下的solrhome中, 用作 SolrCore的配置檔案 :
cd /data/solr-cloud cp -r solr-4.10.4/examplesolr/collection1 tomcat/solrhome
啟動Tomcat後, 訪問 http://ip:port/solr, 若出現Solr管理頁面, 說明單機版Solr部署完成.
-
另一種虛擬環境釋出方法:
將上述
標籤的所有內容單獨建立為一個檔案, 檔名為path的值, 將檔案放入 ${TOMCAT_HOME}/conf/Catalina/localhost/
目錄下, Tomcat啟動時, 將自動載入此配置檔案的資訊, 啟動Tomcat後, 直接訪問path路徑即可.
2.4 新增Solr的索引庫
1) 在Solr的管理介面點選[Core Admin], 再點選[Add Core]這項, 系統提示instanceDir和dataDir必須存在, 否則將丟擲如下錯誤:
new_core: org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: Could not load conf for core new_core: Error loading solr config from /data/solr-cloud/tomcat/solrhome/new_core/conf/solrconfig.xml
2) 對映solrhome的位置:
vim /data/solr-cloud/tomcat/display/solr/WEB-INF/web.xml # 刪除40行和46行的註釋, 如下: <env-entry> <env-entry-name>solr/home</env-entry-name> <env-entry-value>/data/solr-cloud/tomcat/solrhome</env-entry-value> <env-entry-type>java.lang.String</env-entry-type> </env-entry>
3) 重新啟動Tomcat, 發現名為collection1的SolrCore已經載入上了:
-
補充說明:
a) 如果刪除
rm –rf /data/solr-cloud/tomcat/solrhome/collection1/core.properties
檔案, 叢集啟動後就沒有collection;b) 以後再次建立SolrCore時, 可以直接複製collection1目錄, 修改core.properties檔案中的name即可.
3 部署Solr叢集服務(SolrCloud)
3.1 啟動ZooKeeper
SolrCloud的部署需要依賴ZooKeeper, 需要先啟動所有ZooKeeper伺服器.
3.2 ZooKeeper管理配置檔案
在分散式服務中, 多采用ZooKeeper統一管理配置檔案, 這裡Solr使用到的配置檔案主要有schema.xml、solrconfig.xml等, SolrCloud各個節點使用ZooKeeper統一管理的檔案即可.
(1) 將Solr單機服務的配置檔案交由ZooKeeper管理:
執行下述命令將Solr單機conf下的配置檔案上傳到ZooKeeper(此命令為一條命令):
cd /data/solr-cloud/solr-4.10.4/example/scripts/cloud-scripts # 注意: 下面一長串只是一條命令, 不要太早回車哦~ sh zkcli.sh -zkhost 10.0.20.50:2181,10.0.20.51:2181,10.0.20.52:2181 -cmd upconfig -confdir /data/solr-cloud/tomcat/solrhome/collection1/conf -confname myconf
-
命令說明:
-zkhost: 指定ZooKeeper叢集的ip及埠號, 多個之間以半形逗號隔開; -cmd: 表示使用某個內部命令, 這裡使用upconfig, 即更新配置資訊; -confdir: 需要上傳的配置檔案所在的位置; -confname: 自定義上傳後ZooKeeper管理的配置檔案的名稱.
(2) 使用ZooKeeper的伺服器查詢配置檔案:
cd /data/zookeeper/zookeeper-3.4.10/bin/ sh zkCli.sh # 資訊如下: ...... WATCHER:: WatchedEvent state:SyncConnected type:None path:null [zk: localhost:2181(CONNECTED) 0] ls / [configs, zookeeper] [zk: localhost:2181(CONNECTED) 1] ls /configs [myconf] [zk: localhost:2181(CONNECTED) 2] ls /configs/myconf [currency.xml, mapping-FoldToASCII.txt, protwords.txt, scripts.conf, synonyms.txt, stopwords.txt, _schema_analysis_synonyms_english.json, velocity, admin-extra.html, update-script.js, _schema_analysis_stopwords_english.json, solrconfig.xml, admin-extra.menu-top.html, elevate.xml, schema.xml, clustering, mapping-ISOLatin1Accent.txt, _rest_managed.json, xslt, spellings.txt, lang, admin-extra.menu-bottom.html] [zk: localhost:2181(CONNECTED) 3] quit Quitting... 2018-10-25 21:27:08,122 [myid:] - INFO[main:ZooKeeper@684] - Session: 0x166a788acfd0001 closed 2018-10-25 21:27:08,126 [myid:] - INFO[main-EventThread:ClientCnxn$EventThread@519] - EventThread shut down for session: 0x166a788acfd0001
3.3 修改SolrCloud監聽埠
修改每個Solr服務的/usr/local/solr-cloud/solr.xml檔案中的hostPort(此埠預設為Jetty容器的訪問埠8983). 如果在catalina.sh中指定, 此處的設定將被覆蓋.
<solrcloud> <str name="host">${host:}</str> <int name="hostPort">${jetty.port:8080}</int> <str name="hostContext">${hostContext:solr}</str> <int name="zkClientTimeout">${zkClientTimeout:30000}</int> <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool> </solrcloud>
3.4 關聯Solr與ZooKeeper
即關聯Tomcat與ZooKeeper, 修改每一臺Solr服務所屬tomcat/bin目錄下的catalina.sh, 指定ZooKeeper服務的地址:
vim /data/solr-cloud/tomcat/ apache-tomcat-8.0.53/bin/catalina.sh # 在cygwin=false(大約109行)之前加入如下設定: JAVA_OPTS="$JAVA_OPTS -DzkHost=zoo1:2181,zoo2:2181,zoo3:2181"
可以使用vim的查詢功能查詢JAVA_OPTS的定義的位置: 按[Esc], 在命令模式下輸入:/cygwin, 然後回車, 按字母[n]查詢下一個.
其中, -DzkHost: 用來指定ZooKeeper服務的ip和埠號.
3.5 分發SolrCloud服務
cd /data scp -r solr-cloud/ 10.0.20.51:/data scp –r solr-cloud/ 10.0.21.52:/data
3.6 啟動所有Solr服務
在啟動ZooKeeper集群后, 依次啟動所有Solr服務 --- 即Tomcat.
3.7 訪問SolrCloud
訪問任意一臺Solr, 左側選單將出現[Cloud]功能按鈕 , 點選檢視, 出現下圖中的資訊, 說明SolrCloud部署成功.
參考資料
http://eksliang.iteye.com/blog/2107002
https://www.cnblogs.com/jepson6669/p/9134652.html
版權宣告
作者: ma_shoufeng(馬瘦風)
出處: 部落格園馬瘦風的部落格
您的支援是對博主的極大鼓勵, 感謝您的閱讀.
本文版權歸博主所有, 歡迎轉載, 但未經博主同意必須保留此段宣告, 且在文章頁面明顯位置給出原文連結, 否則博主保留追究法律責任的權利.