我目前正在使用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版本是导致这种情况的原因,但我将其缩小到主机名问题。
有没有解决方案?
答案 0 :(得分:1)
解决方案实际上非常简单(但没有真正记录):
在OpenShift / Kubernetes中创建Service
时,所有匹配的Pod都会受到负载均衡器的支持。当为所有Solr实例分配一个唯一的主机名时,这个主机名将全部解析为一个IP地址(负载均衡器的IP地址)。
Solr以某种方式无法解决这个问题,并且无法均匀地分发其分片。
解决方案是使用Kubernetes的headless services。无头服务不受负载均衡器的支持,因此每个主机名都解析为唯一的IP地址。