読者です 読者をやめる 読者になる 読者になる

生物物理計算化学者の雛

主に科学に関する諸々を書き留めています。

全データノード再起動時は3台以上の同時故障が起こりやすく、Hadoop HDFSデータは要注意

先日設備点検に伴う停電があったのですが、その際の全Hadoop HDFSノードのシャットダウン・再起動により危うくデータを失うところでした。

レプリケーション3ならば2ノードまでの障害は大丈夫

HDFSはデフォルトでレプリケーション数が3であり、3台のデータノードが同一データのレプリカを保有しているために2つまでのデータノードが同時に故障してもデータを失うことはありません。このおかげで通常運用時にデータを失うことはほぼ起こりません。(先日書いたようにNamenodeのメタデータを失うことは起こりえますが)
実際に運用中にデータノードが故障することはよく起こりますが、故障データノードのデータはすぐに別のデータノードにコピーされ、レプリケーション数3は常に保たれます。

全データノードシャットダウン・再起動時は故障多発=3つ以上故障する確率大

24時間稼働し続けるサーバでは、シャットダウン・再起動時に障害が発生することが多いです。
現在50台弱のデータノードにおいて250TB程度のHDFSを構築しているのですが、設備点検に伴う停電があり全マシンのシャットダウンを行いました。シャットダウン前は全データノードは稼働していたのですが、電気供給復帰後に再起動を行ったところ、データノード2台でHDD故障が、1台でマザーボード故障が生じ同時に3台のデータノードが故障する事態となってしまいました。
そのため、HDFSの一部データが失われた状態となってしまいました。
幸いHDD故障は2台のみであったため、マザーボード故障ノードのマザーボード交換後には全データへのアクセスが可能となり復旧することができましたが、交換用マザーボードが届くまで1週間程度HDFSを利用できない状態となってしまいました。

対応策は・・・

停電等で全データノードをシャットダウン・再起動する必要がある場合、再起動時の障害発生率の高さを考慮した運用が必要であると痛感しました。思いつく対応策としては

  • シャットダウン前にレプリケーション数を3から4以上に増やしておく
  • 事前に個々のマシンをいったん再起動し、障害が起こらないかチェックしておく
  • smart値のドライブエラーチェックを行っておく

といったところですが、どれも根本的な対応とは言い難いです・・・。
もっとよい工夫がありましたら是非知りたいところです。