インフラ ハードウエア サーバ

IPMIのご紹介

インフラ ハードウエア サーバ

IPMIのご紹介

技術部プラットフォームグループ 馬崎です。

普段皆さんがお使いの「パソコン」になくて「サーバー」にあるものと言えば何を思い浮かべますか?大量のメモリ?CPUが複数搭載できる?ストレージを大量に接続できるRAIDコントローラ?

いろいろな違いがありますが、サーバーに物理的に触れる事のある方は「IPMI」の存在を挙げる人も多いのではないでしょうか。

IPMI?ナニソレ?となったあなたにこの記事を贈ります。

1. IPMIとは?

サーバーを扱うものの強い味方、サーバーの上の管理人。

名前は Intelligent Platform Management Interface の頭文字を取ったものです。

BMC(Baseboard Management Controller)というチップセットを中心に、ファンなどの個別のユニットや温度センサーなどに対する接続、それらの情報取得や設定変更を行うためのインターフェースなど、複数の機能を包括した仕様の総体がIPMIです。IPMIを拡張してサーバーメーカーが各社で独自に実装している機能もありますが、本記事ではこれらもまとめてIPMIとして扱います。

サーバーメーカーの実装として代表的ものはDell社iDRAC, Supermicro社のiBMC, HPE社のiLo, IBM社のIMMなどです。さまざまなサーバー製品があれど、CPUやメモリ、SSDなどのパーツは結局は同じパーツを採用していることが多く、各社の独自性として目立たないけれど大きなポイントとなっており、ユーザー側から見ても大きな要素です。

IPMI機能はマザーボード上にチップセットとして実装されており、本体のCPUやメモリからは独立して一つの完結したコンピューターとしてふるまいます。サーバーの中に管理のためだけの小さなサーバーが入っているとイメージすると分かりやすいかと思います。

独立しているというのが肝で、サーバー本体が高負荷の場合や、なんらかの障害でOSの操作が困難になった際にIPMIを経由して直接ハードウエアを操作する事で、遠隔地のデータセンターに置いてあるサーバーでも、まるで手元にあるように対応ができます。この機能に助けられたサーバー管理者は多いのではないでしょうか。もちろん私もその一人です。

2. IPMIの利用について

基本的なサーバーでは、電源投入後、OSの起動前にシステム設定メニューを立ち上げ、そこでIPMIのネットワーク設定を行うことでネットワーク経由での接続ができるようになります。

IPMIへの接続ができていると電源の停止やデータ消去なども容易にできるようになるため、ペパボではインターネットに接続する回線とは分離したクローズドなネットワークに構築しています。

2-1. ブラウザーからの利用

IPアドレスを設定し、IPMI用のネットワークに接続することでブラウザーからもIPMIの利用ができます。このブラウザーでの表示は前述のサーバーメーカーごとの独自拡張された部分です。

ipmi_browser.png

サーバー電源のon/offやサーバー各所についているLEDランプの制御、ファンの回転数制御や搭載パーツの管理確認、一部設定変更やのBIOSやファームウエアの更新、ハードウエアの監視やログ、温度管理に電源管理などなど。多様な機能へのアクセスが可能です。

また、リモートコンソール機能という仮想のモニター・キーボード・マウスを直接サーバーに接続して操作できる機能があり、いざというときの操作に活躍しています。

2-2. CLIからの利用(ipmitoolコマンド)

コマンドラインからの利用も可能です。ペパボでもサーバーで利用しているLinuxではipmitoolというコマンドが提供されており、UbuntuやCentOSの場合パッケージ管理ツール(apt, yum)から導入も可能です。

ipmitoolコマンドからもさまざまな操作が可能で基本的な記述方法は 以下の通りです。

ipmitool -I <インターフェース> -H <接続先のアドレス> -U <user> -P <password> <コマンド> <オプション>

また、自身のサーバに搭載されたIPMIへの接続を行う場合、openipmiパッケージで提供されているサービスが動作している場合、 /dev/ipmiX を経由して接続するため、接続情報を省いてアクセス可能です。

help で利用可能なコマンドが確認できます。沢山ありますね。

