简 介

在维护过程中,服务器难免会死机,此时如果服务器远在“天边”,“千里奔波”只是为了按一下电钮,不仅“劳命伤财”,也不符合SA“决胜千里 之外”的风格。
此时,我们希望做到:

  • 一条命令重启(启动/关闭)服务器
  • 一条命令检查服务器状态
  • (远程)终端诊断启动问题,解决ssh服务无法访问的问题

解决的方案是采用IPMI(Intel公司推出的远程管理解决方案),也 称为Baseboard Management Cards (BMCs) ,可以在服务器通电(没有启动操作系统)情况下对服务器进行远程管理。

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-FailoverDedicated 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

/usr/bin/ipmitool -I open lan set 1 ipaddr 192.168.8.213
/usr/bin/ipmitool -I open lan set 1 netmask 255.255.255.0
/usr/bin/ipmitool -I open lan set 1 access on

如果需要设置网关,则输入以下命令

/usr/bin/ipmitool -I open lan set 1 defgw ipaddr 192.168.8.1
  • 加强BMC安全,这样非授权用户才不会重启服务器。为做到这点,首先是需要修改默认的SNMP通讯串,null用 户密码,以及root用户密码。
/usr/bin/ipmitool -I open lan set 1 snmp COMUNIATION
  • 设置null用户的密码
/usr/bin/ipmitool -I open lan set 1 password PASSWD
  • 设置root用户密码
/usr/bin/ipmitool -I open user set password 2 PASSWD
  • 检查配置(在服务器上本地执行)
ipmitool -I open lan print 1

操作系统准备

  • 安装 IPMItool 和启动脚本

在Redhat Enterprise服务器需要安装 OpenIPMI OpenIPMI-tools OpenIPMI-libsOpenIPMI-devel 软件包。安装完成后可以实现所有功能。

# yum install OpenIPMI
  • 安装 OpenIPMI-tools
yum install OpenIPMI-tools
  • 启动服务
/sbin/chkconfig ipmi on
/sbin/service ipmi start
  • 安装freeipmi,该软件包包含 ipmiconsole
yum install freeipmi

Gentoo平台安装IPMI软件包

http://en.gentoo-wiki.com/wiki/Dell_PowerEdge_2950_III 提供了有关在Dell PowerEdge 2950 III安装gentoo的资料,也提供了IPMI安装介绍

  • 内核要求(注意客户机和服务器都需要支持)。不过,客户端不需要启动ipmievd服务,因为缺少设备/dev/ipmi0 /dev/ipmi/0 /dev/ipmidev/0
Device Drivers  --->
 Character devices  --->
  <M> IPMI top-level message handler  --->
   [*]   Generate a panic event to all BMCs on a panic
   [*]     Generate OEM events containing the panic string
   <M>   Device interface for IPMI
   <M>   IPMI System Interface handler
   <M>   IPMI Watchdog Timer
   <M>   IPMI Poweroff
  • 安装IPMI软件包
emerge -avb sys-apps/ipmitool sys-libs/openipmi sys-libs/freeipmi
rc-update add ipmievd default;

启动ipmievd报错信息表明系统没有支持ipmi功能模块(不过客户机不需要启动此服务)

ipmievd: using pidfile /var/run/ipmievd.pid0
Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or directory
Unable to open interface
* start-stop-daemon: failed to start `/usr/sbin/ipmievd' [ !! ]
* ERROR: ipmievd failed to start

ipmitool

检查当前配置

[root@ws02 ~]# ipmitool -I open lan print 1
Set in Progress : Set Complete
Auth Type Support : NONE MD2 MD5 PASSWORD
Auth Type Enable : Callback : MD2 MD5
: User : MD2 MD5
: Operator : MD2 MD5
: Admin : MD2 MD5
: OEM : MD2 MD5
IP Address Source : Static Address
IP Address : 192.168.8.213
Subnet Mask : 255.255.255.0
MAC Address : 00:1e:4f:36:ef:9f
SNMP Community String : public
IP Header : TTL=0x40 Flags=0x40 Precedence=0x00 TOS=0x10
Default Gateway IP : 0.0.0.0
Default Gateway MAC : 00:00:00:00:00:00
Backup Gateway IP : 0.0.0.0
Backup Gateway MAC : 00:00:00:00:00:00
802.1q VLAN ID : Disabled
802.1q VLAN Priority : 0
RMCP+ Cipher Suites : 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14
Cipher Suite Priv Max : aaaaaaaaaaaaaaa
: X=Cipher Suite Unused
: c=CALLBACK
: u=USER
: o=OPERATOR
: a=ADMIN
: O=OEM

  • 客户端远程检查服务器状态
ipmitool -I lan -H 192.168.8.213 -U root -a chassis power status

使用ipmitool

  • 可以设置一个环境变量 IPMI_PASSWORD ,该环境变量就是你使用的密码。
export IPMI_PASSWORD="PASSWORD"

然后在使用时,只要使用参数 -a 就可以使用以上密码。

  • 以下命令检查目标服务器是否启动
/usr/bin/ipmitool -I lan -U root -H 10.1.1.34 -a chassis power status

则可能获取到如下信息
Chassis Power is on
如果没有收到任何信息,则检查BMC是否设置正确,是否使用正确密码,以及IP地址。特别检查 Ctrl-E 启动菜单。

  • 关闭目标服务器电源
/usr/bin/ipmitool -I lan -U root -H 10.1.1.34 -a chassis power off
  • 重启目标服务器
/usr/bin/ipmitool -I lan -U root -H 10.1.1.34 -a chassis power cycle
  • 显示目标服务器的系统日志(sel, system event log)
/usr/bin/ipmitool -I lan -U root -H 10.1.1.34 -a sel list

ipmi端口镜像

BIOS串口重定向

参考 http://bgoglin.livejournal.com/13317.html
要 让控制台能够从IPMI网络输出,需要同时配置 BIOS, GRUB 和 ttyS1 以从IPMI网络输出。注意:COM2/ttyS1是 逻辑的(mandatory),可能并不适合使用COM1/ttyS0
重新启动服务器,按F2访 问BIOS,在Serial Communication菜单设置:

  • 设置 Serial CommunicationOn with Console Redirection via COM2
  • 设置 External Serial ConnectorCOM2
  • 设置 Failsafe Baud Rate115200(这个设置似乎不影响)
  • 设置 Remote Terminal TypeVT100/VT220
  • 设置 Set Redirection After BootEnabled

以 上设置完成后,一旦服务器重启,就可以使用以下命令

ipmitool -I lanplus -H 192.168.8.213 -U root -P password sol activate

访问服务器。
服务器启动的BIOS自检信息将在终端中输出。并且,可以使用IPMI方式,在远程终端中查看和设置BIOS信息(虚拟 kvm)

不过,启动到操作系统级别后,控制台输出将不走IPMI。因为,尚没有设置grub 的串口输出(见下配置)。

Grub串口重定向

参考: http://www.webhostingtalk.com/archive/index.php/t-439550.html
一 些服务器可以实现将原来串口输出的内容镜像到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

参考