遇到 EC2 状态检查失败 2/2,最直接的恢复手段通常是停止实例后再启动,这能将实例迁移到健康的主机上,但需注意实例存储数据会丢失。
先说结论:状态检查 2/2 失败通常意味着底层硬件或网络宿主出现问题,单纯重启往往无效,建议优先执行停止再启动操作。
- 先确认:实例是否挂载了实例存储(Instance Store),停止操作会导致该存储数据丢失。
- 先处理:在控制台或通过 CLI 执行 Stop Instances 随后 Start Instances,而非 Reboot。
- 再验证:观察状态检查是否恢复为 2/2 passed,并测试 SSH 或业务端口连通性。
命令速用版
如果你习惯使用 AWS CLI,可以通过以下命令快速执行停止和启动操作。请替换 i-xxxxxxxxx 为你的实例 ID。
aws ec2 stop-instances `--instance-ids` i-xxxxxxxxx aws ec2 start-instances `--instance-ids` i-xxxxxxxxx
若需要查看具体的状态检查失败原因,可以获取系统日志:
aws ec2 get-console-output `--instance-id` i-xxxxxxxxx
注意:Linux 实例可直接查看日志末尾排查 Kernel Panic;Windows 实例日志可能受限,若无法登录且未保存密码,停止前请确保已获取或重置 Administrator 密码(使用 get-password-data)。
为什么会这样
EC2 的状态检查分为两种:系统状态检查(System Status Check)和实例状态检查(Instance Status Check)。
当显示 2/2 失败时,意味着两者均未通过。系统状态检查失败通常指向 AWS 底层硬件问题,如网络连通性丢失、电源问题或宿主服务器故障。实例状态检查失败则可能源于操作系统无法启动、网络配置错误或资源耗尽。两者同时失败,大概率是宿主硬件故障导致实例完全不可达,此时通常无法在操作系统内部进行修复,需依赖 AWS 层面迁移。
分步处理
按照以下顺序操作,风险由低到高,逐步排查:
1. 绑定弹性 IP(可选但推荐)
停止再启动后,如果没有绑定弹性 IP(EIP),实例的公网 IP 地址会发生变化。若业务依赖固定 IP,请先绑定 EIP。
aws ec2 associate-address `--instance-id` i-xxxxxxxxx `--allocation-id` eipalloc-xxxxxxxxx
2. 尝试停止再启动(Stop/Start)
这是解决硬件类故障最有效的方法。停止实例会将其从当前宿主服务器解除关联,启动时 AWS 会将其调度到新的健康宿主机上。
操作路径:EC2 控制台 > 实例状态 > 停止实例 > 等待完全停止 > 启动实例。
3. 检查系统日志
如果停止启动后问题依旧,需要判断是否为操作系统内部崩溃。在控制台选择实例,点击操作 > 监控和故障排除 > 获取系统日志。查看日志末尾是否有 Kernel Panic 或文件系统错误。
4. 检查卷和网络配置
确认根卷是否损坏。可以尝试将该卷挂载到另一台正常的实例上进行文件系统检查(fsck)。同时检查安全组是否误删了允许健康检查或 SSH 的规则,虽然这通常只导致 1/2 失败,但极端配置也可能影响启动流程。
5. 替换实例
如果上述方法均无效,且业务急需恢复,建议使用该实例的 AMI 镜像重新启动一台新实例。旧实例可保留用于后续数据取证。
怎么验证是否生效
执行完修复操作后,通过以下方式确认状态:
1. 控制台状态列
回到 EC2 实例列表,观察“状态检查”列。正常应显示“2/2 检查通过”。绿色表示恢复,红色表示仍失败。
2. 连通性测试
尝试 SSH 连接实例(Linux)或使用远程桌面(Windows)。如果能成功登录,说明实例状态检查已通过。
3. 业务端口检查
使用 curl 或 telnet 测试业务端口。例如:curl -I http://<实例公网 IP>。确保应用层服务已随系统启动。
常见坑
1. 混淆 Reboot 和 Stop/Start
重启(Reboot)只是在同一台宿主机上软重启操作系统,无法解决硬件故障。只有停止(Stop)再启动(Start)才会迁移宿主机。
2. 实例存储数据丢失
如果实例类型包含实例存储(如某些 m3、c3 或 i 系列旧型号),停止实例会导致该存储上的数据永久丢失。操作前务必确认实例类型和数据分布。
3. 公网 IP 变化
停止再启动后,如果没有绑定弹性 IP(EIP),实例的公网 IP 地址会发生变化。请提前确认业务是否依赖固定 IP,必要时先绑定 EIP。
4. 自动化脚本干扰
部分用户数据脚本(User Data)可能在启动时执行失败导致实例再次挂起。如果反复失败,尝试暂时禁用 User Data 脚本排查。
5. Windows 密码丢失
Windows 实例停止后,若未提前获取或保存 Administrator 密码,重新启动后可能无法解密登录密码。请务必在停止前备份密码。
参考来源
- AWS 官方文档 - 监控实例状态检查:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-system-instance-status-check.html
- AWS 官方文档 - 实例生命周期:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html