繁体   English   中英

启动和停止集群中的进程

[英]Starting and stopping processes in a cluster

我正在写一个运行了一堆不同的程序(通过软件扭曲的 twistd ); 这是各种N种守护进程必须跨多台机器启动。 如果我手动执行此操作,我将在所涉及的机器上运行诸如twistd foo_workertwistd bar_worker等命令。

基本上会有一个机器列表,以及我需要它们运行的​​守护程序。 此外,我需要在需要时关闭它们。

如果我从头开始编程,我会编写一个“spawner”守护程序,该守护程序将在集群中的每台计算机上永久运行,并且可通过网络访问经过身份验证的管理员客户端:

  • 使用给定的命令行启动进程。 返回一个句柄来管理它。
  • 杀死给定手柄的过程。
  • (可选)在给定句柄的情况下查询cpu时间等内容。

对上述方案进行编程将是相当简单的,但我无法想象这是一个新问题。 当然有现成的解决方案正是这样做的吗? 但我确实缺乏服务器管理经验,甚至不知道相关术语是什么。

在Linux集群上有哪些现有方法可以做到这一点,涉及哪些重要术语? 我们欢迎Python特定的解决方案,但不是必需的。

另一种说法:给定LAN中的一堆机器,如何以编程方式将它们作为集群使用?

通常的工具是批处理队列系统,例如SLURM,SGE,Torque / Moab,LSF等。

最熟悉和最通用的方法就是使用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东西。

马戏团 :

文档: http//docs.circus.io/en/0.5/index.html

代码: http//pypi.python.org/pypi/circus/0.5

文档摘要:

Circus是一个进程和套接字管理器。 它可用于监视和控制进程和套接字。

Circus可以通过命令行界面驱动,也可以通过python API以编程方式驱动。

它分享了Supervisord,BluePill和Daemontools的一些目标。 如果您对Circus与其他项目相比所带来的好奇心,请阅读为什么我应该使用Circus而不是X?

Circus是使用ZeroMQ http://www.zeromq.org/设计的。 有关详细信息,请参阅设计

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM