2018年2月15日

ブロードバンドタワーで Scality RING を担当しているポールです。
2017年に Lustre の HSM 機能と Scality RING の組み合わせを試しましたので、そのレポートになります。

Lustre の HSM の構築を試したきっかけ

Lustre (ラスター)は HPC(High Performance Computing) 分野で主に用いられている大規模並列ファイルシステムになります。詳しくはインターネット検索で調べていただければと思いますが、一言で説明するならば、「スパコンで使用するファイルシステム」です(「 スパコン ファイルシステム Lustre 」でインターネット検索していただければ、皆様が聞いたことのあるスパコンの名前が多数ヒットするものと思います)。昨今のスパコンで行う演算ではペタバイト規模のデータを扱うわけですが、それらを高速に読み書きするためのストレージ装置には、10GByte/sec を軽く越すファイル I/O 性能が当たり前に求められます。この性能を身近なもので例えると、高画質の2時間もの映画を格納したブルーレイディスク1枚分のデータを数秒で読み書きできる程の性能になります。この規模の I/O 性能は1台のストレージサーバだけで提供することはまず無理で、実際には数百台を越すストレージサーバを用いて分散構成のストレージを作ります。

つまり、Lustre はとても高性能&お金がかかるストレージ構成で主に使われているファイルシステム、と言えます。そこでポイントになるのが、お金のかかるストレージ構成をより効率よく使いたい、という発想です。世界で1番とは言わないまでも、とにかく性能を出したいスパコンの環境で使うファイルシステムですから、分析処理が終わって使わなくなった Lustre 上のデータをもっと安上がりなストレージ上に一時的に移動したり、別の分析処理のために再度必要になったデータを Lustre 上に戻したり、ということをスムーズに行えなければ、データの保存にお金がいくらあっても足りません。このようなユーザ側の需要に基づいて、Lustre には階層型ストレージ管理(HSM)の機能が組み込まれています。

・・・というような話は、私の業務領域とスパコンの世界との間にものすごく距離があったため、これまで全く気にすることはなかったのですが、2017年10月の Scality SDS Day 2017 に弊社が出展した際に、Lustre の HSM 機能と Scality RING を組み合わせるにはどうすればよいのか?というご質問を来場されたお客様から突如いただいてしまいました。その時は私がまだ今ほど Lustre をわかっていないので、Scality RING 側の機能説明をして RING で何ができるのかをお客様にご理解いただいたのですが、実際のところ何がどうなるのだろう?という疑問は消えませんでした。その場にいた某本部長から「ポールさん、いい機会だから Lustre を調査してみたら?」という後押しもあり、 Lustre の HSM 機能に関する調査を行った次第です。

Lustre HSM 機能の参考資料

Lustre の HSM についての概要をこの記事の中で説明するのはとてつもなく大変です(そもそも Lustre の概要も説明しだすとキリがありません)。なので、そこは勇気をもって省略してしまいます。とはいえそれではさすがに無責任すぎますので、興味のある読者の方は LUG(Lustre User Group)2010 で発表されているこちらの Lustre HSM Project 資料をご覧ください。以降の説明で出てくる用語の大半が出ていますので、理解の助けになるものと思います。私もこの資料を読んで、かなり頭の中を整理できました。

また、Lustre のロードマップも公開されていますので、参考にしてください。こういう機能強化が予定されているんだな、という感覚がつかめると思います。

Lustre の HSM 機能を動かすために最低限必要なものを整理

まずは Lustre を構築する必要があります・・・はい、ここで疑問に思った方もいると思いますので補足します。Lustre そのものは GPL 2.0 ライセンスで提供されている Community Release という形態が存在するため、実は基本的な機能は誰でも無料で使えるのです。ただし数億円するスパコンでは Community Release をそのまま使わずに、Intel 社がサポート含めてコンピュータメーカーに提供している Lustre を用いたり、大手コンピュータメーカーが自社のスパコン向けに機能拡張を行った特殊な Lustre を用いるため、Lustre の利用には相応のお金がかかります。しかし、今回のような性能を求めない HSM の機能調査程度であれば Community Release の Lustre で問題ありませんので、数億円するスパコンは必要なく、お手軽に試すことが可能です。Community Release の Lustre と、スパコンで用いる Lustre は厳密には同じものではありませんが、分散ファイルシステムとしてのアーキテクチャには大きな違いがありませんので、Community Release で確認した HSM 動作はスパコンでの Lustre でも応用可能と考えています。とはいえ区別は必要ですからここに明記しますが、本ブログ記事の以降の Lustre に関する記述は、Community Release をベースにしています。

