2014-04-15 53 views
4

目前,我有一個動物園管理員實例3個服務器控制的複製。這是solr集成的動物園管理員。它適用於我的基於Web的應用程序。Solr的雲拆分

我有一個新的要求,這將需要分片雲,我不知道如何實現它。基本上我想這隻能由我來更新數據,碎片1,用戶可以更新數據,碎片2.及時分離到時候我將徹底替換碎片1中的數據目錄 - 但我不不想打擾用戶創建的數據碎片2.

碎片1不需要複製,因爲我可以將新數據複製到每個服務器時,我選擇了更新但它碎片2確實需要複製。

目前我在服務器上運行以下命令運行飼養員 -

java -Dbootstrap_confdir=solr/myApp/conf -Dcollection.configName=myConfig -DzkRun -DnumShards=1 -jar start.jar 

而另外2個非飼養員服務器

java -Djetty-port=8983 -DzkHost=129.**.30.11:9983 -jar start.jar& 

這將創建一個單一的碎片Solr的實例上運行以下命令* 3

我想我只需要1個靜態碎片添加配置但是我不知道的命令序列來完成它。

非常感謝

回答

2

首先使用的是動物園管理員維護您的碎片和領導者/副本。所以,如果你想有一個碎片有兩個實例,只有一個領導者的另一個碎片,那麼你將不得不修改命令: 1)提供-DnumShards = 2,這樣的動物園管理員都知道,你需要兩個碎片 2)指定此第一個solr實例的-DzkHost參數也是如此。

java -Dbootstrap_confdir=solr/myApp/conf -Dcollection.configName=myConfig -DzkRun -DnumShards=2 -DzkHost=** -jar start.jar 

當你這樣做,你會看到在控制檯上的一些錯誤,因爲shard2,迄今還沒有建立。 現在開始你的另兩臺服務器,你會看到有兩個服務器(首領和副本)及shard2一個shard1將只有一個實例,即領導者

如果你想對這些indexes.You將不得不索引和控制權分離創建兩個集合而不是兩個分片。

Explanation 

你有3個服務器正確!所以當你使用zookeeper啓動solrCloud時。下面的事情會發生的:

1)首先啓動的Solr服務器與飼養員一起,您將獲得1個碎片對Solr的雲作爲shard1

2)啓動第二Solr的服務器,並點到動物園管理員...因爲你已經聲明瞭DnumShards = 2,Zookeeper會檢查它是否需要創建另外一個分片,所以它會爲你的集合創建shard2。現在你將能夠看到你的管理控制檯與2個碎片1集合。

3)現在開始你的第三臺服務器並將其指向zookeeper,現在zookeeper發現有2個碎片在那裏,所以它現在將爲shard1創建一個副本,而不是一個新的碎片。

所以它會像

收集---> shard1 --->服務器1,服務器3

 --->shard2--->server2 
+0

據我所知,設置DnumShards = 2創建2個碎片。每個solr服務器的兩個碎片都在相同的ip上。如何設置一個-DzkHost參數告訴zookeeper它需要複製哪個碎片?謝謝 –

+0

由於評論中字符的限制,我已經更新了答案......請讓我知道你是否仍然懷疑這件事。 – javacreed

+0

謝謝!我開始瞭解我的問題更好一點,這意味着我現在有一個新的問題/問題 - http://stackoverflow.com/questions/23123241/solr-cloud-document-routing –