HP MicroServer Gen8 2台で 48TB RAID Z2 を実現【Part 1】

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) を使います。少し変わったシステムですが、実現の方法などを簡単な確認実験等を交えながら説明致します。

なぜ AOE (ATA – over – Ethernet) なのか

一年少し前に HP Gen8 で Openmediavault5 (以降 OMV または OMV5) を使って、ディスク4個のRAID Zのシステムを2台作成 致しました。RAID Zでは、エラー訂正ディスクが1個分なので、ディスク故障時はすみやかに故障ディスクを取り換えないと、さらにもう一個トラブればすべてのデータを失います。これは結構なストレスで常に予備ディスクを用意する必要があります。

RAID Zが2台あるので、ディスク数自体は4個x2台=8個で、訂正ディスクは1個x2台=2個分なので、もし、8個連動してRAID Z2が組めれば、記録容量はおなじでもディスク故障は2個までOKとなり時間的、精神的余裕が生まれます。一つにまとめる事になるのでディスクの管理も楽になります。

HP Gen8 は本体にディスク4個しか格納できないので、8個連動するには残り4個は外部に置く必要があります。簡単には4個分のディスク拡張Boxを置き、USB3.0以上で結線すれば実現できます。しかし、折角 HP Gen8 が2台あるのにさらに拡張Boxを新規購入するのも業腹です。HP Gen8 2台をうまく連携して(ソフトウェアだけで)、ディスク8個を連動できないものでしょうか。調べた所 AOE (ATA – over – Ethernet )というものがあり、これを使って実現可能かもしれません。ただ、かなり情報が不足しており、ジャストな記事が見つかりません。そこで、AOEの動作を実験しながらシステムを構築して行きます。

参考資料だが、まとまったものを見つける事ができず、以下を参考にした。

(1) Arch Linux のウェブドキュメント中の ATA over Ethernet 頁
(2) Wikiペディア ATA_over_Ethernet
(3) 各コマンドの man ページ  (man コマンド で見る)

なんちゃってシステム検討

最初になんちゃってシステム検討をします(笑)。

AOEがうまく扱えたとして、NAS本体とネットワークとの転送速度、NAS本体と外部ドライブ又は外部ドライブ代わりのPC等 拡張側への転送速度はどうなるのか。ボトルネックはどこか、気になります。なんとなく雰囲気くらいは知っておきたいです。

1Gbps Ethernet の 理論最大転送レートは 1000Mbps / 8 = 125MB/s (毎秒125Mバイト) となります。ディスクに記録するデータレートは6個分がデータ、エラー訂正分がディスク2個分なので、最大まで増えると考えるとディスク8個分トータルのデータレートは 1000Mbps / 6 x 8 = 1333Mbps となります。エラー訂正で最大量まで増えるとは考えにくいですが、まあ最大で計算します。データの半分(=4個分)は拡張側に記録されますので、1333 / 2 = 667Mbps が拡張側へ送られる速度になります。

例えば NAS本体(ディスク4個) と 外部拡張Box(ディスク4個) を USB で繋いだ場合、USB3.0 以上では (=転送レート 5Gbps以上) 十分早いので、USB がボトルネックにはなりません。但し USB2.0 (=転送レート480Mbps) ではここがボトルネックになります。

同様にすべてデータ転送を 1Gbps Ethernet で行う場合を考えます。

実験には ディスク管理、転送レート測定、色々便利なので、OMV5 を使います。前提として OpenMediaVault5で RAID Z, RAID Z2 を実現【Part 1】【Part 5】 は理解しているとして記述しますので、使っている用語、iLOの使い方 などについては細かく説明しません。

上記は実験のデータ用結線と転送を示しています。HP Gen8 – Master (以降 Master) が NAS の本体となり、HP Gen8 – Slave (以降 Slave) は 外部拡張Box の働きをします。NASとのデータ転送は eno1-M で行われます。また、Master – Slave のデータ転送は eno2-M ←→ eno2-S で行われます。この場合 eno2-M ←→ eno2-S は 1Gbps > 667Mbps ですので、ボトルネックにはならないはずです。