Community Release の2017年12月時点での安定版は lustre-2.10 系が最新になります。これを動かすには、Linux が動作するサーバが最低でも3台必要でした。それぞれの役割は次のものです。

  • MGS/MDS サーバ: Lustre のメタデータを MDT 内に保存し、coordinator が動作
  • OSS サーバ: Lustre の実データを OST 内に保存
  • クライアント:HSM 機能の Agent として動作し、copytool を動かす

coordinator は MDT 内に登録された HSM 要求をまとめて Agent に渡す役割です。copytool は HSM 要求を実際に処理するソフトウェアで、ストレージベンダーが各社のストレージ用に用意しているものもありますが、今回は Lustre のクライアントに標準で含まれている、lhsmtool_posix というものを使いました。lhsmtool_posix は、クライアントが動作する Linux サーバでマウント可能なファイルシステムを HSM 用の外部ストレージとして利用可能にします。Linux サーバで利用可能なファイルシステム(およびストレージデバイスと接続方式)は多数ありますから、速度やデータ保護を気にしなければ何でも(それこそ USB メモリや SDカードですら) HSM 用のストレージ領域として使えます。

コマンドベースで Lustre 上のファイルの HSM を行うだけならば上記だけでも十分ですが、利便性を考慮すると HSM 動作をポリシーベースで管理する必要があります(例:最終変更から30日過ぎたファイルを自動的にアーカイブする)。そのためには、追加でもう1台の Linux サーバが必要でした。

  • クライアント:HSM 機能のポリシー管理ツールを動作させる

今回は HSM 機能のポリシー管理ツールとして、Robinhood というソフトウェアを利用しました。Robinhood は CEA(フランス原子力庁)の HPC 部門が開発したもので、CeCILL-C ライセンスが適用されています。

最後に、HSM の階層として今回は Scality RING を用いました。最小構成としては、

  • Supervisor:Linux サーバ 1台
  • Storage Server 兼コネクタ:Linux サーバ 6台

の合わせて7台が必要になります。今回は予め構築済みの RING を使用し、1台の Storage Server 上で NFS コネクタを設定して、Agent/Copytool が動作する Lustre クライアントに NFS マウントさせました。

ということで、合計で Linux サーバを 11台使用しました。動作確認程度ならば超高性能である必要はありませんので、すべて仮想マシンで構いません。メモリを相応に積んだ物理サーバが1-2台あれば構築可能だと思います。全体図は以下のようになります。

Lustre HSM を Scality RING と組み合わせたテスト環境の全体図
Lustre HSM を Scality RING と組み合わせたテスト環境の全体図 (赤線がデータの流れ)

Lustre で使用するネットワーク

超高性能な Lustre の基盤をスパコン用に作る場合は伝統的に InfiniBand を使うケースが多いようなのですが、今回目指している動作確認程度であれば、Ethernet で動かせます。今回は仮想マシンの仮想 NIC を用いた Ethernet 接続を使用しています。

Lustre 用仮想マシンの準備

仮想メモリを4GB、vCPU を2つ、仮想NICを1つの仮想マシンを4つ用意してください。
MGS/MDS, OSS 用の2台には仮想ディスクを少なくとも1つずつ追加する必要があります (MDT,OST用) 。大容量のデータでテストする必要がなかったので、MDT と OST にはそれぞれ 16GB の仮想ディスクを用意しました。

Linux の導入

