5月 14, 2022

データベースサーバのファイルシステムをzfsからbtrfsに切り替えた

1月末から少しずつ作業をしていて、3月に完全切り替えをして、多分もう大丈夫そうなので書き記しておく。 

2014年11月頃から、2TBのSATA HDD 5台をmdadmによる管理でRAID5化していたのですが、障害が出ることが多く、安定性で評判を聞いていたzfs(ZFS on Linux)によるRAID5に切り替えました。

2016年9月頃から速度に不満が出てきて、1ヶ月毎にSSDに入れ替え、オールSSD化されました。

使っていたSSDは、CrucialのCT2050MX300SSD1。これは、HDDから差し替える際に、2TB・2048GBのディスク領域をそのまま移行できるということで選択されました。

この機種を選択した他の理由として、S.M.A.R.T.による監視でドライブの寿命を予測できたというところです。HDDでも、S.M.A.R.T.による監視はできましたが、どうしても駆動部品があるということで、突然死の心配がありました。SSDは駆動部分がないため安定しており、さらにSSDに使われているメモリの書き換え回数に限界があるということで、ある程度寿命に予測が付くのでしょう。

データベースサーバでは、24時間365日、大量の書き込みを行っており、S.M.A.R.T.で取得できる「寿命値」は一定の間隔で下がってくるという様子でした。

S.M.A.R.T.記録グラフ。ここで50%以下にあるグラフがCT2050MX300SSD1。

しかしこの「寿命値」も調べてみると、あくまでも計算式によるもので、0になった瞬間に壊れるわけではないようです。0になった時点で予測されるメモリチップの書き換え回数を消費したということで、0以降はいつ壊れてもおかしくないという状態だそうです。逆に言うと、性能不足のチップがあった場合は0に達する前に壊れる可能性もあるわけです。

実質2017年から使われてきたSSDも2021年で5年間、残り寿命が30%を切りそろそろ不安を覚えるようになりました。

ドライブ寿命については2年ぐらい前から気にしており、HDDからSSDへ切り替えたときのように、また1台ずつ入れ替えていけば良いだろうと、交換するドライブを見繕ってみるとCT2050MX300SSD1は1台6万円ぐらいしていたのに、2TBのSSDが2万円ぐらいまで下がっていました。量産化効果ってすごいですね。しかし容量が2000GBのドライブばかり出てきます。2TiBと2TBの違いでしょうか。

構成サイズが小さくなるようなドライブ交換は、zfsでは対応していないようです。どうしても一度RAIDを解いて、再度組み直す必要があるようです。しかも容量が小さい方に合わせられてしまう。以前仕事で触ったことのあるSynologyのNASでは、Synology Hybrid RAIDという仕様があり、サイズの異なるドライブを組み合わせて無駄なく領域を使ったRAIDが組めるというものでした。こんな仕組みが有ればいいのにと考えていました。

2022年になって、そろそろ次のストレージ構成を真剣に考えなければということで、再び調査をしてみました。相変わらずzfsでは容量減少は対応しておらず、btrfsのRAID5は動作が怪しい。

しかしbtrfsでは異なるサイズのドライブを組み合わせて容量の無駄を極力抑えた状態でRAIDが組めるという情報を見つけました。RAID5のパリティ計算をするCPU負荷も気になっていたので、この際RAID5はやめて、RAID1あたりで構成してみるか?と検討してみました。

Hyper-Vで環境を作り、サイズの異なるディスクの組み合わせでテストしてみたところ、問題なく動作するようです。障害時の復旧手順なども一通りテストして感覚をつかみました。

ということで2000GBのドライブを購入。今回は、CrucialのCT2000MX500SSD1とWESTERN DIGITALのWD Red SA500 WDS200T1R0Aです。他のメーカーを混ぜてみたのは、最近はNVMeのドライブしか買っていなかったので、2TB SATA SSDの使い心地が分からず、Crucial以外の品質も見ておきたかったためです。

新しい2000GBのドライブ2台でbtrfsのRAID1を組み、そこへzfsのデータをコピー。運用してみて動作に問題ないことを確認した後、zfsのRAID5を解放し、従来の2050GBドライブを1台ずつ2台混ぜて4台のRAID1に変更しました。運用しながらRAID構成を変更できるので便利ですね。

しかし思ったより速度が出ず、space_cacheの設定をv1からv2に切り替えてみたりしたもののずっとディスクが足を引っ張るようになりました。1ヶ月ほど調べてみたものの原因がつかめず、最終的にRAID1からRAID10へ切り替え。btrfs的にどのようなドライブの分け方になっているのか分かりませんが、なんとか処理速度も回復しました。

今後は古いドライブから死んでいくはずなので、RAID10に組み込んでいない残りの2050GBのドライブを順次入れ替えつつ、最終的に全部が新しいドライブに入れ替わる予定です。

zfsを運用していた間は、数回だけドライブを認識しなくなることがありましたが、RAID5に組み込み直すとすぐに復旧できたので、信頼度はかなり高いです。ただしzfsはカーネルアップデートの度にビルドし直す必要があります。手元で運用していたときは、画面上ではアップデートが成功しているのに再起動するとzfs領域を認識できなくなるという状態に毎回なりました。一度モジュールを完全にアンインストールして、再度インストールする必要があったので、そこだけが面倒でしたね。

btrfsはカーネルでのサポートも期待できるので、さらに安定した運用ができそうです。


0 件のコメント:

コメントを投稿