Solr Cloud:跨节点分配Shards

时间:2017-10-16 15:08:12

标签: solr kubernetes solrcloud

我目前正在使用Solr Cloud 6.1,在7.0之前也可以观察到以下行为。

我试图创建一个包含5个分片和2个复制因子的Solr集合。我有5个物理服务器。通常,这会在所有可用服务器之间均匀分配所有10个副本。

但是,当使用-h(主机名)参数启动Solr Cloud时,为每个Solr实例提供一个单独但恒定的主机名,这不再起作用。然后分布如下:

solr-0:
wikipedia_shard1_replica1  wikipedia_shard2_replica1  wikipedia_shard3_replica2  wikipedia_shard4_replica1  wikipedia_shard4_replica2

solr-1:

solr-2:
wikipedia_shard3_replica1  wikipedia_shard5_replica1  wikipedia_shard5_replica2

solr-3:
wikipedia_shard1_replica2

solr-4:
wikipedia_shard2_replica2

我尝试使用Rule-based Replica Placement,但规则似乎被忽略了。

我需要使用主机名,因为Solr在Kubernetes集群中运行,其中IP地址频繁更改,Solr在容器重启后无法找到它的核心。我首先怀疑更新的Solr版本是导致这种情况的原因,但我将其缩小到主机名问题。

有没有解决方案?

1 个答案:

答案 0 :(得分:1)

解决方案实际上非常简单(但没有真正记录):

在OpenShift / Kubernetes中创建Service时,所有匹配的Pod都会受到负载均衡器的支持。当为所有Solr实例分配一个唯一的主机名时,这个主机名将全部解析为一个IP地址(负载均衡器的IP地址)。

Solr以某种方式无法解决这个问题,并且无法均匀地分发其分片。

解决方案是使用Kubernetes的headless services。无头服务不受负载均衡器的支持,因此每个主机名都解析为唯一的IP地址。