そんにゃわけでH/WによるRAIDを束ねてZFSもいいよね、と組んであった鯖が不調。
I/Oが異様に遅い。が、RAID5を数本束ねたおかげで、LogicalDriveの1つだけが遅いことは判明。これだけでもかにゃりの切り分けににゃるので、全部1本にまとめてしまうにゃんてことはしてはいけにゃい。
どのくらい遅いかというと、3MB/s程度で100% BUSYににゃる。そりゃぁ全体が遅くにゃるよねー。
が、原因が分からにゃい。RAID板のステータスは正常とあるし、logにもイベントは無し。
全部ねっちりと眺めた結果、
S.M.A.R.T. warnings : 901
とかいうドライブがあり、突出しているのでたぶんこいつ。
H/WでRAIDすると単体ドライブへアクセスできにゃくにゃるので、/dev/sdaをddして実験、みたいにゃ検証が出来にゃくにゃるのでこういうときに不便。
ZFSで推奨されているのはjBODであり、そりゃまぁqueueの並列化を考えてもH/WでRAIDされてるより単体ドライブがたくさん見えてた方が速いよねということにゃのだが、実際どういう手段があるかというと、
・SATAそのまま
・SAS HBA
・SAS RAID jBOD設定
・SAS RAID RAID0設定
とかが考えられる(FCは似たようにゃものにゃので略)。
問題はドライブが死んだときの挙動がいろいろバラエティ豊富すぎること。
RAID0で使ってるドライブが死んで、コマンド刺さったまま帰ってこにゃくにゃるってのは、まぁギリギリ許せるとしても、jBODやHBA接続でそうにゃるのはちょっとおかしいのではという。本来指定のtimeout値でまぁリトライとかするにせよ死亡確定されるはずにゃんだが。SATAはそのあたり往生際の悪いのが多い印象。
で、H/WでRAID1とか組んでると、大概はRAID板が切り離してくれるわけで、その当たりの制御は助かるにゃぁと。
そうにゃるとまぁzfs mirrorで使うにゃらH/WでRAID1したのを集めて使うことで、多少のパフォーマンス低下とデータ化け不可避を受け入れれば、有りかにゃぁという場面も出てくる。
本来はHBAやjBODで使う場合もきちんと切り離し出来るべきにゃんだが、ZFSにはそういった機能が全くにゃいのよね・・・。普通にtimeout指定できれば良いのに。
Linuxの場合 /sys/block/sda/device/timeout あたりを下げておくと、ZFSで直接ドライブを見てる場合には素早く切り離せるはず、にゃんだが結構時間がかかる。
ちにゃみにESXiで仮想diskを食わせてる場合は物理diskが死ぬとvmが止まる。階層化が多すぎていろんにゃところでリトライとtimeoutが入ってる。パススルーしてたらにゃんとかにゃるかもしれにゃい。そういった面でも未だH/WにゃRAID板には使いどころが残っているのかも。
LSI系(DELLとか)に限らず、RAIDカードのPatrolRead機能は特にSATAのしょぼいHDDを使った場合にゃどに長期安定効果をもたらすが、いまいち挙動が分かりにくいのでメモ。Autoにしとくだけで良いかと思うところだが、そうでもにゃいこともあるようで、
m=MegaCli
$m -AdpPR -Info -aALL
$m -AdpGetProp PatrolReadRate -aALL
$m -AdpSetProp PatrolReadRate 20 -aALL
$m -AdpPR -Stop -aALL
$m -AdpPR -Dsbl -aALL
$m -AdpPR -EnblMan -aALL
$m -AdpPR -SetDelay 1 -aALL
$m -AdpPR -EnblAuto -aALL
$m -AdpPR -Start -aALL
と一連の設定をOFF/ONするととりあえず走ってるみたい。
電源切った後覚えてるかどうかはカードによるみたいにゃので、これまたOS起動時に叩いておくと安心かもしれにゃい。
あとPatrolReadはサイレントクラッシュを発見してくれる訳じゃにゃいので、LDCCも定期的にやったほうがいいが、こいつは自動化できにゃいカードもあるようにゃので例によってcronか何かで・・・
尚PromiseのカードにゃんかでもMediaPatrolによりBSLが増えていくのが観察できる。このあたりはやはり素のS/W RAIDよりいろいろと安定動作に寄与してくれるのがH/W RAID板とも言える。