正常关机是一个有序的、由操作系统控制的流程,服务器“判断”自己要关机,是因为它收到了明确的指令。
触发源:
用户指令在操作系统内执行shutdown、poweroff、halt 等命令。
远程管理通过iDRAC、iLO、BMC等带外管理工具点击“关机”按钮。
系统计划任务例如设置了在特定时间自动关机。
应用程序请求某些集群软件或高可用软件可能会在特定条件下请求节点关机。
判断与执行流程:
服务器(实际上是操作系统)判断并执行关机的流程非常严谨:
1、接收信号:操作系统接收到关机指令(例如shutdown -h now)。
2、通知所有用户和进程:系统会向所有登录的用户发送“系统即将关闭”的警告信息,并阻止新的登录。
3、执行关机脚本:运行系统预定义的关机脚本(如 Systemd 的poweroff.target 或 SysVinit 的/etc/rc0.d/ 中的脚本),这些脚本会优雅地停止服务,
* 停止Web服务器(Nginx/Apache)
* 停止数据库(MySQL/PostgreSQL),确保数据完整性和事务完成。
* 解除挂载网络存储(NFS)
4、向所有进程发送终止信号:操作系统首先发送SIGTERM 信号,允许进程进行清理工作(如保存状态、关闭文件),如果进程在宽限期后仍未退出,则强制发送SIGKILL 信号。
5、同步数据并卸载文件系统:操作系统将所有缓存中的数据(在内存中)同步(写入)到硬盘,然后安全地卸载所有文件系统,这是防止数据损坏的关键步骤。
6、向内核发送关机指令:用户空间的进程全部结束后,初始化系统(如 Systemd)会通知内核执行最终的关机操作。
7、内核最后的工作:内核停止CPU,释放所有占用的资源,并记录最后的日志。
8、向硬件发送关机信号(ACPI):内核通过ACPI 向电源发送POWEROFF 信号,主板接收到这个信号后,切断对各个硬件的供电,服务器完成关机。
在正常关机中,服务器是“主动地”、“有准备地”判断并执行关机,核心是有序停止服务 -> 同步数据 -> 安全断电。
异常关机是服务器在未收到操作系统正常关机流程指令的情况下突然停止运行,这时,服务器本身无法“判断”自己关机了,因为它已经失能。监控系统和运维人员需要通过一些现象来“判断”服务器发生了异常关机。
常见原因:
市电断电且UPS(不间断电源)也已耗尽。
人为强制操作长按电源按钮(>4秒)强制断电,或直接拔掉电源线。
硬件故障电源(PSU)损坏、主板故障、严重过热导致硬件保护性断电。
操作系统内核严重错误(Kernel Panic / BSOD),导致系统完全锁死。
如何判断服务器发生了异常关机:
1、物理状态
指示灯服务器前面板的电源指示灯熄灭。
风扇和噪音服务器的风扇停止转动,运行的噪音消失。
2、网络可达性
Ping 不通从网络上的其他机器无法ping 通该服务器的IP地址。
端口无响应无法通过SSH、RDP或其他任何服务端口连接到服务器。
3、带外管理工具(最重要的判断手段)
* 通过独立的网络接口访问服务器的BMC(基板管理控制器),如 Dell 的 iDRAC、HPE 的 iLO、SuperMicro 的 IPMI。
* 即使服务器主机已断电,只要管理控制器有备用电源(通常由待机电源提供),它仍然可以访问。
* 在管理界面中,可以清晰地看到主机电源状态为“Off”,并且系统日志中会记录关机的原因,例如“AC lost” (交流电丢失)、“Power overload” (电源过载) 等,这是判断异常关机原因的最直接证据。
4、操作系统日志(在重启后查看)
* 服务器恢复后,查看系统日志(如 Linux 的/var/log/messages 或journalctl)。
* 在异常关机前,日志可能没有任何正常的关机记录,而是突然中断。
* 如果是因为内核恐慌,日志中可能会有最后的错误堆栈跟踪。
系统再次启动时,日志中通常会有这样的记录The system was shut down uncleanly on ... 或Unexpected power-off,文件系统也可能需要被检查(fsck)。
5、监控系统告警
* 专业的监控系统(如 Zabbix, Prometheus, Nagios)会检测服务器的“心跳”,如果服务器在预定时间内没有发送心跳包,监控系统会触发“失联” 或“超时” 告警,这通常意味着服务器已异常关机或网络完全中断。
| 特性 | 正常关机 | 异常关机 |
| 触发方式 | 有序的软件指令 | 意外的硬件断电或系统崩溃 |
| 数据安全 | 安全,数据已同步,服务已停止 | 危险,可能导致数据丢失或文件系统损坏 |
| 流程 | 有完整的关机流程(停止服务、同步、卸载) | 流程突然中断 |
| 日志记录 | 有完整的关机日志记录 | 日志突然中断,重启后有异常关机记录 |
| 判断依据 | 操作系统主动执行 | 通过物理状态、网络、带外管理和监控系统被动判断 |
对于运维人员来说,带外管理接口 是判断服务器状态(尤其是关机状态和原因)最可靠和强大的工具。
文章摘自:https://idc.huochengrm.cn/fwq/19269.html
评论