IPMI(Intelligent Platform Management Interface)是一种独立于操作系统的服务器硬件管理接口标准,通过独立的带外管理芯片(BMC)实现服务器远程监控、电源控制和故障恢复。与SSH等带内管理方式不同,IPMI在操作系统崩溃或网络协议栈异常的情况下仍可正常工作,是数据中心服务器高可用运维的关键基础设施。
IPMI协议架构与BMC芯片工作原理
IPMI规范定义了一套完整的带外管理通信架构。BMC(Baseboard Management Controller)是焊接在服务器主板上的独立微控制器,拥有独立的网络接口和电源供应。即使服务器处于关机状态,只要电源线接通,BMC就能持续运行。
IPMI通信链路包含以下层次:
– 物理层:BMC专用网口或共享系统网口(NC-SI)
– 传输层:IPMI over LAN(UDP 623端口)或KCS/K-Bus本地接口
– 会话层:RMCP+协议封装,支持加密码认证
– 命令层:IPMI命令集,涵盖传感器读取、电源控制、事件日志等
主流服务器厂商的带外管理实现都基于IPMI标准,但各自有扩展品牌:Dell iDRAC、HP iLO、Lenovo XCC、Supermicro IPMI。不同厂商的实现细节和Web管理界面不同,但底层命令接口兼容。
ipmitool工具安装与基础操作
ipmitool是IPMI命令行的标准工具,在Linux系统上通过包管理器安装:
# CentOS/RHEL
yum install -y OpenIPMI ipmitool
# Ubuntu/Debian
apt install -y ipmitool
# 加载内核模块
modprobe ipmi_devintf
modprobe ipmi_si
modprobe ipmi_msghandler
配置BMC网络。进入服务器BIOS或通过本地KCS接口设置BMC IP:
# 查看BMC网络配置
ipmitool lan print 1
# 设置BMC静态IP
ipmitool lan set 1 ipsrc static
ipmitool lan set 1 ipaddr 192.168.10.100
ipmitool lan set 1 netmask 255.255.255.0
ipmitool lan set 1 defgw ipaddr 192.168.10.1
# 创建管理员账户
ipmitool user set name 3 opsadmin
ipmitool user set password 3 "Str0ngP@ss!"
ipmitool user enable 3
ipmitool channel setaccess 1 3 callin=on ipmi=on link=on privilege=4
# 启用加密通信
ipmitool lan set 1 auth ADMIN MD5
ipmitool lan set 1 cipher_privs XaaaXXaaaXXaaXX
远程连接BMC执行管理操作:
# 通过网络远程执行命令
ipmitool -I lanplus -H 192.168.10.100 -U opsadmin -P "Str0ngP@ss!" chassis status
# 查看服务器电源状态
ipmitool -I lanplus -H 192.168.10.100 -U opsadmin -P "Str0ngP@ss!" power status
# 远程开机/关机/硬重启
ipmitool -I lanplus -H 192.168.10.100 -U opsadmin -P "Str0ngP@ss!" power on
ipmitool -I lanplus -H 192.168.10.100 -U opsadmin -P "Str0ngP@ss!" power off
ipmitool -I lanplus -H 192.168.10.100 -U opsadmin -P "Str0ngP@ss!" power reset
硬件状态监控:温度、电源与风扇
IPMI通过SDR(Sensor Data Record)定义传感器信息,通过读取传感器数值监控服务器硬件健康状态:
# 列出所有传感器
ipmitool -I lanplus -H 192.168.10.100 -U opsadmin -P "Str0ngP@ss!" sensor list
# 过滤温度传感器
ipmitool -I lanplus -H 192.168.10.100 -U opsadmin -P "Str0ngP@ss!" sensor list | grep -i temp
# 查看风扇转速
ipmitool -I lanplus -H 192.168.10.100 -U opsadmin -P "Str0ngP@ss!" sensor list | grep -i fan
# 查看电源功耗
ipmitool -I lanplus -H 192.168.10.100 -U opsadmin -P "Str0ngP@ss!" dcmi power reading
# 查看系统事件日志(SEL)
ipmitool -I lanplus -H 192.168.10.100 -U opsadmin -P "Str0ngP@ss!" sel list
# 查看SEL详细信息
ipmitool -I lanplus -H 192.168.10.100 -U opsadmin -P "Str0ngP@ss!" sel elist
自动化监控脚本示例,定期采集温度和功耗数据并输出告警:
#!/bin/bash
# ipmi_monitor.sh - 服务器硬件状态监控
BMC_IP="192.168.10.100"
BMC_USER="opsadmin"
BMC_PASS="Str0ngP@ss!"
TEMP_THRESHOLD=75 # CPU温度告警阈值(℃)
FAN_THRESHOLD=1000 # 风扇转速下限(RPM)
# 读取CPU温度
cpu_temp=$(ipmitool -I lanplus -H $BMC_IP -U $BMC_USER -P $BMC_PASS sensor reading "CPU1 Temp" 2>/dev/null | awk '{print $1}')
if (( $(echo "$cpu_temp > $TEMP_THRESHOLD" | bc -l) )); then
echo "[ALERT] CPU温度过高: ${cpu_temp}°C (阈值: ${TEMP_THRESHOLD}°C)"
# 触发告警通知
curl -s -X POST "https://alert.example.com/api/notify" -d "host=$BMC_IP&type=temperature_overload&value=$cpu_temp"
fi
# 读取功耗
power=$(ipmitool -I lanplus -H $BMC_IP -U $BMC_USER -P $BMC_PASS dcmi power reading 2>/dev/null | grep "Instantaneous reading" | awk '{print $4}')
echo "$(date +%Y-%m-%d_%H:%M:%S) Power: ${power}W Temp: ${cpu_temp}C"
自动故障恢复:看门狗定时器与远程重启
IPMI硬件看门狗定时器(Watchdog Timer)是实现服务器自动故障恢复的核心机制。操作系统定期”喂狗”(重置计时器),当系统挂起或内核崩溃导致喂狗中断时,BMC会在超时后自动触发硬件级重启。
# 查看当前看门狗状态
ipmitool -I lanplus -H 192.168.10.100 -U opsadmin -P "Str0ngP@ss!" mc watchdog get
# 配置看门狗定时器
# 动作:硬复位,超时:300秒,预超时中断:启用
ipmitool -I lanplus -H 192.168.10.100 -U opsadmin -P "Str0ngP@ss!" mc watchdog set -d 300 -a reset -p pre_timeout=30,interval=1
# 启动看门狗
ipmitool -I lanplus -H 192.168.10.100 -U opsadmin -P "Str0ngP@ss!" mc watchdog start
在操作系统侧配置看门狗守护进程,确保系统正常时持续喂狗:
# 安装看门狗守护进程
yum install -y watchdog
# 配置 /etc/watchdog.conf
cat > /etc/watchdog.conf << 'EOF'
ping = 192.168.10.1
interface = eth0
timeout = 20
interval = 5
logtick = 60
file = /var/log/messages
change = 1407
EOF
# 启动服务
systemctl enable watchdog
systemctl start watchdog
结合IPMI的chassis bootdev命令实现PXE恢复启动。当看门狗触发重启后,可引导进入恢复模式:
# 设置下次启动从PXE引导
ipmitool -I lanplus -H 192.168.10.100 -U opsadmin -P "Str0ngP@ss!" chassis bootdev pxe
# 设置永久从PXE引导
ipmitool -I lanplus -H 192.168.10.100 -U opsadmin -P "Str0ngP@ss!" chassis bootdev pxe persistent
IPMI与Zabbix监控告警联动
将IPMI传感器数据接入Zabbix监控平台,实现集中告警和可视化。Zabbix原生支持IPMI监控项:
# 在Zabbix主机配置中添加IPMI接口
# Host -> IPMI tab:
# IPMI IP: 192.168.10.100
# IPMI Port: 623
# Username: opsadmin
# Password: Str0ngP@ss!
# 创建IPMI监控项(Item)
# Type: IPMI Agent
# IPMI Sensor: CPU1 Temp
# Key: ipmi.cpu1_temp
# Type: Numeric (float)
# Units: °C
# Update interval: 30s
# 创建触发器(Trigger)
# Expression: {host:ipmi.cpu1_temp.last()} > 75
# Severity: High
# Name: CPU1温度超过75°C
批量管理多台服务器IPMI时,推荐使用ipmiutil或freeipmi工具替代ipmitool,支持批量扫描和配置。配合Ansible Playbook可实现数百台服务器IPMI配置的自动化推送。
安全方面需要注意:BMC固件定期更新以修复已知漏洞;管理网络与业务网络物理隔离或VLAN隔离;禁用默认账户admin/admin;限制BMC管理IP白名单;启用IPMI v2.0 lanplus协议的AES加密通信。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/ipmi-fu-wu-qi-dai-wai-guan-li-shi-zhan-yuan-cheng-jian-kong/