masaki@server:~$ ipmitool help
Commands:
	raw           Send a RAW IPMI request and print response
	i2c           Send an I2C Master Write-Read command and print response
	spd           Print SPD info from remote I2C device
	lan           Configure LAN Channels
	chassis       Get chassis status and set power state
	power         Shortcut to chassis power commands
	event         Send pre-defined events to MC
	mc            Management Controller status and global enables
	sdr           Print Sensor Data Repository entries and readings
	sensor        Print detailed sensor information
	fru           Print built-in FRU and scan SDR for FRU locators
	gendev        Read/Write Device associated with Generic Device locators sdr
	sel           Print System Event Log (SEL)
	pef           Configure Platform Event Filtering (PEF)
	sol           Configure and connect IPMIv2.0 Serial-over-LAN
	tsol          Configure and connect with Tyan IPMIv1.5 Serial-over-LAN
	isol          Configure IPMIv1.5 Serial-over-LAN
	user          Configure Management Controller users
	channel       Configure Management Controller channels
	session       Print session information
	dcmi          Data Center Management Interface
	nm            Node Manager Interface
	sunoem        OEM Commands for Sun servers
	kontronoem    OEM Commands for Kontron devices
	picmg         Run a PICMG/ATCA extended cmd
	fwum          Update IPMC using Kontron OEM Firmware Update Manager
	firewall      Configure Firmware Firewall
	delloem       OEM Commands for Dell systems
	shell         Launch interactive IPMI shell
	exec          Run list of commands from file
	set           Set runtime variable for shell and exec
	hpm           Update HPM components using PICMG HPM.1 file
	ekanalyzer    run FRU-Ekeying analyzer using FRU files
	ime           Update Intel Manageability Engine Firmware
	vita          Run a VITA 46.11 extended cmd

ブラウザーから操作した方が機能が豊富なため、私はIPMIそのものが高負荷になった際のリセットに使う程度でメインはブラウザーからの操作ですが、コマンドラインで完結するためバッチ処理などと併用した監視などにも活用できます。

また、ハードウエアのエラーログなどが記録されるシステムイベントログの閲覧やパーツごとの温度やファンの回転数、消費電力がわかるセンサーへのアクセス、サーバー本体の電源状態やon/off、筐体のシリアル番号などを調べる事もできます。

以下にコマンドの実行例を記載します

  • IPMIをリセット mc reset IPMIはサーバーから独立しているため、サーバーのOS動作に影響はありません。
    • 時にはipmi機能が高負荷で反応が遅くなる時があります。そんな時は外部からipmiのリセットを実施します。
       masaki@server:~$ ipmitool -H <HOSTNAME> -U <user> -P <password> mc reset cold
      
  • サーバーの電源状態を調べて操作したいときに利用する power
    • 特定のサーバーが外部から操作できない。まずは電源の状況を確認したいので調べてみよう、という時に。
       # 確認
       masaki@server:~$ ipmitool -H <HOSTNAME> -U <user> -P <password> power status
       Chassis Power is on
      
    • 電源は入っているが依然として一切の操作を受け付けてくれない……kernel panicなどを起こしている可能性もあるので再起動しよう、という時に。
       # 強制的な電源再起動
       masaki@server:~$ ipmitool -H <HOSTNAME> -U <user> -P <password> power reset
      
  • 特定のファンの回転数などの情報を調べるときに利用する sensor
    • CPU2で温度のアラートが発生した。ちゃんと冷えていないんだろうかと思いファンの状態を確認したい、という時に。
       # ファン全体を見る
       masaki@server:~$ ipmitool -H <HOSTNAME> -U <user> -P <password> sensor | grep -iE ^fan
       Fan1A            | 9600.000   | RPM        | ok    | na        | 600.000   | 960.000   | na        | na        | na
       Fan1B            | 8880.000   | RPM        | ok    | na        | 600.000   | 960.000   | na        | na        | na
       Fan2A            | 9960.000   | RPM        | ok    | na        | 600.000   | 960.000   | na        | na        | na
       Fan2B            | 8880.000   | RPM        | ok    | na        | 600.000   | 960.000   | na        | na        | na
       Fan3A            | 9600.000   | RPM        | ok    | na        | 600.000   | 960.000   | na        | na        | na
       Fan3B            | 8760.000   | RPM        | ok    | na        | 600.000   | 960.000   | na        | na        | na
       Fan4A            | 9480.000   | RPM        | ok    | na        | 600.000   | 960.000   | na        | na        | na
       Fan4B            | 8880.000   | RPM        | ok    | na        | 600.000   | 960.000   | na        | na        | na
       Fan5A            | 9360.000   | RPM        | ok    | na        | 600.000   | 960.000   | na        | na        | na
       Fan5B            | 8760.000   | RPM        | ok    | na        | 600.000   | 960.000   | na        | na        | na
       Fan6A            | 9600.000   | RPM        | ok    | na        | 600.000   | 960.000   | na        | na        | na
       Fan6B            | 8880.000   | RPM        | ok    | na        | 600.000   | 960.000   | na        | na        | na
       Fan7A            | 9720.000   | RPM        | ok    | na        | 600.000   | 960.000   | na        | na        | na
       Fan7B            | 8760.000   | RPM        | ok    | na        | 600.000   | 960.000   | na        | na        | na
       Fan8A            | 9480.000   | RPM        | ok    | na        | 600.000   | 960.000   | na        | na        | na
       Fan8B            | 8880.000   | RPM        | ok    | na        | 600.000   | 960.000   | na        | na        | na
      
    • CPU2に一番風を送っているファンは4Aだったので詳細に調べてみよう、という時に。
       # 特定のファン(例では4A)の詳細情報を見る
       masaki@server:~$ ipmitool -H <HOSTNAME> -U <user> -P <password> sensor get Fan4A
       Locating sensor record...
       Sensor ID              : Fan4A (0x3b)
        Entity ID             : 7.1
        Sensor Type (Threshold)  : Fan
        Sensor Reading        : 9480 (+/- 120) RPM
        Status                : ok
        Lower Non-Recoverable : na
        Lower Critical        : 600.000
        Lower Non-Critical    : 960.000
        Upper Non-Critical    : na
        Upper Critical        : na
        Upper Non-Recoverable : na
        Positive Hysteresis   : 120.000
        Negative Hysteresis   : 120.000
        Assertion Events      :
        Assertions Enabled    : lnc- lcr-
        Deassertions Enabled  : lnc- lcr-
      
  • 筐体のシリアル番号などを調べる fru
    • いよいよサーバーの挙動が怪しいぞ……メーカーのサポートに問い合わせしたいけどシリアル番号なんだっけ?という時に。
       masaki@server:~$ ipmitool -H <HOSTNAME> -U <user> -P <password> fru
       FRU Device Description : Builtin FRU Device (ID 0)
        Board Mfg Date        : Sun Apr  5 01:19:00 2020
        Board Mfg             : <マザーボードの製造者>
        Board Product         : <マザーボードの製品名>
        Board Serial          : <マザーボードのシリアル番号>
        Board Part Number     : <マザーボードのパーツ番号>
        Product Manufacturer  : <サーバーの製造者>
        Product Name          : <サーバーの製品名>
        Product Version       : 01
        Product Serial        : <サーバーのシリアル番号>
        Product Asset Tag     :
      

