あけましておめでとうございます。
Fusic 平田です。
新年気分とは何の関係もない、RAIDのお話です。
年末にXenサーバのディスクがお亡くなりになったので、ディスク換装してCentOS6.2でKVMサーバを再構築。
で、ディスク4本なのでどうしようかなーと思いつつRAID5を組んではみたのですが、iowaitが収まらない。
特に書き込みのほうが苦戦しているようで、仮想サーバがちょっと頑張るたびにロードアベレージが10越えたり。
これじゃ使い物にならんなあ最悪RAID10で組み直したほうがいいかなあ。。。とか悩んでいる時に以下の記事を発見。
peterkieser.com/2009/11/29/raid-mdraid-stripe_cache_size-vs-write-transfer/
※ 記事中のスクリプトまでは試していません。
書き込みで苦しんでいるならstripe_cache_size増やすと捗るよ!ってことでやってみました。
サーバスペック:
Xeon X3230 (4コア) メモリ8GB HDD1TB*4(RAID5, software raid)
対象のRAIDアレイ(今回はmd3)に対して
# echo 8192 > /sys/block/md3/md/stripe_cache_size |
と実行して値を書き換えます。
resyncがかかってしばらくしたら完了したので、あとはtopでだらだら流して様子見。
仮想サーバ側で何度か負荷の高い処理をしてみてもロードアベレージがさほど上がらなくなったので、とりあえずはよし。
あとはOS再起動しても動くように、ruleを追加。
# cat <<EOS > /etc/udev/rules.d/80-md-stripe-cache.rules SUBSYSTEM=="block", KERNEL=="md*", ACTION=="change", TEST=="md/stripe_cache_size", ATTR{md/stripe_cache_size}="8192" EOS |
今のところ、これで快適に動作しています。
問題が起きないか、最大限の関心を持って注視を続けることが当面の隠れ業務です。
・・・ていうか、そもそもRAID5使わないとかsoftware raid使わないとか別の方策あった気もします。
追記:
8192でも微妙につっかえる場面が見受けられたので、結局32768(最大)まで増やしています。
ページサイズ(=4KB)×stripe_cache_size×ディスク数分のメモリ使うので、あんまし増やしすぎるのも嫌だなーと思ったんですが。
メモリで困る前にCPU数で困りそうな気がしたのと、メモリは最悪増設できるしなーってことで、とりあえずはこのままで。