問題タブ [apache-curator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 確実に動くJavaプログラムの作成
私は飼育係、Apache キュレーターの初心者で、プログラムを設計するためにあなたの助けが必要です:
1 時間ごとにスクリプトを実行する Java プログラムを作成する必要があります (エンド ユーザーが提供する cron 式に基づいて)。
サーバーが 3 台あるとします。サーバーがダウンした場合でも、スクリプトが 1 時間ごとに失敗することなく実行されるようにする必要があります (この場合、スクリプトは他のサーバーで実行する必要があります)。1 時間ごとのスクリプトは、1 つのサーバーでのみ実行されます。
このJavaプログラムに入力を提供するためのインターフェースを作成する必要があります。
入力は、(i) 実行するスクリプト、および (ii) スクリプトをスケジュールする Cron 式です。
1)これを達成するためにプログラムをどのように設計できるかを提案してください。Zookeeper、Apache curator を同じように使用できる方法。
2) エンドユーザーが実行するために提供するこれら 3 つのサーバーにスクリプトをキャッシュする方法はありますか?
これら 3 つのサーバーでスクリプトをキャッシュするために、Apache キュレーターの NodeCache を使用できますか? あなたの応答は非常に高く評価されます。
apache-zookeeper - Zookeeper が見逃したイベントを監視する
Zookeeper で、以前のウォッチからコールバックを受信してから新しいウォッチをリセットするまでの間の「データ変更の欠落」イベントをどのように処理しますか。Apacheキュレーターやインターネットでの他の提案など、利用可能な多くのソリューションを調べようとしていますが、まだ明確ではありません.
イベントを見逃さないようにするにはどうすればよいですか、または Zookeeper の状態の変化 (特にノード データの変更) を見逃さないようにするための他の簡単な方法はありますか? 定期的なポーリングが1つの方法であることを理解しています。しかし、それは費用がかかります。
spring - Spring-XD Curator 接続タイムアウト
Spring-XD では、キュレーター接続がタイムアウトします。
警告 ConnectionStateManager-0 curator.ConnectionState - 63021 (最大タイムアウトの 60000 を超える) 後に接続試行が失敗しました。接続をリセットし、新しい接続で再試行しています。
Curator は接続の再確立を試みますが、失敗します。以下のログを確認してください。誰かが同様の問題に直面しましたか? この問題を解決する方法、または回避策をご存知でしたら教えてください。
また、デフォルトの Curator 接続タイムアウトは 60000 です。これを増やす方法はありますか? spring-xd は設定可能なプロパティを公開していますか?
apache-zookeeper - アンサンブルクライアントのどのサーバーに接続されているかをプログラムで検出する方法は?
クライアントが接続されている ZooKeeper アンサンブル内のサーバーをプログラムで検出する方法は?
私はApache Curator APIを使用しており、 ConnectionStateListenerを登録して接続の状態の変化をリッスンしています。接続先のサーバーがダウンした場合にクライアントが再接続したときに、クライアントが接続されているアンサンブル内のサーバーを知りたいです。
apache-zookeeper - Curator でのタイムアウト設定
次のように Curator クライアントを作成します。
クライアント プログラムを実行しているときに、Curator が Zookeeper との通信に使用している NIC を停止して、ネットワーク パーティションをシミュレートします。私が見ている動作に基づいて、いくつか質問があります。
ConnectionStateManager - State change: SUSPENDED
10 秒後にメッセージが表示されます。Curator が SUSPENDED 状態に入るまでの時間は、他のタイムアウト値のパーセンテージに基づいて設定可能ですか、それとも常に 10 秒ですか?- 前回の成功したハートビートから構成された 15 秒のセッション タイムアウトが経過した後、通知を受け取りません。ログにメッセージが表示
ZooKeeper - Session: 0x14adf3f01ef0001 closed
されますが、これはキャプチャまたはリッスンできるイベントとして細流化するようには見えません。ここで何か不足していますか? - 最終的
ConnectionStateManager - State change: LOST
に、接続が失われてからほぼ 2 分後にメッセージを受け取ります。なぜそんなに長いのですか? SUSPENDED
私の目標が HA シナリオでスプリットブレインを防ぐ手段として InterProcessMutex を使用することである場合、最も安全なアプローチは、メッセージが受信されたときにロック所有者がロックを失ったと想定することです。ネットワーク パーティションの反対側で、Zookeeper が知らないうちにロックを解除した可能性があります。これは典型的な/健全なアプローチですか?
java - Zookeeper の Curator を使用して LeaderElection レシピを効率的に使用するには?
Zookeeper でリーダーシップの選挙を行うために、Apache Curator ライブラリを使用しています。私は自分のアプリケーション コードをさまざまなマシンにデプロイしており、コードを 1 台のマシンからのみ実行する必要があるため、飼育係でリーダーシップの選挙を行って、自分がリーダーであるかどうかを確認してからこのコードを実行できるようにしています。
以下は、LeaderElectionExecutor
アプリケーションごとに 1 つの Curator インスタンスがあることを確認するクラスです。
そして以下は私のZookeeperClient
コードです -
今、私のアプリケーションでは、次のようなコードを使用しています -
問題文:-
Curator ライブラリ -isLeader()
ラッチを開始した直後の呼び出しは機能しません。リーダーが選ばれるまでには時間がかかります。この理由だけで、LeaderElectionExecutor
コードに 1 分間のスリープを追加しましたが、これは正常に動作しますが、これは正しい方法ではないと思います。
これを行うより良い方法はありますか?これを念頭に置いて、私がリーダーであるかどうかを確認してから、このコードを実行する方法が必要です。1 つのメソッドですべてを行うことはできないためisLeader
、さまざまなクラスおよびメソッドからメソッドを呼び出して、自分がリーダーであるかどうかを確認し、このコードのみを実行する必要があります。
Zookeeper 3.4.5 と Curator 1.7.1 バージョンを使用しています。
java - curator を使用して順次作成されたすべての znode を取得する
セット PATH に CreateMode.PERSISTENT_SEQUENTIAL を使用して Zookeeper znode を作成するとします。
PATH のみを使用して作成された、順番に名前が付けられたすべての zNode を取得することは可能ですか?
.withMode メソッドの CreateMode.PERSISTENT_SEQUENTIAL オプションは、10 桁の増分番号が追加された PATH によって参照される zNode を作成します。ドキュメントでは、PATH を親パスと呼んでいます。しかし、PATH 自体によって参照される zNode で getData または checkExists() メソッドを使用できないようです。つまり、PATH を親として使用し、getChildren() メソッドを使用して、順次生成されたノードを取得したいと考えています。これは可能ですか?
解決策を見つけました/実現しました。PATH 変数を「/」で終了し、create メソッド チェーンに .creatingParentsIfNeeded() を追加すると、必要な親 zNode が作成されました。
spring - Spring MVC シャットダウン フック
各コントローラーが @PostConstruct で ZooKeeper に登録し、@PreDestroy で登録解除する Spring MVC レスト コントローラーで Curator サービス ディスカバリーを使用しています。
私が抱えている問題は、 @PreDestroy メソッドが呼び出されるまでに、コントローラーが既にリクエストを処理していないことです。コントローラーの停止と登録解除の間に発生する少数の要求に対して例外がスローされないように、コントローラーが要求の処理を停止する前に、コントローラーの登録を解除する必要があります。
春の ApplicationListener インターフェイス、SmartLifecycle、および ServletContextListener を試しましたが、すべてのシャットダウン/クローズ関連のフックで、コントローラーは要求の処理を既に停止しています。
コントローラーがリクエストの処理を停止する前に登録を解除できるシャットダウン フックが必要ですが、利用できるかどうかはわかりません。