[英]Starting and stopping processes in a cluster
我正在寫一個運行了一堆不同的程序(通過軟件扭曲的 twistd
); 這是各種N種守護進程必須跨多台機器啟動。 如果我手動執行此操作,我將在所涉及的機器上運行諸如twistd foo_worker
, twistd bar_worker
等命令。
基本上會有一個機器列表,以及我需要它們運行的守護程序。 此外,我需要在需要時關閉它們。
如果我從頭開始編程,我會編寫一個“spawner”守護程序,該守護程序將在集群中的每台計算機上永久運行,並且可通過網絡訪問經過身份驗證的管理員客戶端:
對上述方案進行編程將是相當簡單的,但我無法想象這是一個新問題。 當然有現成的解決方案正是這樣做的嗎? 但我確實缺乏服務器管理經驗,甚至不知道相關術語是什么。
在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.