本当な 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