ZooKeeperの障害対応方法

トピック作成者:ks-solruserml-bot (2024/06/17 19:07 投稿)
2
CloseClose

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

こんにちは皆さん、

私たちはSolr 8.8.2のクラウドセットアップを使用しており、zkアンサンブル3.6.3(3つのzkサーバー)を使用しています。
私たちのHAモニタリングシステムは、solrのURLやシャードの可用性を確認するために5分ごとにpingします。もし問題が発生した場合(solrサーバーがダウンしている場合)、検索をDB検索に切り替えるフラグを立てます。

現在、私たちの問題は、zkホストを渡してsolrに接続しているところです。もし2つのZooKeeperがダウンしていて、solrping.process(client)を呼び出した場合、全てのZooKeeperがダウンしているために処理が長時間実行され、スレッドがスタックしてWebLogicアプリケーションサーバーが遅くなっています。

次のようなメソッドがあります:

private int pingRepo(zkHostList, corename) {
    SolrClient client = SolrConnectionUtil.getSolrClient(zkHostList, “ping”);
    ((CloudSolrClient) client).setDefaultCollection(corename);
    SolrPing ping = new SolrPing();
    SolrPingResponse resp;
    try {
        resp = ping.process(client);
        return resp.getQTime();
    } catch (Exception e) {
        // Exception handling
    }
    return -1;
}

この問題をどのように解決すれば良いか、ご提案いただけますでしょうか?ZooKeeperがダウンしている場合の対処方法について、ご意見をお待ちしております。ありがとうございます。

敬具
Reej

返信投稿者:ks-solruserml-bot (2024/06/17 19:07 投稿)

こんにちは、Reejさん、

この挙動を変更することはできません。これはZooKeeperの動作です。ZooKeeperクラスターでは、少なくとも(2*N + 1)のノードが必要です。これにより、N台のZooKeeperノードの障害に対応できます。

この点はSolrリファレンスガイドでも詳細に説明されています:
https://solr.apache.org/guide/8_8/setting-up-an-external-zookeeper-ensemble.html
"ZooKeeperサービスがアクティブであるためには、相互に通信できる正常なマシンの過半数が必要です。F台のマシンの障害に耐えるデプロイメントを作成するためには、2xF+1台のマシンをデプロイすることを想定するべきです。"

この制限はZooKeeperが適切に機能するための設計です。もしZooKeeperが1台のノードでリクエストに応答できる場合、全体のクラスターはすべてのケースでパーティション耐性が保証されなくなります。

これを考慮した上で、もし2つのノードがダウンしてもZooKeeperが適切に動作するようにしたい場合は、ZooKeeperクラスターを5つのノードに増やしてください。

ありがとうございます。
Vinay

返信投稿者:ks-solruserml-bot (2024/06/17 19:07 投稿)

ありがとう Vinay

Reej

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

KandaSearch

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

投稿の削除

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