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

HYLOGICS

今後は各分室にコンテンツを移して、ここは雑記や暮らしを中心としたライフログ的な何かにしていく予定です。

【備忘録】ストレージ整理

先週、いつも通りデータ処理のバッチを流していてなんとなく違和感があった。増え続けるデータに対して誤魔化し誤魔化し運用しているHDDの容量がもう限界なのではないかという予感。取り急ぎ確認してみたところ、 データ領域の空き容量が200GB程度で、データの整理やパーティションの整理をしないと数日中にデータが溢れることが発覚。これはちょっと不味いと思い、長いこと放置していたストレージの整理を行うことにした。

データ退避とRAIDアレイ再作成

以下図1は再構築前後の図。左が再構築前、右が再構築後。アイコンは左からHDD、RAIDアレイ、パーティション。図中の青はRAID1, 黄はRAIDZ, 赤はその他(シングルだったりデータ整理用の補助ディスクだったり)の領域。

なお、HDDの内訳は3TB * 7 (WD30EZRX, WD30EZRZ), 2TB * 1(WD20EZRX)で、変更前のアレイの内訳は3TB + 3TB + 2TBとなっている。

■ 図1 f:id:kirine:20160715143024p:plain

Icons made by Freepik Alessio Atzeni from www.flaticon.com is licensed by CC 3.0 BY

■問題点: かれこれ10年くらいサーバやストレージを乗り換えつつ継ぎ足し継ぎ足しで誤魔化してきた構成で、やたらパーティションが多い。特に過去2回ほど緊急でデータの移行を行った際に整理をしていなかったこともあり、一つのボリュームに収まりきらずにdata1〜data3と3つのパーティションに跨って配置されており使い勝手が悪い。

■対策: 「遅い」「リカバリが面倒」「Write Hole怖い」といった理由でRAID5を使わず今まではRAID1でなんとか凌いできたのだが、しかし改めて考えてみるとこのデータ領域には「遅くてもOK」「バックアップがあれば冗長性は(そんなに)要らない*1」といった 優先度の低いデータを入れているので、Write Holeの対策さえ出来れば問題がない。RAIDZであればWrite Holeの問題は発生しないことがわかっているので、zfsを導入しRAIDZでデータ領域を再作成することに決定。RAIDZのアレイ1つにまとめるか、2つに分割するかで少し悩んだものの、「I/Oは2ストリーム欲しい」「RAID1(or10)の領域は使い勝手が良いので一部残しておきたい」「どうせシステム領域はRAIDZに載せない」といった理由でアレイはRAID1とRAIDZでそれぞれ1つずつ用意することにした。

KVM上の検証機でzfs導入の試験を実施後、作業開始。

倉庫番状態でデータを移し替え、途中kernel panicを起こしたり(fstabの編集漏れが原因。。)しつつも、なんとか空きHDDを3台作成しRAIDZのボリュームを作成することに成功。

変更前がHDD 6台で8TB(3TB + 3TB + 2TB)の構成に対して変更後はHDD 5台で8.4TB(3TB+5.4TB)の構成に。容量は対して変わってないが、途中のデータ整理でデータ量が5TB程度に減ったので事足りてしまった。

(ちなみに当初はRAIDZの構成を3D+1P( 9TB )にする予定だったが、途中でデータ量が思ったより削減できたこともあり2D+1P( 6TB )+1を選択することにしたため容量が増えてないといった事情がある。何故3D+1Pを選択しなかったのかについては後述)

データ再配置

データ領域を一つにまとめるついでに既存のパーティションの整理とデータの再配置も併せて行うことにした。詳細は下記図2。

■ 図 2 f:id:kirine:20160715141831p:plain

図面を引いていてパーティションが一つ足りない(保留にしたまま忘れていた)ことに気が付いた。。。

論理ボリュームを分割するかは少し悩んだものの、KVMの領域は最低限分割したいこともあり、ユーザ領域と公開用の領域、一時データの書き込み領域も併せて4つの論理ボリュームを作成することにした。

変更前のパーティション数が10(と図に乗ってない小さいものが幾つか)、変更後のパーティション数は6に落ち着いた。

今後のメンテナンス

今使っているM/BはSATAが10ポートあるものの、シャドウベイが8個しかないので外付のエンクロージャを使わない限りはこの8個でやりくりすることになる。mdadmで構築したRAID5と異なりRAIDZでは構成しているHDDの数が変更できないらしいので、容量を拡張する際は既存のHDDをreplaceするか新しくpoolを作って置き換えることになる。新しくpoolを作るとなるとベイは最低3つは開けたままにしておく必要があるんだよな。。。というのが悩みどころで、それが今回3D+1Pじゃなくて2D+1Pを選択した理由だったりもする。この辺はバックアップも含めて考える必要があるので一旦保留。

3〜5TB分のデータをWAN越しにバックアップするのは大変なので、今回余ったHDDにデータ突っ込んでデリバリする予定。

とりあえず、今回の対策では恐らくまたそう遠くないうちにデータ域が一杯になると思われるので、現在ストレージを構成しているWD30EZR*をそろそろ価格の熟れてきたWD40EZRZに換装していきたい*2と思う。

*1:ぶっちゃけRAID0やJBODでも良いと思ってるものの、本当に壊れたら数TBもネットワーク越しにリカバリするのは大変なのでやりたくない

*2:2016/07/15現在、amazon.co.jpにてWD30EZRZが\8680,WD40EZRZが\12,800で容量単価がほぼ一緒