配置Solr服務器集羣java
本文所講的Solr集羣服務器是基於 Tomcat7 + Zookeeper3.4.6 + Solr4.6apache
部署Zookeepertomcat
(1)下載Zookeeper3.4.6服務器
下載地址爲 http://www.apache.org/dyn/closer.cgi/zookeeper/socket
(2)解壓Zookeeper3.4.6 .tar.gz到文件夾中待用spa
(3)打開conf文件夾,新建文件zoo.cfg(也能夠重命名zoo_sample.cfg)server
(4)修改zoo.cfg:xml
tickTime=2000對象
initLimit=10部署
syncLimit=5
dataDir=D:\\tmp\\zookeeper\\server1\\data
clientPort=2181
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
在此示例文件中,咱們部署了三分Zookeeper服務器,數據文件分別定位到
D:\\tmp\\zookeeper\\server1
D:\\tmp\\zookeeper\\server2
D:\\tmp\\zookeeper\\server3
其中的server.x中的x爲服務器myid(myid隨後說在哪裏定義),後面的127.0.0.1:2888:3888分別對應與2181
例如,服務器A的clientPort爲2181,則對應的地址爲127.0.0.1:2888:3888
服務器B的clientPort爲2182,則對應的地址應該爲127.0.0.1:2889:3889
服務器配置文件 dataDir clientPort
server_1/conf/zoo.cfg D:\\tmp\\zookeeper\\server1 2181
server_2/conf/zoo.cfg D:\\tmp\\zookeeper\\server2 2182
server_3/conf/zoo.cfg D:\\tmp\\zookeeper\\server3 2183
(4):接下來咱們該說說myid的問題了
上述文件中咱們定義了一個 dataDir 地址,此地址是程序存放數據用的地址,在此地址中,咱們定義一個myid文件,用記事本打開,寫入1,則此項目的Myid爲1
分別將三個服務器按照123進行排列寫入myid文件
(5):依次啓動Zookeeper服務器(鏈接第一臺時有異常信息,不用管,等都鏈接起來就沒有異常了)
部署Solr
按照Solr單機版的部署方式,部署三臺Solr單機版服務器,並去掉其中的全部connection
配置Solr和Zookeeper關聯
1:假設以前部署好的Zookeeper地址爲:
127.0.0.1:2181
127.0.0.1:2182
127.0.0.1:2183
2:部署好的三個solr服務器配置分別爲
solr服務器 tomcat端口 solrhome
solr1 8081 SolrCloud\data\solrhome1
solr2 8082 SolrCloud\data\solrhome2
solr3 8083 SolrCloud\data\solrhome3
3:打開solrhome1下的solr.xml,並修改內容:
<?xml version="1.0" encoding="UTF-8" ?>
<solr>
<solrcloud>
<str name="host">${host:}</str>
<int name="hostPort">8080</int>
<str name="hostContext">${hostContext:solr}</str>
<int name="zkClientTimeout">
${zkClientTimeout:15000}
</int>
<bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
<str name="zkHost">127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183</str>
</solrcloud>
<shardHandlerFactory name="shardHandlerFactory"
class="HttpShardHandlerFactory">
<int name="socketTimeout">${socketTimeout:0}</int>
<int name="connTimeout">${connTimeout:0}</int>
</shardHandlerFactory>
</solr>
其中hostPort爲該服務器的tomcat端口
zkHost爲Zookeeper的三個服務器地址用逗號鏈接起來。
依次啓動三個solr服務器,並訪問任意一個solr,出現下圖頁面,即說明配置集羣服務成功。
在Zookeeper 中上傳Solr的connection配置文件
1:複製相應的Solr的配置文件(例如:Solr\example\solr\collection1\conf)到指定地址
2:複製Solr\example\lib\ext\*.jar 和 war包中的全部lib中的全部jar包到一個文件夾中。
3:執行命令
java -classpath D:\\uploadCloud\\ClientLib\\* org.apache.solr.cloud.ZkCLI -cmd
upconfig -zkhost 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183 -confdir
D:\\uploadCloud\\conf -confname myconf
該命令是使用了以前複製的jar包中的ZkCLI程序進行一個指定文件夾的 upconfig 工做
4:執行命令
java -classpath D:\\uploadCloud\\ClientLib\\* org.apache.solr.cloud.ZkCLI -cmd
linkconfig -collection collection -confname myconf -zkhost 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
該命令是將剛剛上傳的配置文件命名爲一個collection對象
建立connection實例
訪問剛剛配置的solr服務器
name:collection的名稱
numShards:指定分片數量(slices)
replicationFactor:副本數量
maxShardsPerNode:默認值爲1,注意三個數值:numShards、replicationFactor、liveSolrNode,一個正常的solrCloud集羣不允許同一個liveSolrNode上部署同一個shard的多個replic,所以當maxShardsPerNode=1時,numShards*replicationFactor>liveSolrNode時,報錯。所以正確時因知足如下條件: numShards*replicationFactor<liveSolrNode*maxShardsPerNode
createNodeSet:
collection.configName:指定該collection使用那份config,這份config必須存在於zk中。