在Linux平台使用IPMI远程管理服务器


IPMI(Intelligent Platform Management Interface)

  • IPMI(Intel公司推出的远程管理解决方案),也 称为Baseboard Management Cards (BMCs) ,可以在服务器通电(没有启动操作系统)情况下对服务器进行远程管理。即智能平台管理接口是使硬件管理具备"智能化"的新一代通用接口标准。用户可以利用 IPMI 监视服务器的物理特征,如温度、电压、电扇工作状态、电源供应以及机箱入侵等。ipmi最大的优势在于它是独立于CPU BIOS和OS的,所以用户无论在开机还是关机的状态下,只要接通电源就可以实现对服务器的监控。ipmi是一种规范的标准,由美国英特尔、惠普(Hewlett-Packard)、NEC、美国戴尔电脑和SuperMicro等公司制定。新的版本是IPMI2.0(http://www.intel.com/design/servers/ipmi/)。其中最重要的物理部件就是BMC(Baseboard Management Controller),一种嵌入式管理微控制器,它相当于整个平台管理的"大脑",通过它ipmi可以监控各个传感器的数据并记录各种事件的日志。
  • 新版本的IPMI可以通过串口、Modem以及Lan等远程环境管理服务器系统(包括远程开关机),同时在系统发生错误时能自动发出警告。要对服务器进行IPMI管理,需要被监控的系统具有支持IPMI的硬件设备。如果服务器具有底板管理控制器 (Baseboard Management Controller ,BMC),并且支持IPMI规范,则通过BMC与主机板上的不同传感器通信来监视系统是否有严重事件,并在某些参数超出其预置阈值时发出警报和日志事件。BMC具有以下功能:
(1)通过系统的串行端口进行访问。
(2)故障日志记录和SNMP警报发送。
(3)访问系统事件日志 (System Event Log ,SEL) 和传感器状况。
(4)控制包括开机和关机。
(5)独立于系统电源或工作状态的支持。
(6)用于系统设置、基于文本公用程序和操作系统控制台的文本控制台重定向。
(7)使用LAN访问Red Hat Enterprise Linux串行控制台界面。

使用ipmi的先决条件

想要实现对服务器的ipmi管理,必须在硬件、OS、管理工具等几个方面都满足。

(1)服务器硬件本身提供对ipmi的支持。
(2)目前IBM、HP、Dell和NEC等大多数厂商的服务器都支持IPMI,但并不是所有服务器都支持,所以应该先通过产品手册或在BIOS中确定服务器是否支持ipmi,也就是说服务器在主板上要具有BMC等嵌入式的管理微控制器。
(3)操作系统提供相应的ipmi驱动。通过操作系统监控服务器自身的ipmi信息时需要系统内核提供相应的支持,linux系统通过内核对OpenIPMI(ipmi驱动)的支持来提供对ipmi的系统接口。

用IPMI管理工具对服务器进行管理

IPMI可以通过本地和远程两种方式来获取被监控服务器的监测信息,两种方式都需要相关的硬件,但是软件的安装和软件命令使用稍微有所不同。常用的管理工具是ipmitool。Linux下需要先安装OpenIPMI驱动并启动它。下载支持Windows平台的ipmitool,当前版本为1.8.10.2,集成的ipmi驱动有ism, ms, lan, lanplus, rmcp+lan等,其中ms表示Microsoft的ipmi驱动。注意驱动必须安装在服务器的OS中,管理工具可以安装服务器上(本地管理),或者远程的客户端上(远程管理)。

  • Linux上启动OpenIPMI驱动模块常用/etc/init.d/ipmi start。启动ipmi驱动后,通过cat /proc/devices | grep ipmidev获得设备号,比如得到的设备号是253,用mknod -m 600 /dev/ipmi0 c 253 0建立文件索引点。然后就可以在本地服务器上运行各种ipmi工具获取相应的服务器信息了。
  • ipmisi加载失败: 请查看“dmidecode” ,了解 BMC/IPMI 设备信息。DMIDECOE ex: Handle 0x003B DMI type 38, 18 bytes IPMI 设备信息 接口类型: KCS(键盘控制类型)规范版本: 2.0 I2C 从地址: 0x10 NV 存储设备:不存在 基本地址:0x0000000000000CA2 (I/O)注册空间: 连续的字节边界 通过该信息,收集接口类型和基本地址。 然后,按以下方式加载模块:modprobe ipmisi type=kcs ports=0xca2 (其中type 为接口类型,port 为基本地址)。
  • Dell的 Baseboard Management Controller (BMC) 是IPMI的一个实现。该BMC可以通过主板集成的第一块网卡实现网络管理。并且这个BMC管理IP是独立的IP地址(需要单独占用)。
  • 在设置 IPMI时,建议先在主机前设置,因为多数IPMI命令关闭主机时也会杀掉BMC,这样需要手工按电源开关启动服务器,只有确实完成了所有设置,则不再需 要现场操作。为实现管理,需要一个Linux主机安装IPMI命令包来发出IPMI指令,在其他操作系统平台,也有类似IPMI软件包。

Dell服务器实现

  • Dell服务器在1850/2850系列中,实现了IPMI v1.5规范,也就是能够通过ipmi指令来关闭和重启服务器,但是不能ipmi控制台登录。
  • Dell服务器在1950/2950之后,实现了IPMI v2.0规范,不仅能够远程重启服务器,并且能够通过ipmi控制台,远程维护服务器(即使操作系统死机,ssh网络无法登录),控制台重定向到ipmi控制台(这样可以远程连接服务器,就像连接了键盘和显示器),对于我们故障抢修有很大帮助。
  • 唯一要求的是,在系统实施的时候,要提前设置:
  • BIOS中设置好串口控制台重定向(如果这一步不设置,则启动时BIOS信息不能查看,但仍然可以使用IPMI远程管理)服务器启动时设置Remote Access IP和帐号密码用于IPMI管理
  • 这个步骤也可以在操作系统中通过命令来实现。也就是说,即使一些服务器已经安装部署了,不方便再出差去调整配置,只要我们能够远程ssh登录到操作系统,仍然可以通过软件的方式来开启IPMI管理。
  • 建议在实施的时候,提前设置好IPMI配置,并验证使用。毕竟远程设置存在一些风险。另外,在设置前,先在本地做好详尽测试,确保设置无误。

配置IPMI(BMC)远程工作有两种方式配置IPMI

  • 一种是启动服务器时进入Remote Access Setup系统(BIOS 启动自检),可以激活IPMI远程访问;
  • 另一种方式是安装了Linux操作系统,在Linux操作系统中使用ipmitool来设置(前提是已经加载了一 些ipmi内核模块)。

BIOS启动时设置

在BIOS启动最后阶段,按下ctrl-e进 入Remote Access
Setup管理界面,并激活IPMI远程访问
激活IPMI Over LAN
激活时会提示BMC Management traffic will not function properly if the LAN on Motherboad (LOM) is teamed with any network adapter add-in-cards,这表明如果主板上网卡和附加网卡 bonding时,IPMI功能将失效。
NIC Seclection设置默认是Shared状 态,另外两种状态是Shared-Failover和Dedicated where applicable
LAN Parameters设置
IP Address Source默认是Static静 态分配方式,另一种模式为DHCP模式。通常IPMI为了能够管理,设置静态地址较好。
Etnernet IP Address设置为192.168.8.213
Subnet Mask设置为255.255.255.0
Default Gateway根 据情况设置。要保证设置了默认网关后,能够通过IPMI方式访问服务器的管理主机的访问是有限制的和安全的,否则会存在安全隐患。
VLAN Enable默认没有激活,或许适合在复杂的VLAN网络中使用。
LAN User Configuration是重要设置,保障IPMI访问安全
Account Access默 认激活
Account Privilege默认权限是Admin
Account User Name默认用户名是root
设置访问密码

操作系统上使用 ipmitool 命令设置IPMI

检查服务器是否支持ipmi: dmidecode|grep -A7 IPMI
安装ipmitool
Centos:
需要安装 OpenIPMI OpenIPMI-tools OpenIPMI-libs 和 OpenIPMI-devel 软件包。安装完成后可以实现所有功能。
安装OpenIPMI
# yum install OpenIPMI
安装 OpenIPMI-tools
yum install OpenIPMI-tools
启动服务
/sbin/service ipmi start
Ubuntu:
apt-get install ipmitool

检查ipmi模块是否加载成功:
lsmod |grep ipmi
ipmi_devintf           17707  0
ipmi_si                53548  0
ipmi_msghandler        45838  2 ipmi_devintf,ipmi_si
3个表示成功.
手动加载:
modprobe ipmi_si
modprobe ipmi_devintf

设置IPMI (配置好IPMI的网络,使得可以远程控制)

lan set 1 ipsrc static   //设置静态IP
ipmitool -I open lan set 1 ipaddr 192.168.8.213
ipmitool -I open lan set 1 netmask 255.255.255.0
ipmitool -I open lan set 1 access on    //需要允许访问
如果需要设置网关,则输入以下命令
ipmitool -I open lan set 1 defgw ipaddr 192.168.8.1
加强BMC安全,这样非授权用户才不会重启服务器。
修改默认的SNMP通讯串
ipmitool -I open lan set 1 snmp COMUNIATION
设置null用户的密码
ipmitool -I open lan set 1 password PASSWD
设置root用户密码
ipmitool -I open user set password 2 PASSWD
检查配置(在服务器上本地执行)
ipmitool -I open lan print 1
ipmitool命令需要通过相应的interface来访问BMC,在本地获取信息时候采用的是-I open,即为OpenIPMI接口,IPMItool命令包含的接口有open、lan、lanplus。
其中open是指的是OpenIPMI与BMC通信
lan是通过Ethernet LAN网用IPV4的udp协议与BMC通信。UDP的数据段包含了IPMI request/resoponse消息,消息具有一个IPMI session头和RMCP头。IPMI使用Remote Management Control Protocol (RMCP) 版本1支持操作系统关闭(pre-OS和OS-absent),RMCP把把数据发送到UDP的623端口。
像lan接口一样,lanplus同样使用Ethernet LAN的UDP协议与BMC通信,但是lanplus使用rmcp+协议(在IPMIV2.0中描述)来通信,RMCP+允许使用改经的认证方式和数据完整性检查。Open端口用于本地监控系统使用的;lan/lanplus通过网络进行远程监控。
远程获取服务器监控信息时,需要加上远程服务器的地址。使用以下的命令格式:
ipmitool -H 10.6.77.249 -U root -P changeme -I lan command。
其中-H表示后面跟的是服务器的地址,-U表示后面跟着用户名,-P表示后面跟着用户密码,command与本地获取信息相同。
# ipmitool -I lan -H 服务器地址 -U root -P 密码 power off (硬关机,直接切断电源)
# ipmitool -I lan -H 服务器地址 -U root -P 密码 power soft (软关机,即如同轻按一下开机扭)
# ipmitool -I lan -H 服务器地址 -U root -P 密码 power on (硬开机)
# ipmitool -I lan -H 服务器地址 -U root -P 密码 power reset (硬重启)
# ipmitool -I lan -H 服务器地址 -U root -P 密码 power status (获取当前电源状态)
ipmitool -I open sensor list命令可以获取传感器中的各种监测值和该值的监测阈值,包括(CPU温度,电压,风扇转速,电源调制模块温度,电源电压等信息)
ipmitool -I open sensor get "CPU0Temp"可以获取ID为CPU0Temp监测值,CPU0Temp是sensor的ID,服务器不同,ID表示也不同。
ipmitool -I open sensor thresh <id> <threshold> <setting>设置ID值等于id的监测项的各种限制值。
ipmitool -I open chassis restart_cause查看上次系统重启的原因
ipmitool -I open sel list 显示系统日志(sel, system event log)
ipmitool -I open chassis power cycle  重启目标服务器

ipmi端口镜像

BIOS串口重定向

要 让控制台能够从IPMI网络输出,需要同时配置BIOS, GRUB 和 ttyS1 以从IPMI网络输出。注意:COM2/ttyS1是 逻辑的(mandatory),可能并不适合使用COM1/ttyS0。
重新启动服务器,按F2访 问BIOS,在Serial Communication菜单设置:
设置 Serial Communication 为 On with Console Redirection via COM2
设置 External Serial Connector 为 COM2
设置 Failsafe Baud Rate 为 115200(这个设置似乎不影响)
设置 Remote Terminal Type 为 VT100/VT220
设置 Set Redirection After Boot 为 Enabled

以 上设置完成后,一旦服务器重启,就可以使用以下命令
ipmitool -I lanplus -H 192.168.8.213 -U root -P password sol activate
访问服务器。服务器启动的BIOS自检信息将在终端中输出。并且,可以使用IPMI方式,在远程终端中查看和设置BIOS信息(虚拟 kvm)不过,启动到操作系统级别后,控制台输出将不走IPMI。因为,尚没有设置grub 的串口输出.

Grub串口重定向

一些服务器可以实现将原来串口输出的内容镜像到IPMI接口上。在启动的grub.conf中添加:
default=0
timeout=10
#for IPMI Setup serial (COM2) ,不过不要设置以下串口配置!!!(仅作参考)
# 按照参考文档,在这里需要设置串口的速率。但是我在实践中发现,一旦设置了串口配置,
# 启动时就必须在GRUB提示"Press any key to continue"时在主机前的键盘或者远程ipmi控制台按一下回车键。
# 如果没有按回车键,系统就会挂在那里。等到超时以后,不论主机键盘或ipmi控制台都没有响应,只能reset电源重启,非常麻烦。
# serial --unit=1 --speed=57600 --word=8 --parity=no --stop=1
# terminal --timeout=5 serial console
#splashimage=(hd0,0)/boot/grub/splash.xpm.gz

hiddenmenu
title CentOS (2.6.18-164.11.1.el5PAE)
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-164.11.1.el5PAE ro root=LABEL=/1 console=tty0 console=ttyS1,57600n8
initrd /boot/initrd-2.6.18-164.11.1.el5PAE.img

并且在/etc/inittab中的6个mingetty行下添加
S1:2345:respawn:/sbin/agetty ttyS1 57600 vt100
注意:控制台重定向的bit率要设置为57600!
已经测试,设置为115200/9600会导致一旦grub开始输出控制台,则ipmitool中输出的都是乱字符。如果设置为19200,启动到中途会挂起,即不继续 启动,也没有输出。
控制台连接
联机服务器
ipmiconsole -h 192.168.8.213 -u root -p PASSWORD
或者使用
ipmitool -I lanplus -H 10.0.99.x -U login -P password sol activate