Gearmanの悪魔またはインフラストラクチャの装飾

画像



Gearmanは、タスクを分散するためのフレームワークです。 詳細については、 こちらまたはこちらをご覧ください。 このツールは、多くの問題を解決する天の恵みです。 しかし、戦闘サーバーでの操作中に、いくつかの問題が発生しました。その解決策を共有したいと思います。

-デーモンを自動的に起動し、その状態を監視する方法は?

-ワーカーの複数のインスタンスを実行する方法は?

-悪魔は画面に表示するためのメッセージをどこに書きますか?

-そして、悪魔が巨乳のガーゴイルに気を取らないようにする方法。 つまり、負荷を追跡します。

これには非常に便利なツールがあります。





定期的にワーカーから何かを求めているGearmanサーバー、ワーカー、およびクライアントが実行および構成されていると仮定します。



監督者



問題:Gearmanサーバーを開始しましたが、n番目の数の異なるワーカーを開始する必要があります。

-手動で実行し、コンソールから解きますか?

-しかし、誰かが落ちたことをどうやって知っていますか? 作業は進行中ですか?

-ああ、コンソールをほどかないでください。 いいえ、それはマゾヒズムです。



これらの問題を解決するには、Supervisorを使用できます。



マニュアルによると:スーパーバイザーは、ユーザーがUnixライクなオペレーティングシステムのプロセス数を監視および管理するのに役立つクライアントサーバーシステムです。

これにより、すべての労働者を適切な量で悪魔化し、作業を追跡できます。

各ワーカーが個別の設定ファイルを作成し、 / etc / supervisor / conf.d /に配置する必要があります

構成ファイルの構造はかなり単純です:



[program:<worker_name>] command=<execution_file> process_name=%(process_num)s stdout_logfile=/var/log/<worker_name>.log stderr_logfile=/var/log/<worker_name>.log redirect_stderr=true autostart=true autorestart=true startsecs=5 numprocs=1
      
      







[プログラム:<worker_name>] -セクションのタイトル。 次のパラメーターは、このワーカー(デーモン)にのみ適用されます

command-ファイルを開始するコマンド。 ほとんどの場合、実行可能ファイルへのパス。

process_nameは、ワーカーの各インスタンスの名前です。 ここには微妙な点があります- マニュアルでは 、このパラメーターは不要であることが示されています。 しかし、指定されていない場合、ワーカーのいくつかのインスタンスの起動に問題がありました。 実際には、プロセス名は異なる必要があります。 ここでは、ワーカーの名前に加えて、そのシリアル番号を示します。

stdout_logfile-それ自体を語ります。 ここで、標準出力コンソールをリダイレクトします。

stderr_logfileは同じですが、エラーの場合のみです。 これら2つのパラメーターを指定することをお勧めします。 あなたの悪魔が倒れる理由を理解しなければならないとき、彼らは本当に助けることができます。

自動起動 -予想どおり。 監督者の開始時に労働者を開始します。 システム起動時のルールとして。

自動再起動 -このパラメータのみの場合、スーパーバイザを使用する価値があります。 タスクの1つを実行中に例外で落ちた場合、ワーカーを再起動します。

startsecs-ワーカーが開始するまで待機する時間(オプション)

numprocs-これは、スーパーバイザーを愛することができる2番目のパラメーター-ワーカーのインスタンスの数です。



悪魔の制御と管理



スーパーバイザによって起動されたデーモンを制御するには、supervisorCtlコンソールユーティリティとWebインターフェイスの2つの方法があります。

起動時のSupervisorCtlは、デーモンステータス情報を表示します。



 Gearman_AddressCodeFinder:0 RUNNING pid 2060, uptime 10:15:01 Gearman_MessageSender:0 RUNNING pid 2064, uptime 10:15:01 Gearman_MessageSender:1 RUNNING pid 2063, uptime 10:15:01 Gearman_ReportCreator:0 RUNNING pid 2055, uptime 10:15:01 Gearman_WorkplanNotifier:0 RUNNING pid 2061, uptime 10:15:01 Universal:0 RUNNING pid 2059, uptime 10:15:01 Universal:1 RUNNING pid 2058, uptime 10:15:01
      
      







ここのすべては明確であり、説明なしです。 誰が働いたのか、誰が落ちたのかを理解できます。

このユーティリティを使用すると、コンソールからデーモンを停止して起動し、スーパーバイザを再構成できます。 fgコマンドは非常に興味深いので、バックグラウンドでプロセスに接続できます(コンソールに接続されます)。 戦闘システムでデバッグするための非常に便利なこと:)



Webデーモン管理





コンソールインターフェイスに加えて、スーパーバイザにはWebインターフェイスがあります。





原則として、Url: 127.0.0.1 :9211を使用してアクセスできます/あなたの場合、ポートは異なる場合があります。 設定はセクションにあります

 [inet_http_server] port = 127.0.0.1:9211
      
      





ファイル構成(私の場合は/etc/supervisor/supervisord.conf)



Webインターフェースおよびコンソールから、デーモンを開始/停止し、コンソールに表示されるものを監視できます。 後者は、戦闘システムで悪魔のバグをキャッチする必要がある場合に特に役立ちます



ギアマンツール



悪魔を監視するのは良いことです。 しかし、キューサーバー上にあるタスクの数と、現在実行中のタスクの数と数はどのようにしてわかりますか。 少なくとも2つの方法があります。

1)キューサーバーへのTelnet接続とステータス要求:

 telnet localhost 4730 status //     address:find 0 0 1 workplan:sendnotify 0 0 1 report:createreport 0 0 1 message:send 0 0 2 universal:universal 0 0 2
      
      







しかし、ifnormationはかなり貧弱です。 2か月後、3列目の数字は何であるか覚えていますか? 私-間違いなく。

2)より美しいソリューションがあります-gearman_topユーティリティ

同じ情報がより便利な形式で表示され、データはリアルタイムで更新されます。

それは非常に簡単にインストールされます:

 apt-get install gearman-tools
      
      





次のコマンドによって開始されます。

 gearman_top
      
      





情報を表示します:

 Queue Name | Woker Available | Jobs Waiting | Jobs Running ---------------------------------------------------------------------- address:find | 1 | 0 | 0 message:send | 2 | 0 | 0 report:createreport | 1 | 0 | 0 universal:universal | 2 | 0 | 0 workplan:sendnotify | 1 | 0 | 0 ----------------------------------------------------------------------
      
      





画面上の出力テキストは、サーバー上に存在するキュー、現在使用可能なワーカーの数、実行中のタスクの数、および実行を待機している数を表しています。



All Articles