今回は 2017年10月にリリースされた lustre-2.10.1 を CentOS 7.4 上で使用しました(ブログ執筆中に lustre-2.10.2 および lustre-2.10.3 がリリースされました)。なお Lustre を動かす Linux では Linux kernel バージョンに依存したパッケージ(例: kernel-3.10.0-693.2.2.el7_lustre.x86_64.rpm )を導入しますので、安易に yum update してしまうと Linux kernel バージョンが上がってしまい、想定していた Lustre の kernel パッケージ群をインストールできなくなりますのでご注意ください。Lustre のバージョン次第では、最新より少し古い Linux を導入する必要があります。Linux をインストールする前に、導入予定の Lustre バージョンに含まれる kernel パッケージを確認してください。

Lustre パッケージの導入

こちらの内容に沿って導入を進めます。まず Lustre のリポジトリをサーバ4台に設定します。/etc/yum.repos.d/lustre.repo を次の内容で作成します。下記の baseurl では最新安定バージョンが導入されますので、バージョンを指定したい場合は適宜 baseurl を修正してください (その場合は lustre-server, lustre-client の latest-release だけを変更します)。

[lustre-server]
name=lustre-server
baseurl=https://downloads.hpdd.intel.com/public/lustre/latest-release/el7/server
# exclude=*debuginfo*
gpgcheck=0

[lustre-client]
name=lustre-client
baseurl=https://downloads.hpdd.intel.com/public/lustre/latest-release/el7/client
# exclude=*debuginfo*
gpgcheck=0

[e2fsprogs-wc]
name=e2fsprogs-wc
baseurl=https://downloads.hpdd.intel.com/public/e2fsprogs/latest/el7
# exclude=*debuginfo*
gpgcheck=0

MGS/MDS, OSS サーバ用の2台にはサーバ用パッケージを導入します。今回の目的では ZFS は不要でしたので LDISKFS のみの手順になります。

yum --nogpgcheck --disablerepo=* --enablerepo=e2fsprogs-wc install -y e2fsprogs
yum --nogpgcheck --disablerepo=base,extras,updates \
--enablerepo=lustre-server install -y \
kernel \
kernel-devel \
kernel-headers \
kernel-tools \
kernel-tools-libs \
kernel-tools-libs-devel

kernel の更新が入るので、Linux を再起動します。

reboot

LDISKFS を使うための lustre パッケージを導入します。

yum --nogpgcheck --enablerepo=lustre-server install -y \
kmod-lustre \
kmod-lustre-osd-ldiskfs \
lustre-osd-ldiskfs-mount \
lustre \
lustre-resource-agents

lustre モジュールが問題なくロードできることを確認し、モジュールをアンロードします。

modprobe -v lustre
lustre_rmmod

クライアントの2台についてはこちらの手順でパッケージを導入します。Lustre のクライアントパッケージについては Lustre 用のパッチがあたった Linux カーネルを必要としないため、柔軟に Linux カーネルバージョンを選べますが、今回は念のため MGS/MDS,OSS の2台とLinux カーネルバージョンを合わせました。VERの値は Lustre-2.10.1 がリリースされた当時の Linux カーネルバージョンなので、動作環境の Linux カーネルバージョンが異なる場合は適宜値を変更してください。

VER="3.10.0-693.2.2.el7"
yum install \
kernel-$VER \
kernel-devel-$VER \
kernel-headers-$VER \
kernel-abi-whitelists-$VER \
kernel-tools-$VER \
kernel-tools-libs-$VER \
kernel-tools-libs-devel-$VER

Linux カーネル関連のパッケージを更新したので、Linux を再起動します。

reboot

Lustre クライアントパッケージの導入は DKMS の手順を採用しました。

yum install epel-release

yum --nogpgcheck --enablerepo=lustre-client install \
lustre-client-dkms \
lustre-client

Lustre クライアントのモジュールがロードできることを確認し、アンロードします。

modprobe -v lustre
lustre_rmmod

本記事は続きがあります!

この段階ではまだ Lustre ファイルシステムを作成していないので、Lustre の構築が終わっていません。ですが、記事の文字数も多くなってきましたので、続きは次回の記事とさせていただきます。乞うご期待!

本ブログの情報につきましては、自社の検証に基づいた結果からの情報提供であり、
品質保証を目的としたものではございません。

投稿者: ポール

ブロードバンドタワーで Scality RING を主に担当。ストレージ業界の知り合いからはポールと呼ばれているが、本人も由来はよくわからない。得意領域はデータベースとストレージ。