首页 文章

Solr Cloud:跨节点分配Shards

提问于
浏览
1

我目前正在使用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 回答

  • 1

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

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

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

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

相关问题