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の利用ができます。このブラウザーでの表示は前述のサーバーメーカーごとの独自拡張された部分です。
サーバー電源の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
- 時にはipmi機能が高負荷で反応が遅くなる時があります。そんな時は外部からipmiのリセットを実施します。
- サーバーの電源状態を調べて操作したいときに利用する
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-
- CPU2で温度のアラートが発生した。ちゃんと冷えていないんだろうかと思いファンの状態を確認したい、という時に。
- 筐体のシリアル番号などを調べる
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ペパボでは、新しい仲間を募集しています
- 募集中の職種や、詳しい社内の環境や制度に関しては以下をご覧ください。
- 現在ペパカレ(ペパボカレッジ)の募集を行ってます。皆様の参加をお待ちしております。