【问题标题】:Solr cloud shardingSolr 云分片
【发布时间】:2014-05-29 04:37:54
【问题描述】:

目前我有一个 Zookeeper 实例控制 3 个服务器上的复制。它是 solr 集成的 zookeeper。它在我的基于 Web 的应用程序中运行良好。

我有一个新要求,需要在云中进行分片,但我不知道如何实现它。基本上我想将只能由我更新的数据(分片 1)与用户可以更新的数据(分片 2)分开。有时我会完全替换分片 1 中的数据目录 - 但我不会想要打扰用户在分片 2 中创建的数据。

分片 1 不需要复制,因为我可以在选择更新时将新数据复制到每个服务器,但分片 2 确实需要复制。

目前我在运行 zookeeper 的服务器上运行以下命令 -

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

以及其他2个非zookeeper服务器上的以下命令

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

这会创建一个单一的分片 solr 实例 * 3

我想我只需要在这个配置中添加 1 个静态分片,但是我不确定完成它的命令序列。

非常感谢

【问题讨论】:

    标签: solr apache-zookeeper


    【解决方案1】:

    首先,您使用 zookeeper 来维护您的分片和领导者/副本。因此,如果您希望一个分片有两个实例,另一个分片只有一个领导者,那么您必须将命令修改为: 1)提供 -DnumShards=2 让 zookeeper 知道你需要两个分片 2) 也为第一个 solr 实例指定 -DzkHost 参数。

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

    执行此操作时,您会在控制台上看到一些错误,因为 shard2 尚未创建。 现在启动你的另外两台服务器,你应该看到一个 shard1 有两台服务器(领导者和副本),而 shard2 将只有一个实例,即领导者

    如果您想要分离索引并控制这些索引。您必须创建两个集合而不是两个分片。

    Explanation
    

    你有 3 台服务器是对的!!!所以当你将使用 zookeeper 启动 solrCloud 时。以下情况会发生:

    1) 与 zookeeper 一起启动第一个 solr 服务器,您将获得 1 个 solr cloud 作为 shard1 的分片

    2) 启动第二个 solr 服务器并指向 zookeeper...因为您已声明 DnumShards=2 ,Zookeeper 将检查它是否需要再创建 1 个分片,因此它会为您的集合创建 shard2。现在,您将能够看到您的管理控制台,其中 1 个集合有 2 个分片。

    3) 现在启动您的第三台服务器并将其指向 zookeeper,现在 zookeeper 看到有 2 个分片,因此它现在将为 shard1 创建一个副本,而不是一个新的分片。

    所以它会像

    collection--->shard1--->server1,server3

          --->shard2--->server2
    

    【讨论】:

    • 我知道设置 DnumShards=2 会创建 2 个分片。每个 solr 服务器的两个分片都将使用相同的 ip。只设置一个 -DzkHost 参数如何告诉 zookeeper 它需要复制哪个分片?谢谢
    • 由于 cmets 中字符的限制,我已经更新了答案...如果您对此仍有疑问,请告诉我。
    • 谢谢!我开始更好地理解我的问题,这意味着我现在有一个新问题/问题 - stackoverflow.com/questions/23123241/…
    猜你喜欢
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    相关资源
    最近更新 更多