我正在编写运行大量不同程序的软件(通过twisted's twistd
);这是各种N种守护进程必须跨多台机器启动。如果我手动执行此操作,我将在所涉及的计算机上运行twistd foo_worker
,twistd bar_worker
等命令。
基本上会有一个机器列表,以及我需要它们运行的守护程序。另外,我需要在需要时关闭它们。
如果我从零开始编程,我会写一个" spawner"将在群集中的每台计算机上永久运行的守护程序,具有以下功能,可通过网络访问经过身份验证的管理员客户端:
编程以上内容相当简单,但我无法想象这是一个新问题。当然有现成的解决方案正是这样做的吗?但我确实缺乏服务器管理经验,甚至不知道相关术语是什么。
在Linux集群上有哪些现有方法可以做到这一点,以及涉及哪些重要术语?欢迎Python特定解决方案,但不是必需的。
另一种说法:给定一堆局域网中的机器,如何以编程方式将它们作为集群使用?
答案 0 :(得分:2)
通常的工具是批处理队列系统,例如SLURM,SGE,Torque / Moab,LSF等。
答案 1 :(得分: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
的内容。
答案 2 :(得分: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与其他项目相比所带来的好奇心,请阅读为什么我应该使用Circus而不是X?
Circus是使用ZeroMQ http://www.zeromq.org/设计的。有关详细信息,请参阅设计。