HP ProLiant ML110 G5 に搭載した SmartArray E200 コントローラのステータスを監視するために HP Array Configuration Utility CLI (hpacucli) を入れてみました。
本当な HP 社製サーバの場合は System Management Homepage 等をインストールし設定すれば終わりなのですが、廉価なサーバである HP ProLiant ML110 G5 では SMH が利用できません。このため、 SMH を利用せずに、 CLI ベースでアレイの状態を確認できるツールを利用して定期的にアレイのステータスを確認する方針とします。
HP ProLiant ML110 G5 + CentOS 5.1 (x86版) + SmartArray E200 の構成で作業しました。
今回ダウンロードしたのは
hpacucli-8.10-2.noarch.rpm (2.96 MB)です。
# wget ftp://ftp.hp.com/pub/softlib2/software1/pubsw-linux/p414707558/v47111/
hpacucli-8.10-2.noarch.rpm
# rpm -i hpacucli-8.10-2.noarch.rpm
使い方1: システム上のコントローラ情報を取得する
# hpacucli ctrl all show
Smart Array E200 in Slot 4 (sn: xxxxxxxxxxxxx)
使い方2: コントローラ上の論理ボリューム情報を取得する
# hpacucli ctrl slot=4 array all show
Smart Array E200 in Slot 4
array A (SAS, Unused Space: 0 MB)
使い方3: コントローラ上の物理ドライブ情報を取得する
# hpacucli ctrl slot=4 pd all show
Smart Array E200 in Slot 4
array A
physicaldrive 1I:0:1 (port 1I:box 0:bay 1, SAS, 300 GB, OK)
physicaldrive 1I:0:2 (port 1I:box 0:bay 2, SAS, 300 GB, OK)
physicaldrive 1I:0:3 (port 1I:box 0:bay 3, SAS, 300 GB, OK)
physicaldrive 1I:0:4 (port 1I:box 0:bay 4, SAS, 300 GB, OK)
ただ、毎日ステータスを確認するわけにもいかないので、スクリプトで自動的に障害を検出できるようにしてみます。状態の判断は以下の2ポイントで行うことにしました。
- OK の表示が正常なドライブの数が期待値と一致すること
- failed の表示が存在しないこと
ふたつめの条件は、ドライブに障害が発生した場合に ??? GB, failed) などと出力されるようなので(ドキュメントを参照のこと)、障害を示す failed の文字列で引っかけています。ただし今回のサーバは実際にサービスを提供するため、万が一 failed で引っかからない場合のことを考え OK の表示が 4 行あることも併せて確認する方針としました。論理式では以下のとおりです。
障害 = OKの数がドライブ数と不一致 || failedの数がゼロ以上
上記判断を行い、異常が認められた場合にメールを送信するスクリプトを以下に示します。
#!/bin/sh
SUBJECT="XXX.example.jp RAID Array Status Alert"
MAILTO=hasegaw@exmaple.jp
PATH=/sbin:/bin:/usr/sbin:/usr/bin
OK_DRIVES=`( hpacucli ctrl slot=4 pd all show 2>&1 ) \
| grep 'OK' | wc -l`
FAILED_DRIVES=`( hpacucli ctrl slot=4 pd all show 2>&1 ) \
| grep 'failed' | wc -l`
FAILED=0
# 正常状態の物理ドライブ数をカウントする
if [ $OK_DRIVES -ne 4 ]; then
FAILED=1
fi
# failed と表記された物理ドライブ数をカウントする
if [ $FAILED_DRIVES -ne 0 ]; then
FAILED=1
fi
# ドライブの異常が確認できない場合
if [ $FAILED -eq 0 ]; then
exit
fi
# メールを生成する
ACULOG=`( hpacucli ctrl slot=4 pd all show 2>&1 ) `
cat <<EOF | mail -s "$SUBJECT" $MAILTO
OK=$OK_DRIVES, FAILED=$FAILED_DRIVES
$ACULOG
EOF