大量のサーバを管理するために、IPMIのお話 | サイバーエージェント 公式エンジニアブログ
みなさま、はじめまして。2011年1月にサイバーエージェントにjoinしました長谷川です。
アメーバのいくつかのサービスのインフラ担当をしています。よろしくお願いします。

今回は技術的なネタとのリクエストなのでいろいろ悩んだのですが、インフラ担当にとっては身近なIPMIのことを書きたいと思います。

■ IPMIとは

IPMIは、Intelligent Platform Management Interface の略称です。システム管理の為のインタフェースを指していて、Intel、Hewlett-Packard、NEC、Dellが中心となってつくられた規格です。

最新版はこちらのIntelのサイトで公開されています。

ただ、IPMIという言葉より、各ベンダーの製品で認識している方も多いかと思います。各サーバベンダーはIPMIという規格に準拠しつつも、独自のシステム管理製品と組み合わせて、ソリューションとして提供しています。

弊社ではシステム管理にもOSSを積極的に使用していますので、今回はOpenIPMIの話題を中心に取り上げます。

■ 弊社での使い方

このブログのために、今自分が担当になっている本番のサーバ台数(物理ノード)を数えてみたのですが、だいたい100台前後ありました。

また、設置場所も分散されていますので、なんでもかんでもデータセンターに飛んでいって作業するというのは非現実的です。極力リモートでできることは増やしたいものです。

弊社はOSSを推進していると同時に、マルチベンダーを指向しています。そのときによいサーバを採用するというポリシーのため、必然的に、導入されているサーバーは多様となっています。

(リモートからの電源オン/オフやモニタリングが可能なラック用電源タップが導入されているサーバ群もあります。)

上記のような環境の中で、IPMIは以下の3点のために使用することが多いです。

  • リモートからの電源ON/OFF

  • ハードウェアの状態の確認

  • コンソールリダイレクション(SOL)

今回は、リモートからの電源ON/OFFとIPMIツールを利用したハードウェア情報の確認まで解説します。SOLについては、機種ごとのBIOSの設定がどうしても必要なため割愛します。

(他にも、watchdog timerなどもIPMIを利用して実行できます。)

■ OSSでIPMIを使う

IPMIの使用自体は、各ベンダーが提供しているツールを介して使うこともできますが、それだとマルチベンダー環境の場合、サーバごとに各ベンダーのツールを使う必要が出てきてしまい厄介です。IPMIは公開されている規格ですので、操作の為のツールもOSSで公開されています。代表的なものはいくつかあり、「ipmitool」「ipmiutil」「freeipmi」「OpenIPMI」などが有名です。それぞれの比較については、ipmiutilのサイトにわかりやすい表がありましたので、参考にしてみてください。

今回は、弊社で比較的ポピュラーなOpenIPMIを使って説明します。なお、今回の記事は以下の環境を前提としています。


機種DELL R310
OSCentOS 5.4 64bit
IPMI Ver2.0
備考今回はDRACを使用せず、BMCでできることだけの紹介です


● OpenIPMIの導入

IPMIは管理対象のサーバにドライバ等を入れておく必要はありませんが、OSからドライバ経由でIP設定などする場合は必要ですので、そういった場合は以下の手順でツールを入れてください。

yum install OpenIPMI.x86_64
yum install OpenIPMI-tools.x86_64

以下のデバイスファイルが作られていればハードウェアとして認識されています。

/dev/ipmi0

その場合は下記のように起動させてください。

/etc/init.d/ipmi start

認識されていない場合は以下のカーネルモジュールが読み込まれていないケースが多いと思います。手動でロードしてください。

/sbin/modprobe ipmi_si
/sbin/modprobe ipmi_devintf

以下のようになっていればOKです。

# /sbin/lsmod |grep ipmi
ipmi_devintf 44753 0
ipmi_si 77965 0
ipmi_msghandler 72985 2 ipmi_devintf,ipmi_si


● ユーザの設定、IPアドレスの設定

サーバベンダーのツールや、BIOSからIPMIのIPアドレスとユーザの設定ができる機種が多いかと思います。そちらは、各種マニュアルを参照していただくとして、今回はドライバ経由で設定する方法をご紹介します。

ドライバ経由で設定する方法ですと、動いているサーバを再起動させてBIOS画面を立ち上げたりしなくてもよい利点があります。

・現在のユーザリスト
ipmitool user list "user id"

・ユーザの設定
ipmitool user set name "user id" "user name"

・パスワードの設定
ipmitool user set password "user id" "password"

・admin権限の付与(ユーザID,権限の付与等は環境に応じて変えてください。)
ipmitool user priv "user id" 4 1

・作成したユーザの有効化
ipmitool user enable "user id"

・現在の設定の確認
ipmitool lan print "channel id"

・staticにする
ipmitool lan set "channel id" ipsrc static

・IPアドレス設定
ipmitool lan set "channel id" ipaddr "IP ADDRESS"

・サブネットマスク設定
ipmitool lan set "channel id" netmask "NETMASK"

・DefaultGateway設定
ipmitool lan set "channel id" defgw ipaddr "IP ADDRESS"

・アクセス許可
ipmitool lan set "channel id" access on
以上でユーザの設定、IPアドレスの設定が完了し使用できる状態になりました。

(IPMI 1.5では残念ながらタグVLAN環境にて使用することはできません。ネイティブのIPアドレスを付与してご使用ください。2.0では可能です。)

● ipmitoolの使用例(1)電源のON/OFF

実際の使用例は以下のようになります。当たり前ですが、ipmitoolをインストールした端末からリモートで実行しています。

・電源OFF
ipmitool -H "IP ADDRESS" -U "USER NAME" power off

・電源ON
ipmitool -H "IP ADDRESS" -U "USER NAME" power on
これで、サーバが落ちてしまった!!なんてときにも、DCに走らなくてもよくなりました。よかったよかった。(ハード故障のときはだめなケースもありますが…)

● ipmitoolの使用例(2)ハードウェアの情報の確認

また以下のコマンドでハードウェアの各種情報を取得することができます。

・BMCログの確認
ipmitool -I lan -H "IP ADDRESS" -U "USER NAME" sel list

・センサデータの確認(※)
ipmitool -I lan -H "IP ADDRESS" -U "USER NAME" sdr
この他にも、さまざまなオプションがあるので試してみてください。

※サーバの電力や、温度が表示されます。ファームウェアのバージョンによってうまくいかないこともありますが…

■ これからやりたいこと

構成管理のデータを引っ張ってきて、ラック別の電源モニタリングツールを作ろうかと思っています。また、chefのようなツールと連携させて、サーバ導入時にPXEブートからのシームレスな構築(IPMIのIP設定、ユーザ設定、SOL設定)を実現したいと考えています。

今回は比較的ハード寄りのネタになりました。もし次の機会があれば、検証しているKVSの話なども書いてみたいと思います。ではでは!