例えば設定を変えるとデータの流れを上記に変更する事もできます。Master、Slave とも Ethernet が 1つで済みますが、その転送レートは低下します。プロトコル切り替えのオーバーヘッドが全くないとして、最大を計算すると 1000 / (1000 + 667) = 600Mbps 6割に低下します。実際はオーバーヘッドも発生するので、恐らく半分以下になると思われます。Ethernetが1つで済むのはメリットなので、遅くてもデータ転送できれば良い場合等は使えるかもしれません。

なんちゃってシステム検討の結果ではAOEを使ってシステム構成する場合はシステム内のデータ転送(=Master Slave間のデータ転送) と NAS本体としてのデータ転送 (=外部 Master間のデータ転送) に別のEthernet を使う設定にすれば、従来と同じ転送速度が実現できそうな雰囲気です。

実験の準備

実験には OMV5で動作する Master、 Slave 、HP Gen8 2台を使用します。OpenMediaVault5で RAID Z, RAID Z2 を実現【Part 3】で作った USBメモリーを Master 、Slave 用に2個用意します。【追加 & 致命的バグの修正 2023年2月20日】は重要なバグフィックスですので、必ず、実行して下さい。

次のプリ設定に必要になるので、拡張機能設定ファイルを準備します。 OpenMediaVault-Plugin-Developers/packages からpackages-master.zip をダウンロードして展開、”openmediavault-omvextrasorg_latest_all5.deb” ファイルです。

Master USBメモリー、 Slave USBメモリー プリ設定

この実験用に MasterUSBメモリ、SlaveUSBメモリを設定していきます。

Masterは、高速データ転送用 eno1-M、eno2-M Remote Console用 iLO-Mを持ち、同様に Slave は eno1-S、eno2-S、iLO-Sを持ちます。実験で使ったIPアドレス等のパラメータは以下です。原理を理解すれば、もちろん自由にアドレスを変えて良いです。

 

HP Gen8 Master
ホスト名-M openmedia-41
iLO-M IPアドレス 192.168.11.40
eno1-M IPアドレス 192.168.11.41
eon2-M IPアドレス (192.168.11.42)*注1
HP Gen8 Slave
ホスト名-S openmedia-51
iLO-S IPアドレス 192.168.11.50
eno1-S IPアドレス 192.168.11.51
eno2-S IPアドレス (192.168.11.52)*注2

 

注1: 注2: このアドレスは実験中に必要になる。最終的には特に設定しても、しなくとも良くなる。

まず、Master用 USBメモリーをプリ設定して行きます。OpenMediaVault5で RAID Z, RAID Z2 を実現【Part 3】の続きで、Web ブラウザに Remote Console に表示されていた IP アドレスを入力し OMV5 にログインする。

言語 : 日本語

ユーザー名 : admin

パスワード : openmediavault  でログインする。

 

以下を順に設定する。

一般設定  自動ログアウトを無効にする。
日付と時刻   NTPサーバー使用を有効  タイムゾーンをJapanにする。
ネットワーク  一般設定  ホスト名を openmediavault → openmedia-41 に変更する

ネットワーク  インターフェース  eno1を画像赤枠内に編集して保存
 eno1-M IP : 192.168.11.41      → 192.168.11.41 で 再ログイン

ネットワーク  インターフェース  eno2を画像赤枠内に編集して保存
 eno2-M IP : 192.168.11.42
アップデート管理  アップーデート パッケージ情報 → インストール
 これで、最新のlinux-iamgeになる。
プラグイン アップロード
 ファイル : openmediavault-omvextrasorg_latest_all5.deb アップロード 
 プラグインリスト openmediavault-omvextrasorg x.x.x を インストールOMV-Extras が表示されたら成功 (同時にプラグインリストも増えている)
プラグイン
 プラグインリスト openmediavault-flashmemory x.x.x をインストール
   → Flash Memory が表示されるので、説明に従って、Flash Memory の設定をする。
 (設定の最後の行で swapをswipeして消去しているが、これを実行するとブート時に
 "mdadm: No arrays found in config file or sutomatically" なる警告が出て
 鬱陶しいので、最後の行は実行せず swap 領域は残してある。)

