3

私はさまざまなプログラムの束を実行するソフトウェアを書いています (ツイスト twistd経由)。つまり、さまざまな種類の N 個のデーモンを複数のマシンで開始する必要があります。これを手動で行うと、関係するマシンで などのtwistd foo_workerコマンドを実行することになります。twistd bar_worker

基本的に、マシンのリストと、それらを実行する必要があるデーモンが表示されます。さらに、必要に応じてすべてをシャットダウンする必要があります。

これをゼロからプログラムする場合は、クラスタ内の各マシンで永続的に実行される「spawner」デーモンを作成し、認証された管理者クライアントがネットワークを介してアクセスできる次の機能を使用します。

  • 指定されたコマンド ラインでプロセスを開始します。それを管理するためのハンドルを返します。
  • ハンドルを指定してプロセスを強制終了します。
  • 必要に応じて、ハンドルを指定して CPU 時間などをクエリします。

上記をプログラムするのはかなり簡単ですが、これが新しい問題になるとは思えません。確かにこれを行うための既存のソリューションはありますか? ただし、サーバー管理の経験がなく、関連する用語が何であるかさえ知りません。

Linux クラスターでこれを行うには、どのような既存の方法がありますか?また、関連する重要な用語は何ですか? Python 固有のソリューションは歓迎されますが、必須ではありません。

別の言い方をすれば、LAN 内に多数のマシンがある場合、それらをクラスターとしてプログラムで操作するにはどうすればよいでしょうか。

4

3 に答える 3

2

最も身近で普遍的な方法は、 を使用することsshです。自動化するには、 を使用できますfabric

foo_workerすべてのホストで開始するには:

$ fab all_hosts start:foo_worker

bar_worker特定のホスト リストで停止するには:

$ fab -H host1,host2 stop:bar_worker

例を次に示しfabfile.pyます。

from fabric.api import env, run, hide # pip install fabric

def all_hosts():
    env.hosts = ['host1', 'host2', 'host3']

def start(daemon):
    run("twistd --pid %s.pid %s" % (daemon, daemon))

def stop(daemon):
    run("kill %s" % getpid(daemon))

def getpid(daemon):
    with hide('stdout'):
        return run("cat %s.pid" % daemon)

def ps(daemon):
    """Get process info for the `daemon`."""
    run("ps --pid %s" % getpid(daemon))

ファブリックでホスト リストを構成する方法は多数あり、スコープはグローバルからタスクごとに変化し、必要に応じて組み合わせることができます。.

特定のホストでのプロセス管理を合理化するには、デーモン用の initd スクリプトを記述 (および実行service daemon_name start/stop/restart) するか、使用supervisord(および実行supervisorctlなどsupervisorctl stop all) できます。「何をどこにインストールしたか」を制御し、構成を一元的にプッシュするには、次のようなものをpuppet使用できます。

于 2012-07-10T13:02:59.903 に答える
2

通常のツールは、SLURM、SGE、Torque/Moab、LSF などのバッチ キュー システムです。

于 2012-07-10T11:27:20.360 に答える
1

サーカス :

ドキュメント : http://docs.circus.io/en/0.5/index.html

コード: http://pypi.python.org/pypi/circus/0.5

ドキュメントからの要約:

サーカスは、プロセスとソケット マネージャーです。プロセスとソケットの監視と制御に使用できます。

Circus は、コマンドライン インターフェイスを介して、またはその python API を介してプログラムで駆動できます。

これは、Supervisord、BluePill、および Daemontools の目標の一部を共有しています。他のプロジェクトと比べて Circus がもたらすものに興味がある場合は、Why should I use Circus instead of X ? を読んでください。

Circus は、ZeroMQ http://www.zeromq.org/を使用して設計されています。詳細については、デザインを参照してください。

于 2012-07-10T11:27:29.313 に答える