2014-04-15 56 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 –