Master用 USBメモリー プリ設定は以上。

次に Slave用 USBメモリーもプリ設定する が、同様なので説明は省略する。

Master USBメモリー設定

最初にHP Gen8 Master を再起動する。再起動後は  Web画面に192.168.11.41 を入力 OMV5管理画面を表示。SSH端末(以下 端末)から ホスト openmedia-41でCUI画面を開いておく。SSH端末は何でも良いが 私は Google chrome を SSH 端末にする  を便利に利用している。

端末で起動状態確認ファイルを記録。

# systemd-analyze plot > master_plane.svg      後でWebブラウザで確認する(メモ1)

端末から AOEツール、マニュアルソフト、日本語ページ をインストール

# apt-get install aoetools
# apt-get install man
# apt-get install manpages-ja

再起動

端末で起動状態確認ファイルを記録。

# systemd-analyze plot > master_aoetools.svg  後でWebブラウザで確認する(メモ1)   

Slave USBメモリー設定

最初にHP Gen8 Slave を再起動する。再起動後は  Web画面に192.168.11.51 を入力 OMV5管理画面を表示。端末から ホスト openmedia-51でCUI画面を開いて置く。

端末で起動状態確認ファイルを記録する。

# systemd-analyze plot > slave_plane.svg    後でWebブラウザで確認する(メモ1)   

端末から vbladed、マニュアルソフト、日本語マニュアル をインストール

# apt-get install vblade
# apt-get install man
# apt-get install manpages-ja

再起動

端末で起動状態確認ファイルを記録。

# systemd-analyze plot > slave_vbladed.svg  後でWebブラウザで確認する(メモ1)
メモ1 : sytemd-analyze plot > このコマンドでリナックスのシステム立ち上がり時のドライバやサービスプログラムの組み込み内容を解析できる。xxxx.svg をWebでグラフィカルに見る事により、ドライバや各サービスプログラムの名前、組み込みの有無、順番、組み込み時の所要時間 等 有用な情報を知る事ができる。xxxx.svg は後の解析時に便利なので、データとして残す習慣を付けると良い。ちなみに、記事中では解析が必要な所はない。(記事外では解析の参考にしている。)

実験開始

HP Gen8 Master、 HP Gen8 Slave を連動して実験を開始します。両PCと ハードディスクはまだ繋がないで USBメモリーのみで動かします。従って両PCと最初のブロックデバイスは sda のみとなります。参考資料 (1) のコマンドの動作を大体で良いので把握して下さい。理解の助けになるので man aoe-stat,  man aoe-interfaecs, man vblade  など man コマンドを積極的に使って動作を読んでおきます。

以下に、Part1 Part2 で使うスクリプト群を置いておきます。

実験用 小道具ハード、小道具ソフト

実験時に Slave の sdb sdc sdd ディスクとして用いる USBメモリー3つ を用意する。各USBは FAT32でフォーマットしておき、ルートには それぞれDISK_B~DISK_D 名のファイルを持ちます (ファイルの内容は問わない)。これをDISK_B~DISK_Dに見立てて、マウント、アンマウントの実験をします。sdb – DISK_B, sdc – DISK_C, sdd – DISK_D の順が入れ替わらない様に立ち上げ時に順に挿すなどして管理して下さい。

超簡単な実験用スクリプト LoopTest.sh を作ります。Master の /sbin 下に置いておきます。(メモ2)  

LoopTest.sh list で実行するコマンドのリストを表示、 ループ動作は LoopTest.sh execute で始まります。

メモ2:スクリプトの名前の付け方プログラムやシェルスクリプトを自分で作ると便利だが、作った内容やファイル名を忘れてしまう。過去に作ったプログラムやスクリプトが一目でわかると、考え方や動作解析の助けになります。スクリプト名は大文字ではじめ、必ず XxxXxxx.sh と命名、最後を.shにする。変わった命名の特徴を持つ事で、自分が作ったか分かります。また、find / -name *.sh で探せるので検索も簡単になります。

実験1 Slaveのディスク (USBメモリー) を devicename eX.Y に設定する。

