我正在研究一个有数百个节点的计算集群。负载平衡方案在 ssh 进入集群时选择一个空闲节点进行登录。因此,在后续 ssh 调用中重新登录到之前的机器的可能性很小。
不过,我想tmux
在远程使用它来设置在不同登录之间持续存在的会话。
我正在寻找可用于实现所需行为的不同选项。我想出了以下选项,但这不是一个真正的“好”解决方案:
选择一个节点并坚持下去。
node-XXXX
即通过负载均衡器 登录到机器后,打开一个新的 ssh 连接node-0042
并在那里运行tmux
。使用甚至可以以无缝的方式实现这
ssh
一点ProxyCommand
,即用户键入ssh node-0042
打开与集群登录的连接并使用此连接作为连接的代理node-0042
。这有一个明显的缺点,那就是用户无法从负载平衡机制中获得任何东西。
您对如何处理这种情况有什么建议吗?有没有其他解决方法(是否可以将正在运行的服务器“移动”tmux
到另一台机器上 [当前机器的副本]?)。
答案1
您可以为 shell 计算机设置一个服务地址,这样 DNS 条目就可以指向它所在的位置。使用某种动态 DNS 服务或高可用性软件,您可以每次使用相同的主机名。
如果您能够在这些资源上运行虚拟机,则可以交替启动您最喜欢的操作系统,只需运行 shell 并连接到 tmux(运行 ssh 会话或其他)。静态地址将是此 shell VM。如果您具有实时迁移功能,它甚至可以在必须关闭某些节点进行维护时继续运行。
答案2
无法“移动” tmux 会话,因此如果您想使用 tmux,您确实需要回到同一主机。
我喜欢利用 SSH 的多路复用功能。一旦建立连接,它就会在后台持续存在,当您再次尝试 ssh 到同一主机时,它将重新使用现有的 ssh 连接,让您回到之前所在的同一节点。
设置起来非常简单~/.ssh/config
:
Host cluster
Hostname cluster.local
ForwardAgent yes
ControlPath ~/.ssh/ctl-%r@%h:%p
ControlMaster auto
ControlPersist yes
(还有更多选项,请查看当地的man ssh_config
所有选项)
如果您的连接实际上中断(使您的工作站进入睡眠状态、长时间空闲等),它并不能解决问题,但对于短期考虑而言确实很有帮助。
答案3
您总是需要在集群中的某个地方运行 tmux,而希望它成为一个可以在机器之间移动的浮岛,这可能会暂时分散您的注意力。
按照您的情况,我已连接到 node-0042,启动了 tmux 并将其分离并与机器断开连接。
在我下次通过负载均衡器连接到节点XXXX时,我将按如下所示重新连接;我可以从我所登陆的任何节点重新连接,从而受益于负载平衡。
[$USER@node-XXXX ~]$ reconnect(){ ssh -t $USER@node-0042 "tmux attachment"; } [$USER@node-XXXX ~]$ 重新连接#喜悦降临 [已分离(来自会话 0)] 与节点 0042 的连接已关闭。 [$USER@node-XXXX ~]$