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