3. ペパボとIPMIの歴史

今でこそエントリークラスのサーバーにも搭載され、ペパボでも全サーバーで利用しているIPMIですが、昔からそうであったわけではありません。

ペパボのサーバーにIPMIが搭載されるようになったのは2009年頃。

それまでは遠隔地のデータセンタで稼働しているサーバーに問題が発生し再起動が必要になった場合、電話でデータセンタのスタッフに連絡し、現地でサーバーの電源ボタンを操作してもらう必要がありました。今となってはなんでそんなアナログな……と思われるかもしれませんが、当時では比較的メジャーな対応でした。

そのためサーバーの再起動は電話で伝える時間と現地でスタッフのかたが作業する時間、電源の再投入からOSが起動するまでの時間など、合計30分以上かかることもザラでした。ほんと今となっては信じられない時代ですね。

そんなこんなで能動的なサーバー管理のためIPMIの導入をおこなったのですが、この時の製品は今のようにマザーボード上に直接搭載はされておらず、別売りのボードを搭載することで機能を利用していました。このボードが出荷時に組み込んでもらえず、なおかつ微妙に接触が悪かったため導入時の評価は「すごい便利だけどすごい面倒」という印象でした。

導入して便利になった点の一つがサーバーへのOSのインストールです。導入前のOSインストールは、データセンターに赴いてサーバーにUSBのCD-ROMドライブを接続しCDからのインストールをおこなっていました。

IPMIの機能として仮想ドライブ機能というものがあり、OSのISOイメージファイルを仮想的なCD-ROMドライブにマウントする事で遠隔地からのOSインストールが可能になりました。

この後すぐPXEブート + Cobblerによるネットワークインストールが導入されお役御免となりましたが、オフィスに居ながらOSのインストールが出来ることに感動したものです。

2010年に採用した別メーカーのサーバーからは基本機能としてマザーボードに搭載され面倒な準備が不要に。この頃からIPMIの便利さをより実感するようになりました。

以降、私たちのサービスを縁の下で支えてくれる力持ちとして長い付き合いを続けています。

4. 終わりに

簡単な説明にはなりますがIPMIの紹介、いかがでしたでしょうか。
パソコンとサーバーの違いに興味を持っていただけたなら幸いです。
もっとサーバーのことが知りたくなったらぜひペパボ採用サイトをのぞいてみてください。

GMOペパボでは、新しい仲間を募集しています