2012-07-10 6 views
3

다른 프로그램을 실행하는 소프트웨어를 작성하고 있습니다 (twisted'stwistd). N 종류의 데몬이 여러 시스템에서 시작되어야합니다. 이 작업을 수동으로 수행 한 경우 관련된 컴퓨터에서 twistd foo_worker, twistd bar_worker 등과 같은 명령을 실행하게됩니다.클러스터에서 프로세스 시작 및 중지

기본적으로 컴퓨터 목록과 실행할 데몬이 있습니다. 또한 필요가 생길 때 모두 내려야합니다.

나는 처음부터이 프로그램한다면, 나는 인증 된 관리자 클라이언트에 대한 네트워크를 통해 액세스 할 수있는 다음과 같은 기능을 클러스터의 각 시스템에서 영구적으로 실행할 것 "Spawner를"데몬 작성합니다

  • 주어진 명령 줄을 사용하여 프로세스를 시작하십시오. 그것을 관리하기위한 핸들을 반환하십시오.
  • 주어진 핸들을 처리하십시오.
  • 선택적으로 CPU 시간과 같은 쿼리 항목이 핸들을 제공합니다.

위와 같은 프로그램을 작성하는 것이 상당히 쉽지만, 이것이 새로운 문제라고는 상상할 수 없습니다. 확실히 이것을하기위한 기존 솔루션이 있습니까? 그러나 서버 관리에 대한 경험이 부족하고 관련 용어가 무엇 인지도 모릅니다.

리눅스 클러스터에서 기존의 방법으로 어떤 작업을 수행 했습니까? 중요한 용어는 무엇이 있습니까? 파이썬 특정 솔루션은 환영하지만 필수는 아닙니다.

또 다른 방법 : lan에 여러 대의 컴퓨터가있을 경우이를 프로그래밍 방식으로 클러스터로 작동시키는 방법은 무엇입니까?

답변

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)) 

There are a number of ways to configure host lists in fabric, with scopes varying from global to per-task, and it’s possible mix and match as needed.합니다.

은 ( supervisorctl stop allsupervisorctl 예를 들어, 실행) 당신이 데몬 스크립트를 initd 쓸 수있는 특정 호스트의 프로세스 관리를 간소화 (실행 service daemon_name start/stop/restart을) 또는 supervisord을 사용합니다. "어디에 설치했는지"를 제어하고 중앙 집중 방식으로 구성을 푸시려면 puppet과 같은 것을 사용할 수 있습니다.

+0

이제 제가 그것이 고품질의 대답이라고 부릅니다. 감사! – porgarmingduod

2

일반적인 도구는 SLURM, SGE, Torque/Moab, LSF 등과 같은 배치 대기열 시스템입니다.

1

서커스 :

문서 : http://docs.circus.io/en/0.5/index.html

코드 : 문서에서 http://pypi.python.org/pypi/circus/0.5

요약 :

서커스는 프로세스 & 소켓 관리자입니다. 프로세스와 소켓을 모니터하고 제어하는 ​​데 사용할 수 있습니다.

서커스는 명령 줄 인터페이스를 통해 또는 프로그래밍 방식으로 Python API를 통해 구동 될 수 있습니다.

Supervisord, BluePill 및 Daemontools의 목표를 공유합니다. 서커스가 다른 프로젝트에 비해 어떤 점이 궁금하다면 X 대신 서커스를 사용해야하는 이유는 무엇입니까?를 읽으십시오.

서커스는 ZeroMQ http://www.zeromq.org/을 사용하여 설계되었습니다. 자세한 내용은 디자인을 참조하십시오.