12

Gearman のメイン ページでは、ジョブ サーバーが停止した場合にクライアントが新しいジョブ サーバーを取得できるように、複数のジョブ サーバーで実行することについて言及しています。以下のステートメントと図を考えると、ジョブ サーバーが相互に通信していないように見えます。

私たちの質問は、停止したジョブ サーバーでキューに入れられたジョブはどうなるかということです。これらのサーバーの高可用性を確保して、ジョブが障害によって中断されないようにするためのベスト プラクティスは何ですか?

複数のジョブ サーバーを実行し、クライアントとワーカーを、構成されている最初に使用可能なジョブ サーバーに接続させることができます。このようにして、1 つのジョブ サーバーが停止した場合、クライアントとワーカーは自動的に別のジョブ サーバーにフェールオーバーします。あまり多くのジョブ サーバーを実行することは望ましくありませんが、冗長性を確保するために 2 つまたは 3 つのジョブ サーバーを用意することをお勧めします。

ここに画像の説明を入力

ソース

4

1 に答える 1

3

私の知る限り、現時点ではこれを処理する適切な方法はありませんが、両方のジョブサーバーを永続的なキューで実行している限り(MySQLまたは別のデータストアを使用して-両方のサーバーに同じ実際のキューを使用しないでください)、ジョブサーバーを再起動するだけで、データベースからキューが読み込まれます。これにより、サーバーが停止した後でも、キューに入れられたすべてのタスクを使用可能なワーカーに送信できます。

ただし、ジョブサーバーがダウンしたときにこれを行う自動魔法の方法はありません。そのため、ジョブサーバーとデータストアの両方がダウンした場合(両方をローカルで実行しているサーバーがダウンした場合)、オンラインに戻るまでタスクは不安定なままになります。

永続キューは、起動時にのみ読み取られます(タスクが送信されて完了すると、挿入/削除されます)。

そのような機能をギアマンドに追加するために必要な複雑さと、それが実際に必要かどうかはわかりませんが、単純な「タスクの追加、タスクの配布、タスクの完了」-サーバー間の通知は、処理するのにそれほど複雑であってはなりません。

于 2011-10-17T14:23:58.140 に答える