muninプラグインでソフトウェアraidを監視する

うちのサーバはRAID1(ミラーリング)で組んでるので、片方のHDDが落ちても安心です。
本当ですか?

cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[0]
104320 blocks [2/1] [U_]
md1 : active raid1 sda3[1]
243713984 blocks [2/1] [_U]
unused devices: <none>

嘘でした。超あぶなかった。
しかもこれを見ると片方のパーティションはセカンダリのHDDで、もう片方のパーティションはプライマリのHDDでしか動いていないようで、物理的なHDDとしてまともにデータが書き込まれているのは一台もない様子でした。
今もしどちらかのHDDが死んだら復旧できなかったところです。仲良くお互いに依存しあっていた番いのジュウシマツのように、失った伴侶の深い欠落感から立ち直れず、ただこんこんと、後を追うようにこの世を去ったことでしょう。
あぶなかった。
そういえば以前、再起動したらログインできなくて、コンソール接続からfsckで復旧させたことがあるのですが、たぶんそのときにraid構成がおかしくなってしまったのではないかと思いあたりました。
おそるおそる管理者宛のメールを覗いてみると、なんと1/30からmd1のプライマリHDDに対するミラーリングがとまっていて、5/6からmd0のセカンダリHDDに対するミラーリングがとまっていると、膨大なメールで管理者ユーザにお知らせしてくれていました。。
全然見てませんでした。
5/6といえば、だいたいfsckで復旧した時期だったかなと思い当たり、当時はどうしてもう片方のHDDから起動してくれないんだろうと戸惑ったのですが、そういうことだったのかと納得しました。
生きているプライマリHDDからいざ起動とようとしても、その時点ですでに3ヶ月以上片側のパーティションが更新されておらず、ファイルシステムとして矛盾したものになってしまっていたのでしょう。
あわててRAIDの再構築をおこないました。

sudo /sbin/mdadm -a /dev/md0 /dev/sda1
mdadm: re-added /dev/sda1
cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[1] sdb1[0]
104320 blocks [2/2] [UU]
md1 : active raid1 sda3[1]
243713984 blocks [2/1] [_U]
unused devices: <none>
sudo /sbin/mdadm -a /dev/md1 /dev/sdb2
mdadm: re-added /dev/sdb2
cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[1] sdb1[0]
104320 blocks [2/2] [UU]
md1 : active raid1 sdb2[2] sda3[1]
243713984 blocks [2/1] [_U]
[==>..................]  recovery = 10.6% (25936128/243713984) finish=62.8min speed=57724K/sec
unused devices: <none>

※ 本当はmd1のsda3と対にさせるのはsdb3なのですが、fsckのときの影響(?)で本来のセクタ領域が別のデバイスIDに入れ替えられてしまっていたようで、sdb2を指定しなければなりませんでしたが話がそれるので省略します。
で、再構築しているあいだに、また次に同じようなことがあったら怖いので、muninの監視プラグインにraidも追加することにしました。この場合の普通の解は「メールをちゃんと見よう」かもしれませんが、やっぱりどうせならGUIでモニタリングしたい、というのが欲というものです。転んだついでになにか掴んで立ち上がってこそ、ひとは向上していくのです。
・muninプラグイン raid
1. インストール

wget "http://exchange.munin-monitoring.org/plugins/raid/version/2/download" -O ~/raid
sudo chown root:root /usr/local/munin/lib/plugins/raid
sudo chmod a+x /usr/local/munin/lib/plugins/raid
sudo ln -s /usr/local/munin/lib/plugins/raid /etc/munin/plugins/raid

2. 動作確認
コマンドで確認

/etc/munin/plugins/raid
Name "main::rcpt" used only once: possible typo at /etc/munin/plugins/raid line 71.
/etc/munin/plugins/raid
md0.value 100
md0_rebuild.value 100
mdadm: cannot open /dev/md1: Permission denied
md1.value 50
md1_rebuild.value 0

Name “main::rcpt” used only once: possible typo at /etc/munin/plugins/raid line 71.の対応

vi /usr/local/munin/lib/plugins/raid
# line71
$rcpt = 0;
↓
$rpct = 0;

# 利用したのが6/18(1週間くらい前)にあがったばかりのバージョンだったのですが、まだチェックが甘いのでしょうか、変数名にタイポがありました。
mdadm: cannot open /dev/md1: Permission deniedの対応

sudo vi /etc/munin/plugin-conf.d/plugins.conf
[raid]
user root

コマンドで再確認

sudo /etc/munin/plugins/raid
md0.value 100
md0_rebuild.value 100
md1.value 50
md1_rebuild.value 59

munin監視ノードの再起動

sudo /etc/init.d/munin-node.rc restart

munin監視サーバから確認

telnet localhost 4949
fetch raid localhost
md0.value 100
md0_rebuild.value 100
md1.value 50
md1_rebuild.value 59
quit

3. GUIでモニタリング
Munin_raid_20100626
# 再構築途中
がパーティション1(md0)、がパーティション2(md1)。はセカンダリHDDのRAIDがまだ再構築されていないので1/2台の50%ラインを指しています。が再構築の進捗率です。開始から1時間で70%完了。おそらくこれが100%までいったら赤のラインも2/2台で100%へ移動するはずです。
ところで凡例だとmd0がじゃなくてになってますね。なんかこのバージョンは変数のタイポ以外にも間違った変数をどっかであててるところがあるのでは?、といぶかしみ中。
ともあれ、muninみるのがさらに楽しくなりました。