无故突然出现错误“我们无法连接到端口 22 上的虚拟机”

无故突然出现错误“我们无法连接到端口 22 上的虚拟机”

我有AngularNodeJSnginx在 上的 2 核 8GB RAM ubuntu 18.04 实例上运行google compute engine。服务器运行正常(HDD 49%、CPU 低于 10% 和 RAM 低于 40%),但突然 Web 前端不工作(就像服务器停止了一样)。当时,我检查了谷歌云控制台,系统运行正常。然后我尝试使用sshWinSCP无法连接到主机。然后我尝试在云控制台网站上使用 Web ssh,但还是不行。我重新启动了服务器,然后一切正常。

我检查了数据库和节点服务器的所有日志,发现服务器一直在运行,没有问题。我得出的结论是操作系统一直在运行。

我使用了谷歌控制台上的监控,CPU 正在运行,但是上述期间的网络活动(传入/传出)

  1. 对上述情况有什么解释吗?我应该通过服务器解决问题还是通过 Google 解决问题?

  2. 我可以按照哪些步骤来识别上述场景中的问题?我应该检查哪些日志?

  3. 此外,我可以检查 Google 控制台中的任何日志以进行故障排除吗?

答案1

对于您问题的描述,我只能认为 Google 代理重新启动了网络服务,但由于某种原因,它无法正确启动它们。通常,这只能通过检查代理是否正在运行或检查代理日志来在操作系统内部确认,但 Stackdriver 日志中通常会有一条通用消息,显示“操作系统代理配置已启动”。当实例重新启动时,代理会再次启动配置。

答案2

作为@AdolfoOG提到 - 您必须检查日志才能解决此问题。

但当它发生时,你无法通过 SSH 进入你的机器。即使你不能,你仍然可以检查串行控制台输出通过控制台 GUI 或gcloud compute instances get-serial-port-output instance_name --zone=my_zoneCloud Shell 中的命令。

为了能够登录[启用与串行控制台的交互][4]gcloud compute instances add-metadata instance-name --metadata serial-port-enable=TRUE并使用 连接到它gcloud compute connect-to-serial-port instance-name

现在,当您登录时,如果问题仍然存在,您可以检查所有日志或服务。

答案3

首先,你应该收集日志

  1. 转到Compute Engine-> VM instances-> 单击 NAME_OF_YOUR_VM -> 在VM instance details查找部分日志并点击Serial port 1 (console)
  2. 再次重新启动您的 VM 实例。
  3. 检查完整启动日志中是否存在任何错误或/和警告。

如果发现与磁盘空间相关的错误/警告您可以尝试根据文档调整其大小调整区域永久性磁盘的大小,也根据文章恢复无法访问的实例或完整的启动磁盘

如果实例的磁盘空间完全用完,或者没有运行 Linux 客户环境,则无法自动调整根文件系统的大小,即使您增加了支持它的持久磁盘的大小也是如此。如果您无法连接到实例,或者启动磁盘已满且无法调整其大小,则必须创建新实例并从快照重新创建启动磁盘以调整其大小。

否则尝试通过串行控制台排除虚拟机实例故障

  1. 启用串行控制台连接使用gcloud命令:

     gcloud compute instances add-metadata NAME_OF_YOUR_VM_INSTANCE \
     --metadata serial-port-enable=TRUE
    

或前往Compute Engine-> VM instances-> 点击NAME_OF_YOUR_VM_INSTANCE-> 点击EDIT-> 前往部分Remote access并检查Enable connecting to serial ports

  1. 创建临时用户和密码登录:关闭你的虚拟机并设置一个启动脚本通过添加在部分Custom metadatastartup-script和值:

     #!/bin/bash
     useradd --groups google_sudoers tempuser
     echo "tempuser:password" | chpasswd
    

然后启动您的虚拟机。

  1. 通过串行端口连接到您的虚拟机使用gcloud命令:

     gcloud compute connect-to-serial-port NAME_OF_YOUR_VM_INSTANCE
    

    或前往Compute Engine-> VM instances-> 点击NAME_OF_YOUR_VM_INSTANCE-> 然后点击Connect to serial console

  2. 检查哪里出了问题。

  3. 禁用通过串行端口访问使用gcloud命令:

     gcloud compute instances add-metadata NAME_OF_YOUR_VM_INSTANCE \
     --metadata serial-port-enable=FALSE
    

或前往Compute Engine-> VM instances-> 点击NAME_OF_YOUR_VM_INSTANCE-> 点击EDIT-> 前往部分Remote access并取消选中Enable connecting to serial ports。请记住,根据文档与串行控制台交互

警告:交互式串行控制台不支持基于 IP 的访问限制,例如 IP 白名单。如果您在实例上启用交互式串行控制台,客户端可以尝试从任何 IP 地址连接到该实例。如果知道正确的 SSH 密钥、用户名、项目 ID、区域和实例名称,任何人都可以连接到该实例。使用防火墙规则来控制对您的网络和特定端口的访问。

如果你无法通过串行控制台连接,尝试按照文档操作SSH 故障排除部分检查虚拟机实例而不关闭它在另一台虚拟机上检查虚拟机的磁盘. 您可以使用相同的方式将数据传输到另一个正在运行的 VM 实例。

相关内容