solr安裝-tomcat+solrCloud構建穩健solr叢集
http://blog.csdn.net/xyls12345/article/details/27504965
solrCloud的搭建可以有兩種方式:使用solr內嵌的jetty來搭建;使用外部web容器tomcat來搭建。對於使用jett來搭建參考solr官方的手冊照著做肯定ok,下面我主要講的是如何使用tomcat來搭建solrCloud。
廢話不多說,開始我們的工作!
1.搭建tomcat單機版solr
2.安裝配置zookeeper
具體下載,安裝,配置不詳細說了,很簡單。只列出我的關鍵配置項,如下:
clientPort=4181
server.2=hadoop.datanode5.com:2888:9888
server.3=hadoop.datanode2.com:2888:9888
server.1=hadoop.datanode3.com:2888:9888
3. 配置solrCloud
(1)先配置主伺服器tomcat 10.2.50.46
vim /usr/apache-tomcat-7.0.54/bin/catalina.sh 在圖片所示位置加入以下程式碼
JAVA_OPTS="$JAVA_OPTS -Dbootstrap_confdir=/usr/solr/collection1/conf -Dcollection.configName=myconf -DzkHost=hadoop.datanode2.com:4181,hadoop.datanode3.com:4181,hadoop.datanode5.com:4181"
注:其中DzkHost是用來指定zookeeper伺服器的ip和埠。 confdir目錄指定所有的索引庫都從collection1索引庫中同步欄位
(2)配置從伺服器tomcat 10.2.50.28 和10.2.50.52
vim /home/tomcat/bin/catalina.sh 在和上圖同樣的位置加入
JAVA_OPTS="-DzkHost=hadoop.datanode2.com:4181,hadoop.datanode3.com:4181,hadoop.datanode5.com:4181"
(3)配置solr collection配置檔案
/usr/solr/solr.xml:配置hostport為tomcat的服務埠;配置zkHhost。
<solr><solrcloud><strname="host">${host:}</str><intname="hostPort">8080</int><strname="hostContext">${hostContext:solr}</str><intname="zkClientTimeout">${zkClientTimeout:15000}</int><boolname="genericCoreNodeNames">${genericCoreNodeNames:true}</bool><strname="zkHost">hadoop.datanode2.com:4181,hadoop.datanode3.com:4181,hadoop.datanode5.com:4181</str></solrcloud><shardHandlerFactoryname="shardHandlerFactory"class="HttpShardHandlerFactory"><intname="socketTimeout">${socketTimeout:0}</int><intname="connTimeout">${connTimeout:0}</int></shardHandlerFactory></solr>
/usr/solr/collection1/core.properties:刪除該檔案(這樣叢集啟動後就沒有collection)
/usr/solr/collection1/conf/solrconfig.xml:修改如下配置項:
<dataDir>${solr.data.dir:/data_solr/example-collection}</dataDir>
將所有的這些配置同步到各個節點上。
(3) 儲存後依次啟動tomcat,輸入http://10.2.50.46:8080,看到如下介面說明成功
正常情況下,應該是沒有collection和core的,我這裡是自己建立了一個collection。
(4)建立collection,shard,core
有兩種方式:一種是建立collection,自動分配shard和replica;另一種是建立collection,手動分配shard和replica。推薦後者,因為可控性強。
方式一:
curl
'http://localhost:7070/solr/admin/collections?action=CREATE&name=europe-collection&numShards=3&replicationFactor=3&maxShardsPerNode=3'
這樣會出來一個collection,它有3個shard,每個shard有1個數據節點,2個備份節點,即該collection共有9個core
缺點:不靈活,不能選擇適合的節點,不能選擇資料存放路徑,不能選擇例項存放路徑
方式二:
curl 'http://localhost:8080/solr/admin/cores?action=CREATE&name=cz_collection-shard1-replica1&instanceDir=/usr/solr/cz_collection-shard1-replica1&dataDir=/data_solr/cz_collection-shard1-replica1&collection=cz_collection&shard=shard1'
curl 'http://localhost:8080/solr/admin/cores?action=CREATE&name=cz_collection-shard1-replica2&instanceDir=/usr/solr/cz_collection-shard1-replica2&dataDir=/data_solr/cz_collection-shard1-replica2&collection=cz_collection&shard=shard1'
這樣可以創建出一個collection,並自己指定該collection的shard和replica的所有配置項。還可以繼續接著建立。
以上兩種方式的具體api呼叫,請參看solr官方文件。
(5)叢集運維
a.叢集會發生變化的就是collection的配置,因此當collection的配置檔案發生變化後就應該使用命令更新zookeeper中配置檔案資訊,solr很好提供了運維工具:
#collection配置
#將配置檔案上傳到ZooKeeper中
java -classpath .:/usr/solr/lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost hadoop.datanode2.com:4181,hadoop.datanode3.com:4181,hadoop.datanode5.com:4181 -confdir /usr/solr/collection1/conf -confname myconf
#將上傳到ZooKeeper中配置檔案與Collection相關聯
java -classpath .:/usr/solr/lib/* org.apache.solr.cloud.ZkCLI -cmd linkconfig -collection cz_collection -confname myconf -zkhost hadoop.datanode2.com:4181,hadoop.datanode3.com:4181,hadoop.datanode5.com:4181
b.對於collection,shard,core運維使用api介面即可,在此不說了。
ok,大功告成!抽時間自己也寫個類似solrCloud的東西玩玩!
參考文章: