SolrCloudノードは、Kubernetes環境でZookeeperノードを再発見しようとしないのですか?

トピック作成者:ks-solruserml-bot (2024/07/09 21:52 投稿)
5
CloseClose

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

こんにちは、皆さん!

Kubernetes環境でのSolrCloud + Zookeeperの動作について助けや明確な説明を求めています。

具体的には、ZKクラスタの3つのノードのうち2つがダウンしてリクエストを処理できない場合、接続しようとするSOLRノードは失敗し、Ready状態にはなりません。これは理解できます。
しかし、ZKクラスタが復旧して、つまり3つのノードすべてが再び稼働している場合でも、最初に自身を解決できなかったSOLRノードは引き続き解決しません。見たところ、これらのSOLRノードはZKに再接続しようとせず、したがってZKが再び利用可能であることを認識しないようです。

これは期待される動作でしょうか?そして、これから自動的に復旧する方法はありますか?
私たちはbitnamiのSOLR & Zookeeper helmチャートを使用しており、セットアップは以下の通りです:

  • 3つのレプリカを持つZKステートフルセット
  • 3つのレプリカを持つSolrCloudステートフルセット

再現方法は以下の通りです:

~~

  • ZKクラスタを1つのレプリカにスケールダウンし、それがリクエストを処理できないことを確認します
  • 3つのSolrCloudポッドすべてがZKが正常でないことを認識することを確認します

以下はエラーメッセージです:

2022-09-13 21:37:01.741 WARN
(main-SendThread(solr-v1-base-zookeeper-headless:2181)) [ ]
o.a.z.ClientCnxn Session 0x0 for sever solr-v1-base-zookeeper-headless/
10.64.0.69:2181, Closing socket connection. Attempting reconnect except it
is a SessionExpiredException. => EndOfStreamException: Unable to read
additional data from server sessionid 0x0, likely server has closed socket
  • 2つのSolrCloudポッドを削除し、それらが再起動するのを待ちます。再起動後、それらはZKにアクセスできないと文句を言います
org.apache.solr.common.SolrException: Error occurred while loading solr.xml
from zookeeper
  • 削除された2つのSolrCloudポッドは一貫して準備ができていない状態であり、それはコアが初期化されていないかシャットダウンしているためだと表示されます。削除されなかった単一のポッドは通常通り動作し続けます。

  • ZKクラスタを再び3つのレプリカにスケールアップし、それが再び正常であることを確認します

  • ZKが正常でない時に起動した2つのSolrCloudポッドが引き続き準備ができていないままであり、ログに同じエラーが表示され続けることを確認します
javax.servlet.ServletException: javax.servlet.UnavailableException: Error
processing the request. CoreContainer is either not initialized or shutting
down.
o.a.s.s.SolrDispatchFilter Error processing the request. CoreContainer is
either not initialized or shutting down.
o.e.j.s.HttpChannel /solr/admin/info/system =>
javax.servlet.ServletException: javax.servlet.UnavailableException: Error
processing the request. CoreContainer is either not initialized or shutting
down.

~~

したがって、確認したいのは...
SOLRが以前に失敗した場合、ZKに再接続しようとしないようです。これは意図的な動作でしょうか?それを実行させる方法はありますか?

ありがとうございます!

返信投稿者:ks-solruserml-bot (2024/07/09 21:52 投稿)

SolrのバージョンとZKのバージョンは何ですか?

そして重要かもしれない点として、ZKを再び3ノードにスケールアップしたとき、それらはスケールダウン前と同じIPアドレスを持っていますか?

ありがとうございます、
Shawn

返信投稿者:ks-solruserml-bot (2024/07/09 21:52 投稿)

おっと、良い質問ですね。
ZK 3.8とSolr 8.11を使用しています。

そして、いいえ、ポッドのIPアドレスはkubeに任せており、kubeは同じIPを使用することはほとんどありません。

SOLRはZKのドメイン名を解決してIPアドレスを保存しているのでしょうか?

返信投稿者:ks-solruserml-bot (2024/07/09 21:52 投稿)

現在SOLRのソースコードを見ていて(ログに基づいて)、次のようなことがわかりました。

SolrZkClientは、startUpTimeOutとstartUpZkTimeOutというプロパティを持っており、その期間内にZKが利用可能かどうかをチェックします。そのタイムアウトを超えると、SOLRノードはコアの読み込みに失敗したと宣言し、それ以降は何もしません。
その後のリクエスト(例:/solr/admin/info/system)はCoreContainerの状態をチェックし、もしそれが正常でなければ(そして、起動時にZKが利用できなかった場合は正常ではありません)、リクエストは失敗し、それ以降何もしません。

今疑問に思っていることは以下の通りです:

  • Solrが起動できない理由がZKの問題による場合、再試行するべきでしょうか?特に問題がZKの接続性に関連している場合は?
  • SOLRのCoreContainerが初期化されていない場合(シャットダウン中とは異なり)、再度初期化を試みるべきでしょうか?
    具体的には、「初期化されていない」状態を「シャットダウン中」とは異なる方法で処理するべきでしょうか?

そして、これが意味するのは、SOLRの初期化エラーに対する答えは実際には「SOLRを再起動すること」なのでしょうか?

ありがとうございます!

返信投稿者:ks-solruserml-bot (2024/07/09 21:53 投稿)

それには少し手直しが必要なようですね。SolrはZKへの接続を試みるのを止める状態には決してならないべきです。単一のノードがまだ利用可能であれば、Solrは読み書きモードでは動作できませんが、読み取り専用モードで動作し続け、ZK全体が利用可能になった場合には常に再接続を試みるべきです。

現在、ZKホストのDNSルックアップはSolrが最初に起動したときにのみ行われると思います。これはSolrで改善が必要なもう一つの点かもしれません。間違っているかもしれませんが、私はSolrCloudのコードには詳しくありません。

ZK 3.5以降、ZKはアンサンブルの動的再構成をサポートしています。私たちの開発者の一人がSolrはこれをサポートしていないと言っていたのをどこかで読んだことがありますが、サポートはSolrではなくZKクライアントに依存すると思います。ZKノードの追加/削除時にZKの動的再構成を使用している場合、IMHOではZKクラスタのメンバーシップが変更されたときにSolrは正常に動作するべきです。

ありがとうございます、
Shawn

返信投稿者:ks-solruserml-bot (2024/07/09 21:53 投稿)

BitnamiのSolrチャートについては詳しくありませんが(私はZKのものを使用しました)、もしポッドが生存していない場合、k8sがポッドを再起動させるlivenessProbeが設定されていることを期待していますか?

Jan

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

KandaSearch

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

投稿の削除

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