SolrCloud4.9+zookeeper在CentOS上的搭建與安裝
Apache SolrCloud安裝
SolrCloud通過ZooKeeper集群來進行協調,使一個索引進行分片,各個分片可以分布在不同的物理節點上,多個物理分片組成一個完成的索引Collection。SolrCloud自動支持Solr Replication,可以同時對分片進行復制,冗余存儲。下面,我們基于Solr最新的4.9.0版本進行安裝配置SolrCloud集群。
1. 安裝環境
我使用的安裝程序各版本如下:
-
Solr: Apache Solr-4.9.0
-
Tomcat: Apache Tomcat 7
-
ZooKeeper: Apache ZooKeeper 3.4.5
各個目錄說明:
-
所有的程序安裝在/home目錄下,你可以依照你的實際情況下修改安裝目錄。
-
ZooKeeper的數據目錄在:
/home/zookeeper/data
-
solrhome設置在:
/home/solrcloud/solrhome
2. 規劃SolrCloud
-
單一SolrCloud數據集合:mycollection
-
ZooKeeper集群:2臺
-
SolrCloud實例:2節點
-
索引分片:2
-
復制因子:2
手動將2個索引分片(Shard)的復本(Replica)分布在2個SolrCloud節點上
三個節點:
-
192.168.56.121
-
192.168.56.122
-
192.168.56.123
3. 安裝ZooKeeper集群
由于需要用到ZooKeeper,故我們先安裝好ZooKeeper集群
首先,在第一個節點上將zookeeper-3.4.5.tar.gz解壓到/home
目錄:
$ tar zxvf zookeeper-3.4.5.tar.gz -C /home/
創建zookeeper配置文件zookeeper-3.4.5/conf/zoo.cfg,內容如下:
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/data/zookeeper/data clientPort=2181 server.1=192.168.56.121:2888:3888 server.2=192.168.56.122:2888:3888 server.3=192.168.56.123:2888:3888
zookeeper的數據目錄指定在/home/zookeeper/data
,你也可以使用其他目錄,通過下面命令進行創建該目錄:
$ mkdir /home/zookeeper/data -p
然后,初始化myid,三個節點編號依次為1,2,3
,在其余節點上分別執行命令(注意修改編號)。
$ echo "1" >/home/zookeeper/data/myid
然后,在第二個和第三個節點上依次重復上面的操作。這樣第一個節點中myid內容為1,第二個節點為2,第三個節點為3。
最后,啟動ZooKeeper集群,在每個節點上分別啟動ZooKeeper服務:
$ cd /home $ sh zookeeper-3.4.5/bin/zkServer.sh start
可以查看ZooKeeper集群的狀態,保證集群啟動沒有問題:
[root@192.168.56.121 opt]# sh zookeeper-3.4.5/bin/zkServer.sh status JMX enabled by default Using config: /home/zookeeper-3.4.5/bin/../conf/zoo.cfg Mode: follower
4. 安裝Solr
簡單來說,執行以下命令:
步驟如下: 首先,在執行如下操作之前建立三個文件:(1):/home/solrcloud/solrhome (2):/home/solrcloud/solr-lib (3)/home/solrcloud/solr-config mkdir -p /home/solrcloud/solrhome mkdir -p /home/solrcloud/solr-lib mkdir -p /home/solrcloud/solr-config 然后進行如下操作: 1.解壓縮apache-tomcat7.zip 到/home/solrcloud/tomcat7 文件中 unzip apache-tomcat7.zip -d /home/solrcloud/tomcat7 2.解壓縮solr-4.9.0.zip到/home/solr-4.9.0文件 unzip solr-4.9.0.zip -d /home/solr-4.9.0 3.首先把solr-4.9.0/example/webapps/solr.war解壓縮,然后復制到tomcat7的webapps下面 $ cp solr-4.9.0/example/webapps/solr.war apache-tomcat7/webapps/ 4.把solr-4.9.0/example/lib/ext/下所有jar文件copy到apache-tomcat7/webapps/solr/WEB-INF/lib/下 $ cp solr-4.9.0/example/lib/ext/* apache-tomcat-6.0.36/webapps/solr/WEB-INF/lib/ 5.把solr-4.9.0/example/resources/log4j.properties 復制 apache-tomcat7/lib/ 下 $ cp solr-4.9.0/example/resources/log4j.properties apache-tomcat7/lib/ 6.把solr-4.9.0/example/solr/solr.xml復制到/home/solrcloud/solrhome中 $ cp solr-4.9.0/example/solr/solr.xml /home/solrcloud/solrhome 7.在/home/solrcloud/solr-config下面建立一個core目錄,比如叫mycollection/conf mkdir -p /home/solrcloud/solr-config/mycollection/conf 8.復制solr-4.9.0/example/solr/collection1/conf 到/home/solrcloud/solr-config/mycollection/conf $ cp solr-4.9.0/example/solr/collection1/conf /home/solrcloud/solr-config/mycollection/conf 9.修改/home/solrcloud/solrhome/solr.xml的 hostPort 節點的端口號為tomcat的端口號 <int name="hostPort">${jetty.port:8080}</int>
在其他節點上重復以上操作完成所有節點的solr的安裝。
5. Tomcat配置與啟動
自動創建Collection及初始Shard,不需要通過zookeeper手動上傳配置文件并關聯collection。
1、在第一個節點修改tomcat啟動參數
JAVA_OPTS='-Djetty.port=8080 -Dsolr.solr.home=/home/solrcloud/solrhome -DzkHost=192.168.56.121:2181,192.168.56.122:2181,192.168.56.123:2181 -DnumShards=3 -Dbootstrap_confdir=/home/solrcloud/solr-config/mycollection/conf -Dcollection.configName=myconf'
然后啟動tomcat。這個步驟上傳了集群的相關配置信息(/home/solrcloud/solr-config/mycollectin/conf
)到ZooKeeper中去,所以啟動下一個節點時不用再指定配置文件了。
2、在第二個和第三個節點修改tomcat啟動參數
JAVA_OPTS='-Djetty.port=8080 -Dsolr.solr.home=/home/solrcloud/solrhome -DzkHost=192.168.56.122:2181,192.168.56.122:2181,192.168.56.123:2181 -DnumShards=3'
然后啟動tomcat。
這樣就會創建3個shard分別分布在三個節點上,如果你在增加一個節點,這節點會附加到一個shard上成為一個replica,而不會創建新的shard。
6. 建立core跟share的一些命令
curl 'http://192.168.56.121:8080/solr/admin/collections?action=CREATE&name=mycollection&numShards=3&replicationFactor=1'
上面鏈接中的幾個參數的含義,說明如下:
-
name 待創建Collection的名稱
-
numShards 分片的數量
-
replicationFactor 復制副本的數量
可以通過Web管理頁面,訪問http://192.168.56.121:8888/solr/#/~cloud
,查看SolrCloud集群的分片信息。
7.手動創建Replication
下面對已經創建的初始分片進行復制。 shard1已經在192.168.56.123上,我們復制分片到192.168.56.121和192.168.56.122上,執行如下命令:
$ curl 'http://192.168.56.121:8080/solr/admin/cores?action=CREATE&collection=primary&name=primary_shard1_replica_2&shard=shard1' $ curl 'http://192.168.56.122:8080/solr/admin/cores?action=CREATE&collection=primary&name=primary_shard1_replica_3&shard=shard1'
最后的結果是,192.168.56.123上的shard1,在192.168.56.121節點上有1個副本,名稱為primary_shard1_replica_2
,在192.168.56.122節點上有一個副本,名稱為primary_shard1_replica_3
。也可以通過查看192.168.56.121和192.168.56.122上的目錄變化,如下所示:
$ ll /usr/local/solrhome/ total 16 drwxr-xr-x 3 root root 4096 Mar 10 17:11 primary_shard1_replica2 drwxr-xr-x 3 root root 4096 Mar 10 17:02 primary_shard2_replica1 -rw-r--r-- 1 root root 444 Mar 10 17:16 solr.xml
你還可以對shard2和shard3添加副本。
其他:下面是手動上傳zookeeper的方法
手動設置SolrCloud配置文件
安裝ZooKeeper集群之前,請確保每臺機器上配置/etc/hosts
文件,使每個節點都能通過機器名訪問。
1、 創建一個SolrCloud目錄,并將solr的lib文件拷貝到這個目錄:
$ mkdir -p /home/solrcloud/solr-lib/ $ cp apache-tomcat7/webapps/solr/WEB-INF/lib/* /home/solrcloud/solr-lib/
2、 通過bootstrap設置solrhome:
$ java -classpath .:/home/solrcloud/solr-lib/* org.apache.solr.cloud.ZkCLI -zkhost 192.168.56.121:2181,192.168.56.122:2181,192.168.56.123:2181 -cmd bootstrap -solrhome /home/solrcloud/solrhome
SolrCloud集群的所有的配置存儲在ZooKeeper.一旦SolrCloud節點啟動時配置了-Dbootstrap_confdir
參數, 該節點的配置信息將發送到ZooKeeper上存儲。基它節點啟動時會應用ZooKeeper上的配置信息,這樣當我們改動配置時就不用一個個機子去更改了。
3、SolrCloud是通過ZooKeeper集群來保證配置文件的變更及時同步到各個節點上,所以,需要將配置文件上傳到ZooKeeper集群中:
$ java -classpath .:/home/solrcloud/solr-lib/* org.apache.solr.cloud.ZkCLI -zkhost 192.168.56.121:2181,192.168.56.122:2181,192.168.56.123:2181 -cmd upconfig -confdir /home/solrcloud/solr-config/mycollectioin/conf -confname myconf
說明:
-
zkhost指定ZooKeeper地址,逗號分割
-
/home/solrcloud/solr-config/mycollectin/conf
目錄下存在schema.xml和solrconfig.xml兩個配置文件,你可以修改為你自己的目錄。 -
myconf為在ZooKeeper上的配置文件名稱。
4、把配置文件和目標collection聯系起來:
$ java -classpath .:/home/solrcloud/solr-lib/* org.apache.solr.cloud.ZkCLI -zkhost 192.168.56.121:2181,192.168.56.122:2181,192.168.56.123:2181 -cmd linkconfig -collection mycollection-confname myconf
說明:
-
創建的collection叫做mycollection,并指定和myconf連接
5、查看ZooKeeper上狀態
在任意一個節點的/opt目錄下執行如下命令:
$ zookeeper-3.4.5/bin/zkCli.sh [zk: localhost:2181(CONNECTED) 0] ls / [configs, zookeeper, clusterstate.json, aliases.json, live_nodes, overseer, collections, overseer_elect] [zk: localhost:2181(CONNECTED) 1] ls /configs [myconf] [zk: localhost:2181(CONNECTED) 1] ls /collections [mycollection]
查看/configs
和/collections
目錄均有值,說明配置文件已經上傳到ZooKeeper上了,接下來啟動solr。
幾個常用的命令:
/admin/collections?action=CREATE
: create a collection
/admin/collections?action=RELOAD
: reload a collection
/admin/collections?action=SPLITSHARD
: split a shard into two new shards
/admin/collections?action=CREATESHARD
: create a new shard
/admin/collections?action=DELETESHARD
: delete an inactive shard
/admin/collections?action=CREATEALIAS
: create or modify an alias for a collection
/admin/collections?action=DELETEALIAS
: delete an alias for a collection
/admin/collections?action=DELETE
: delete a collection
/admin/collections?action=DELETEREPLICA
: delete a replica of a shard
/admin/collections?action=ADDREPLICA
: add a replica of a shard
/admin/collections?action=CLUSTERPROP
: Add/edit/delete a cluster-wide property
Migrate documents to another collection
/admin/collections?action=MIGRATE:
Add a specific role to a node in the cluster
/admin/collections?action=ADDROLE:
Remove an assigned role
/admin/collections?action=REMOVEROLE:
Get status and statistics of the overseer
/admin/collections?action=OVERSEERSTATUS:
Get cluster status
/admin/collections?action=CLUSTERSTATUS:
/admin/collections?action=REQUESTSTATUS
: Get the status of a previous asynchronous request
/admin/collections?action=LIST:
List all collections
參考:http://blog.javachen.com/2014/03/10/how-to-install-solrcloud/