簡體   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