HP ProLiant MicroServer Gen8(以降 HP Gen8)を2台連動、8TB のハードディスクを8個使用して、8TB x 6 = 48TB + 2個エラー訂正ディスク → 48TB RAID Z2 を実現しました。PC2台、 HP Gen8-Master と HP Gen8-Slave を Ethernet でつなぎ プロトコルは AOE [ATA – over – ethernet] (以降 AOE) を使います。Part2では具体的な実現の方法を説明致します。
具体的方針
繰り返しになる所がありますが、整理と確認の為に具体的方針を箇条書きにします。
ハードウェアについて (1) HP Gen8 2台を連動する。 (Master、Slave の CPU/Memory は メモ1 参照) (2) HP Gen8 それぞれに4台ずつ HD を実装して、計8台で Raid z2を実現する (3) HD は 8TB を使用する。 (構築中は手配の都合で2TBで実験する) (4) 外部ネットハブには ILO-M,eno1-M,ILO-S,eno1-S の4ポートをつなぐ。 (5) Mater、Slave は eno2-M と eno2-S をダイレクトにつなぐ (6) 外部ネットハブにつなぐポートの削減については別記事とする。(Part3で検討する)
ソフトウェアについて
(1) Master、Slave とも ディスクのメンテナンス制御は可能な限りOMV5で行う。
(2) OMV5だけでメンテナンス制御できない所はソフトウェアやスクリプトを追加する。
(3) 性能テスト、機能確認は OMV5 + 追加ソフトで行う。
(4) 可能な限りソフトで自動設定するが、電源投入順はルールを設ける
再起動後 Master側からすべての HD に アクセス可能にする。
Master側のHD4個、Slave側のHD4個、8個のHDを実装、各OMV5でワイプしておく。
Master側のCPUでRaid Z2 を構成するのだが、それにはまず、Master側 からすべての HD にアクセスできないといけない。Master側の HD4個を MHD1 〜 MHD4、Slave側の HD4個をSHD1 〜 SHD4とすると SHD1~SHD4はMaster側から e1.0 〜 e4.0 のdevicenameを通じてアクセスする。例えばSHD1 をdevicename e1.0 に設定するには Slave側で
# vbladed 1 0 eno2 SHD1を指定
を実行する。SHD1を指定は、具体的にはIDで指定している。理由はHDとIDが一対一に対応するので、順が入れ替わらないからである。つまり
# vbladed 1 0 eno2 /dev/disk/by-id/ata-xxxx...xxxx
と記述する。ここでata-xxxx…xxxxはSHD1のID番号を示しており
# ls /dev/disk/by-id/ で表示される中に含まれる ・・・ (1) /dev/sda の ID は # hdparm -I /dev/sda で確認可能 sdb...sdn も同様 ・・・ (2)
(1) (2) より SHD1~SHD4 の ID番号を特定できる。
e1.0 〜 e4.0 までを設定するスクリプト SetVblade.sh を示す。SERI1 〜 SERI4 (SHD1~SHD4) は各人のHDの ID をエディターで書き込む必要があります。また、HD交換時には当然、変更が必要です。SetVblade.sh は /sbin の下に置いています。SetVblade.sh list で実行コマンドを確認できます。確認しましょう。
再起動時に SetVblade.sh execute を自動実行するのですが、この自動実行ではまり、3日程かかりました。自動実行サービスを使おうと思い、/etc/rc.local に実行内容を書きました。結果自動実行時にネットワークが…と怒られます。どうやらdebian 系の仕様らしく、ネットワークが設定されていないと使えないみたいです。ググるとラズビアン(ラズパイ向けdebian) で同じ質問をしている人がいました。まあ、サービス定義を書き直せば良いのですが、なんとなく嫌だったので、crontab で @reboot を使って起動時に実行するルーチンを設定しました。・・・がここでもハマりました。分かってしまえば簡単なのですが、環境変数 PATH の値が 通常 と crontab が @reboot を実行している時では異なるのです。@reboot echo “PATH at reboot=$PATH” >> ~/temp の文を crontab に置くと tempで見る事が出来ます。興味のある人は見て下さい。何もしなければ @reboot 時 に vbladed コマンドが実行できません。なので、SetVblade.sh で 対策しました。SetVblade.sh 内では必要な PATH を設定しています。上記のスクリプトは 最初の2行+最後の1行 で対策済みです。
それでは設定していきます。
# crontab -e
でエディタを開けます。( 初めてcrontabを使う時はエディタを選択する )
@reboot /sbin/SetVblade.sh execute
上記の行を追加して下さい。エディタを終了。現在 RAM モードで動作していますので、必ず、OMV5をシャットダウンして 上記の変更をUSBメモリーに書き込んで下さい。再起動時に crontab -e で書き込んだ内容を確認できます。
Master、Slaveを再起動します。両者立ち上がったら、
Master側で上記、RaidCheck.shを実行します。( =RaidCheck.sh execute ) なお RaidCheck.sh は /sbinの下に置きます。
上記は実行結果の例です。画面に e1.0 〜 e4.0 が在りますので OK です。( HDは検証用2TBです。) Raidを構成していないので、zpool status は no pools available となっています。Master Slave の再起動の順を色々変えてみて下さい。どちらか先でも、RaidCheck.sh execute の結果は上記になると思います。この段階では、Master、Slave の電源投入順は無いです。
Raid Z2 を構成する。
Master で Raid Z2 を構成します。MasterのOMV5に プラグインを導入します。
プラグイン
プラグインリスト openmediavault-zfs x.x.x をインストール → zfs が増える
ここで、zfs → 概要 → プールの追加 で表示される “ZFSプールの作成”では、e1.0 〜 e4.0 のdevicename を指定できないので、これではプールが追加できない。但し、赤〇の情報には注目する。(HDの容量か1.82TiB になっているのはここでは都合で2TBのHDを使っている)
上記、赤〇を考慮しつつ、最終的には 名前=tank のプールを構成できれば良いので コマンドで直接HDを指定して Raid Z2 を構成する。
上記に MakeTank.sh を示します。このスクリプトは単に zpool コマンドを合成するものですが、
zpool create -m /zfs -o shift=12 tank raidz2 MHD1を指定 .. SHD4を指定
を MakeTank.sh execute で実行できます。/sbin の下に置きます。実行すると zfs → 概要 にプール名 tank ができます。ここで、RaidCheck.sh execute を実行すると
確かにzpool status で正常にraidz2-0 が動作しているのを確認できます。
フォルダー構造を確認すると、zfs まで確認できる。あとは OpenMediaVault5で RAID Z, RAID Z2 を実現【Part 4】を参考に 共有ホルダ RAIDZ2-0 の追加設定をする。
共有フォルダ +追加
名前:RAIDZ2-0 デバイス:tank パス:RAIDZ2-0/ パーミッション:任意(特に変更なし)
あとは、各人で USER登録, SMB セッティングをすれば良い。
システムの電源投入順序
RAID システムは HP Gen8-Master が 再起動中に毎回 構築されるのだが、構築中に構成要素のディスクすべてにアクセスできないと失敗する。当然 devicename e1.0~e4.0が正常動作中の必要がある。つまり、HP Gen8-Slave が起動済みの必要がある。Master Slave の起動順を変えて、RaidCheck.sh execute で確認してください。Slave が先に起動していないと、Raid が構築されません。システム運用ルールとしては
(1) システム再起動時は必ず Master Slave 双方 再起動する事。 (2) システム再起動時は必ず Slave 側を先に起動する。(30秒以上先行して立ち上げる事)
となります。起動後 Master で RaidCheck.sh execute を実行して正常動作を確認すると安心です。
簡単なシステム評価
本格的なシステム評価は後日として (何時になるかは保障できないが….) 簡単にHD転送レートを計りました。なお、このデータを取った時点では手配の都合でHDに2TBを使っています。HD の Write cash を ON/OFF して計測しました。
Write cash ON/OFF で有意な違いを見いだせません。よって Write cash OFF で運営します。考えてみれば Raid システム自体がバッファを持っているはずなので、違いを見いだせないのも無理はないのかもしれません。
AOE(ATA – over – Ethernet) を使って HP MicroServer Gen8 2台で 48TB RAID Z2 を実現 致しました。後は Part 3 で メンテナンス情報、追加情報など 必要に応じて 順次 加筆致します。
Part 3 へ続く