Master Slave とも 再起動 して SSH 画面を開きます。この時、Slave側は sdb sdc sdd の USBメモリーを正しい順で認識させておきます。まず Master 側で LoopTest.sh execute を実行すると

となる、ここで devicename e1.0 e2.0 e3.0 に Slave側の sdb, sdc, sdd を設定する為 SSH(Slave)で

# vbladed 1 0 eno2 /dev/sdb
# vbladed 2 0 eno2 /dev/sdc
# vbladed 3 0 eno2 /dev/sdd

を入力すると

e1.0  e2.0  e3.0 の devicename が認識される。この時 vblade コマンドでは思い通りの動作にならなかった。vbladed コマンドでは思い通りの動作なので、以後 vbladed コマンドのみを使う。aoe-stat の 一行目 は

な 感じに理解している。

実験2 一つのディスク を 異なるdevicename e1.0  e2.0 に設定する。

再起動して、MasterでLoopTest.sh executeを実行。Slaveで

# vbladed 1 0 eno2 /dev/sdb
# vbladed 2 0 eno2 /dev/sdb

を入力すると

e1.0p1  e2.0p1 とも DISK_B が読み出せる。一つのディスクを複数の devicename に設定可能

実験3 異なるディスク を 同一の devicename e1.0 に設定(上書き)する。

再起動して、MasterでLoopTest.sh executeを実行。Slaveで

# vbladed 1 0 eno2 /dev/sdb
# vbladed 1 0 eno2 /dev/sdc

を入力すると、うまく動作する様に見えて、暫く見ていると DISK_B と DISK_C が入れ替わったり、エラーになったりしながら、最終的には暴走する

考えて見れば当然だが、同一 devicename に上書きは出来ない

実験4 使用Ethernetのチャンネルをソフト的に限定する。

aoe-stat の一行目では、Maste側での使用可能な Ethernet のチャンネルは eno1 eno2 になっているが、使用するEthernet チャンネル(使用経路)はコマンドで限定できる。再起動後、最初に以下のコマンドを実行して使うチャンネルを限定する

# aoe-interfaces eno2         使用チャンネルを eno2 に限定する

その後、実験1の設定をする

となり Master側は eno2 にEthernet チャンネルが限定される。

実験5 使用Ethernetのチャンネルをハード的に限定する。(直接接続する)

Master側 eno2 を Slave側の eno2 に ネットワークハブを介さず、直接接続すると 物理的に接続チャンネルを限定できる。(当たり前だか..) 接続はストレートケーブルでも、クロスケーブルでもポートが自動極性判定してくれるので、使用可能です。再起動後 実験1の設定をすると

となり、eno2 に Ethernet チャンネルが限定される。この場合 ネットワークハブポートも2個節約できる。

実験結果

実験の結果を受けて、eno2-M と eno2-S を直結する。

これで、2ポート節約できる。AOEプロトコルでは eno2-M, eno2-S の IPアドレスは必要ないが、あっても不都合はないので当面変更せず、必要があれば変更する事にする (メモ3) 。なお使用ポート削減については別途 検討するので、(Part3で検討するので) 当面は “ネットワークハブを4ポート使用”で話を進める

実験の結果を受けて、設定の2度書きを避ける 為に再起動は必ずMaster機 Slave機 同時に行う 事を運用ルールとする。

【メモ3: AOEプロトコル使用のポート条件AOEプロトコルはIPポートで直接データがやり取りされるので、特にTCP/IPの設定が無くてもプロトコル上は良いのだが、OMV5でポートとして明示的に設定がないと使用できない、恐らくポート設定をしないとハードウェアとしても動作しない為ではないかと推定する。要はDHCPかスタティクの設定が必要。一方、eno1,eno2 に同時にスタティクアドレスを設定すると、OMV5が立ち上がらない事が頻発する。理由は不明だが、無理に設定する必要もないので、eno1-スタティク eno-2 -DHCPとかで動作するなら、それで問題はない。

Part2 で 再起動時に自動設定 の仕組みを入れていく (= vbladed コマンドを自動で実行する)

Part 2  へ続く

タイトルとURLをコピーしました