我目前正在使用SolrCloud6.1,下面的行为也可以观察到,直到7.0。
我正在尝试创建一个Solr集合,其中包含5个碎片,复制因子为2,我有5个物理服务器。通常情况下,这将在可用的服务器中平均分配所有10个副本。
但是,当使用-h (主机名) param启动Solr以为每个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我试着使用基于规则的复制布局,但是规则似乎被忽略了。
我需要使用主机名,因为Solr运行在Kubernetes集群中,其中IP地址更改频繁,在容器重新启动后Solr将找不到它的核心。我最初怀疑较新的Solr版本是造成这种情况的原因,但我将其缩小到主机名问题上。
有什么解决办法吗?
发布于 2017-11-06 15:29:19
这个解决方案实际上很简单(但并没有真正记录在案):
在OpenShift/Kubernetes中创建Service时,所有匹配的Pods都会得到负载均衡器的支持。当为所有Solr实例分配唯一主机名时,这些主机名都将解析为一个IP地址(负载均衡器的IP地址)。
Solr在某种程度上无法处理这个问题,并且无法均匀地分配它的碎片。
解决方案是使用来自Kubernetes的无头服务。无头服务没有负载均衡器支持,因此每个主机名都解析为唯一的IP地址。
https://stackoverflow.com/questions/46773456
复制相似问题