さくらインターネット専用サーバのRAID監視
2012.06.21
さくらインターネットの専用サーバでRAIDの状態を監視するシェルスクリプトの例を紹介します。
専用サーバのモデル・世代によって採用されているRAIDコントローラが異なります。RAIDコントローラ毎に異なるスクリプトを用意しています。
* 2012年6月現在提供されている「エクスプレスシリーズ」の場合
このサーバはHPの ProLiant DL170e G6 というハードウェアでRAIDコントローラには Smart Array P410 が使用されています。Smarty Array RAIDコントローラの情報取得・設定は hpacucli コマンドで可能です。以下のようなシェルスクリプトを使用しています。
[sourcecode language="bash"]
#!/bin/sh
PATH=/bin:/usr/sbin:/usr/bin
export PATH
ALERTTO=admin@example.com
cmd=$(basename $0)
function getstatus () {
hpacucli ctrl slot=1 show config | \
grep "logicaldrive" | \
awk -F "," '{print $3}' |
tr -d " )"
}
raidstatus=$(getstatus)
logger -t "[$cmd]" "RAID $raidstatus"
if [ "X$raidstatus" != "XOK" ]; then
hpacucli ctrl slot=1 show config | \
egrep "[logical|physical]drive" | \
sed 's/^[ ]*//' | logger -t "[$cmd]"
host=$(hostname)
mail -s "RAID Alert : $host" $ALERTTO << EOF
RAID Status is *NOT* Good.
hpacucli commands reports :
====================================
`hpacucli ctrl slot=1 show config`
EOF
fi
exit 0
[/sourcecode]
* さくら専用サーバの第2世代でアドバンスドプラン 富士通サーバの場合
このプランでは富士通の「PRIMERGY RX100 S6」が採用されています。RAIDコントローラは dmesg の出力では「 LSI Model: MegaRAID SAS RMB」と出ました。情報取得・設定は /opt/MegaRAID/MegaCli/MegaCli というコマンドで可能です。以下のようなスクリプトを使用しています。
[sourcecode language="bash"]
#!/bin/sh
PATH=/bin:/usr/bin:/opt/MegaRAID/MegaCli/
export PATH
ALERTTO=admin@example.com
raidstatus=$(MegaCli -LDInfo -Lall -aALL |grep ^State|awk -F : '{print $2}'|tr -d " " | tr '[:lower:]' '[:upper:]')
logger -t "[MegaCli]" "RAID $raidstatus"
if [ X$raidstatus != "XOPTIMAL" ] ; then
host=$(hostname)
mail -s "RAID Alert : $host" $ALERTTO <RAID Status is *NOT* Good.
MegaCLI commands reports:
$(MegaCli -LDInfo -Lall -aALL)
EOF
fi
exit 0
[/sourcecode]
* さくら専用サーバの第2世代でRAIDプランの場合
このプランはさくらインターネット独自ハードウェアのサーバです。RAIDコントローラには 3ware 9650SE-2LP が使用されています。このRAIDコントローラは /usr/local/bin/tw_cli により情報取得が可能です。以下のスクリプトを使用しています。
[sourcecode language="bash"]
#!/bin/sh
ALERTTO=admin@example.com
CNUM=c0
PATH=/usr/local/bin:/bin:/usr/bin
export PATH
raidstatus=`tw_cli info $CNUM unitstatus |grep "RAID-1" |awk '{print $3}'| tr '[:lower:]' '[:upper:]'`
logger -t "[tw_cli]" "RAID $raidstatus"
if [ X$raidstatus = "XDEGRADED" -o X$raidstatus = "XINOPERABLE" ]; then
tw_cli info $CNUM |grep -v ^- |grep -v ^$ | logger -t "[tw_cli]"
host=`hostname`
mail -s "RAID Alert : $host" $ALERTTO << EOF
RAID Status is *NOT* Good.
tw_cli commands reports :
====================================
`tw_cli info $CNUM`
EOF
fi
exit 0
[/sourcecode]
* 上記のスクリプトを /etc/cron.hourly/ に実行属性を付けて放り込んでおけば1時間ごとにRAIDの状態を確認して syslog 経由で /var/log/messages に記録してくれます。障害が発生した場合はログに記録すると共に ALERTTO 宛てにメールを送信します。
警告メールが届いたらさくらのサポートに連絡してディスク交換を手配します。
http://sakura.cb-faq.com/faq/public/app/servlet/qadoc?QID=000494
カテゴリー:技術情報メモ