同じ JVM 内で、2つの Kerberos 認証された Solr クラスターを指す CloudSolrClient のインスタンスを2つ稼働させる | KandaSearch Community Support Forum

同じ JVM 内で、2つの Kerberos 認証された Solr クラスターを指す CloudSolrClient のインスタンスを2つ稼働させる

トピック作成者:ks-solruserml-bot (2025/10/24 18:18 投稿)
1
OpenOpen

(The bot translated the original post https://lists.apache.org/thread/462md25wm4yhyk63qnj8ksrf580mot5n into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)

皆さんこんにちは。

私のチームでは、Cloudera がホストする Solr をバージョン 7.4.0 から 8.11.2 へ移行中です。
移行の過渡期として、アプリ内で 2 つの CloudSolrClient インスタンスを持ちたいと考えています。1 つは v7.4.0 クラスターを指し、もう 1 つは 8.11.2 を指す形です。

私たちのアプリは SpringBoot アプリで、SolrJ クライアントを利用しています。
現在、CloudSolrClient を 1 つだけ生成する設定は以下のようになっています:

@Bean
public SolrClient getCloudSolrClient() {

    System.setProperty("zookeeper.sasl.client", "false");
    SolrHttpClientBuilder solrClientBuilder = new
        Krb5HttpClientBuilder().getBuilder();
    HttpClientUtil.setHttpClientBuilder(solrClientBuilder);

    CloudSolrClient client = new
        CloudSolrClient.Builder(asList(properties.getZkHosts().split(",")),
        Optional.empty())
        .withConnectionTimeout((int)properties.getConnectionTimeout().toMillis())
        .withSocketTimeout((int) properties.getTimeout().toMillis())
        .build();

    return client;
}

Kerberos を用いてクラスターメンバーと認証するクライアントを 2 つ作るには、当然 jaas.conf に 2 つのレルムなどを定義する必要があると考えています。
ただ、SolrJ クライアントのコードを少し調べたところ、JaasConfig が static であるため、マルチスレッド関連の問題(レースコンディションなど)に直面するのではないかと懸念しています。

同じような要件に直面し、受け入れ可能かつ実用的な解決策にたどり着いた方はいらっしゃいますか?

ヒントやアドバイスをいただけると大変ありがたいです!

Chris

返信投稿者:ks-solruserml-bot (2025/10/24 18:19 投稿)

かなり時間が経ってしまったので、もう役に立たないかもしれませんが…

メールを読み返していて、あなたの件名と質問に興味を持ちました(Kerberos 認証された Solr クラスターの経験は実際にはないのですが)、なぜそれが問題になるのか理解できなかったからです。

…それで Krb5HttpClientBuilder がどのように動くのかを見てみました。うーん。

正直なところ、なぜこのコードが「システムプロパティ」だけを Kerberos 設定として参照するように書かれているのか全く分かりません。
ですが、2 つの提案をしておきます…


1. それを使う必要はありません。
Krb5HttpClientBuilder を自分のコード内で複製して、static 変数や System.getProperty の使用を削除し、代わりにインスタンスの getter/setter を用意して、コードから直接呼び出すようにできます。

2. 誰かが明らかに「単一 JVM で複数の Krb5HttpClientBuilder インスタンスを使うのは面倒だ」と気付きました。
なぜなら、テストを書こうとしたときにその面倒に直面したからで、回避するための特別なハックを追加しています…

https://solr.apache.org/docs/8_11_0//solr-solrj/org/apache/solr/client/solrj/impl/Krb5HttpClientBuilder.html#regenerateJaasConfiguration--

…なので、これを自分の(同期化した)ヘルパーメソッドでラップして使うこともできます。

public synchronized SolrHttpClientBuilder get(...stuff...) {
    Krb5HttpClientBuilder.regenerateJaasConfiguration();
    System.setProperty(...stuff...);
    return (new Krb5HttpClientBuilder()).getBuilder();
}

-Hoss
http://www.lucidworks.com/

トピックへ返信するには、ログインが必要です。

KandaSearch

Copyright © 2006-2025 RONDHUIT Co, Ltd. All Rights Reserved.

投稿の削除

この投稿を削除します。よろしいですか?