未提供项目描述
项目描述
CASH - 级联外壳
CASH 是一个实用程序,供大型计算机集群的管理员在所有或部分集群节点上快速运行 shell 命令。CASH 生成节点的级联或树状拓扑,因此比其他简单地迭代节点或尝试并行访问许多节点的工具要快得多。
CASH 应该从管理员的机器上运行,但也可以从集群节点之一运行。在第一种情况下,计算机集群和管理机器之间的所有通信都通过网关主机进行传输。
请参阅下面的执行/通信模型。
要求
现金有以下要求:
- 每个节点上的 python > 3.6
- 所有节点之间的无密码 SSH 访问
设置
请在管理员机器上运行pip install cascading-shell并使用cash命令行工具。然后,配置您的集群。节点和节点组配置~/.cash.topo.json如下:
{
"nodes": {
"group1": "clus1node001,clus1node002,clus1node003",
"all": {
"site1": {
"cluster1": {
"rack1": "clus1node[001-020]",
"rack2": "clus1node[021-040]",
"rack3": "clus1node[041-060]"
},
"cluster2": {
"rack1": "clus2node[001-020]",
"rack2": "clus2node[021-040]",
"rack3": "clus2node[041-060]"
}
},
"site2": {
"cluster3": {
"rack1": "clus3node[001-020]",
"rack2": "clus3node[021-040]",
"rack3": "clus3node[041-060]"
},
"cluster4": {
"rack1": "clus4node[001-020]",
"rack2": "clus4node[021-040]",
"rack3": "clus4node[041-060]"
},
"cluster5": "clus5node[001-020]"
}
}
}
}
配置文件有以下规则:
- 现在,一切都生活在
nodes对象之下。 - 文件格式是标准 JSON,其中每个键是组名,每个值是逗号分隔的节点列表。
- 可以使用方括号缩短具有序号的节点,例如,
node[001-003]解析为node001,node002,node003. 注意这里的前导零!您也可以在此处使用逗号,例如:node[001-003,005]->node001,node002,node003,node005。您还可以使用多个括号实例:clus[1-3]node[001-003]->clus1node001,clus1node002,clus1node003,clus2node001,clus2node002,clus2node003,clus3node001,clus3node002,clus3node003等等。 - 组可以嵌套。节点树的拓扑结构在强制
all组中指定。在树中反映网络延迟/带宽是明智的;例如,如上例所示,您可以将 HPC 划分为站点、集群、机架组(如果适用)。 - 除了
all,您可以根据需要指定任意数量的组并根据自己的喜好嵌套它们。
级联通信模型
CASH 以级联方式与每个节点通信,其中每个节点上的 CASH 本身充当其直接子节点的代理,并将所有消息从子节点转发到其父节点,反之亦然。让我们尝试通过一个例子来理解这一点。成像以下拓扑配置:
{
"nodes": {
"all": {
"site1": {
"cluster1": {
"rack1": "clus1node[1-3]",
"rack2": "clus1node[4-6]"
},
"cluster2": {
"rack1": "clus2node[1-3]",
"rack2": "clus2node[4-6]"
}
},
"site2": {
"cluster3": {
"rack1": "clus3node[1-3]",
"rack2": "clus3node[4-6]"
},
"cluster4": {
"rack1": "clus4node[1-3]",
"rack2": "clus4node[4-6]"
}
}
}
}
}
我们在两个地理位置共有四个集群,每个集群有两个机架,每个机架三个节点。我们现在要使用 CASH 在所有节点上执行命令。首先,CASH 在网关主机上生成一个自身的实例,可以通过DEFAULT_JUMP_HOST变量或命令行参数指定--jump-host。从网关,建立到第一台主机site1和第一台主机的连接site2,即,clus1node1和
clus3node1。从这两个节点中的每一个,CASH 跳到每个集群的第一个节点(例如,clus1node2对于
cluster1,如clus1node1已使用的,和clus2node1),从那里到每个机架的第一个节点,然后到其余节点。
例如,clus4node5通过以下方式到达:
ADMIN_MACHINE -> gateway -> clus3node1 (site) -> clus4node1 (cluster) -> clus4node4 (rack) -> clus4node5 (node). 当然,这种分层或级联执行模型只适用于比本示例更多的节点。您可以通过参数告诉 CASH 使用平面而不是级联连接模型--flatten。
每个节点上的并行连接数受--fan-size参数 (env DEFAULT_FANSIZE = 50) 限制。当多个 FANSIZE 节点是一个节点的直接子节点时,它们按 FANSIZE 分组并形成一个附加层。
作为树的一部分的每个节点都从其父节点和子节点接收和转发消息,并且还在本地执行所需的 shell 命令。
用法
这是一个副本cash --help:
usage: cash [-h] [-n NODES] [--jumphost JUMPHOST] [--ssh-timeout SSH_TIMEOUT]
[-s FANSIZE] [--flatten] [-p] [--json | --shell | --quiet]
{run,plan} ...
positional arguments:
{run,plan} Please use one of the following sub commands
run Run command
plan Print tree as json to stdout (view with, e.g.,
firefox)
optional arguments:
-h, --help show this help message and exit
-n NODES, --nodes NODES
Node or node groups.
--jumphost JUMPHOST Gateway host to cluster.
--ssh-timeout SSH_TIMEOUT
Define a timeout for SSH sessions. 0 = no timeout
-s FANSIZE, --fansize FANSIZE
Maximum number of parallel SSH sessions.
--flatten Disable tree mode.
-p, --progress Show progress of received answers
--json JSON output format
--shell Shell friendly output format
--quiet No output
- 可以
@group_name在--nodes参数中指定节点组。 - 您可以使用 排除主机
-n "@group,-node01"。 - 您也可以在此处使用方括号语法:
-n "node[1-9]".
您可以通过以下环境变量指定 CLI 参数的默认值:
DEFAULT_SSH_TIMEOUT = 30
DEFAULT_FANSIZE = 50
DEFAULT_NODES_STRING = "@all"
DEFAULT_OUT_FORMAT = "text"
DEFAULT_JUMP_HOST = "jumphost"
DEFAULT_FLATTEN = False
DEFAULT_RUN_SHELL = True
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。