コンテンツに飛ぶ | ナビゲーションに飛ぶ

パーソナルツール
セクション
現在位置: ホーム Lustreファイルシステムの導入

Lustreファイルシステムの導入

LustreFSの導入方法に関するメモ

並列分散ファイルシステム"Lustre 2.1.3"を導入してみました。
下に導入に関するメモを記載しますが、Lustreのマニュアルに詳しい内容の記載が
すでになされています。下のメモはあくまでも参考程度にとどめて、Lustre導入時は
マニュアルをよく読んで行って下さい。

環境

用意したマシンは次の2台です。
  • CentOS6.3(x86_64):Lustreマネージメントサーバー(MGS)兼オブジェクトストレージサーバ(OSS)
  • CentOS6.3(x86_64):Lustreクライアント
上記のマシンは1000BASE-TXのハブで接続されています。


rpmファイルのダウンロード

Whamcloudから"DOWNLOAD Lustre"をクリックしてダウンロードサイトのページを開きます。
Lustre Communityへの参加と登録情報の記入フォーマットが現れますが、記入しなくても大丈夫です。
"Software Download site"をクリックすると"Lustre Releases"
というページにたどり着きます。
今回はバージョン2.1.3を選びました。
  • 1.8.xは大きな容量のHDDの扱いができない
  • 2.3.xは地雷を踏む可能性が高い
というのが選択の理由です。
インストールに先立って、このページから必要なrpmをダウンロードしておきます。


Lustreサーバのインストール

マニュアル8章の"Installing the Lustre Software"の記述を参考(必ずしも従っていません)にして
インストール作業を行っていきます。

e2fsprogsパッケージのアップデート
[root@server]# rpm -Uvh e2fsprogs-< ver > e2fsprogs-libs-< ver > libcomm_err-< ver > libss-< ver >

< ver > にはバージョン番号などが入ります。適宜読み替えて下さい。

カーネル、モジュール、ldiskfsのインストール
[root@server]# rpm -ivh kernel-< ver > kernel-firmware-< ver > lustre-modules-< ver > lustre-ldiskfs-< ver >

必要であればgrub.confの編集をしておきます。
SELinuxを無効化しておきます。無効化の方法はここに記載しておきました。
Lustreは988ポートを使うので、必要であればiptablesなどで988ポートからのパケットを受信できるように設定しておきます。

Lustre utilitiesのインストール
[root@server]# rpm -ivh lustre-< ver >


Lustreクライアントのインストール

LustreのマニュアルはLustreのクライアントモジュールとクライアント用utilitiesのインストールだけで
済むような記述になっていますが、実際にはkernelのインストールも必要になります。
kernelのrpmは理研なら、
http://ftp.riken.jp/Linux/centos/6.3/updates/x86_64/Packages/
にあります。

[root@client]# rpm -ivh lustre-client-modules-< ver > kernel-< ver > kernel-firmware-< ver >
[root@client]# rpm -ivh lustre-client-< ver >

ここでも必要であればgrub.confの編集をします。上でインストールしたkernelで起動するようにしておいて下さい。
SELinuxの無効化と988ポートの受信の許可をしておきます。

ここまでの作業が終わったら、サーバとクライアントの再起動を行います。


Lustreの設定

マニュアル10章の"Configuring Lustre"を参考にしてLustreの設定を行います。

lustre-iokitにsgpdd_surveyなどのテスト用スクリプトが用意されているので、必要であれば事前にテストを行って下さい。
lustre-iokitにあるsgpdd_surveyはそのままでは実行できなくて、sg_readcapに関する行を書き直す必要があります。
sgpdd_surveyを利用する場合は、sg_readcap -b を sg_readcap -b -l と書き換えて下さい。
まず、MGSでMGS/MDTファイルシステムを構築します。
[root@server]# mkfs.lustre --fsname=< fsname > --mgs --mdt --index=0 < block device name >

ここでfsnameにはファイルシステムの名前が入ります。何も記入しなければデフォルトのlustreがfsnameとして
選ばれます。block device nameにはメタデータ用のブロックデバイス名を記入して下さい。たとえば/dev/sdbなどが入ります。
ファイルシステムの構築が終わったらMGS/MDTファイルシステムをマウントします。
[root@server]# mount -t lustre < block device name > < mount point >

block device nameにはさきほどのブロックデバイス名(例だと/dev/sdb)が、mount pointにはマウントするディレクトリ
が(たとえば/mnt/mdt)が入ります。

次にOSSでファイルシステムの構築を行います。今回は一台のマシンでMGSとOSSを兼ねているのでMGSと同じマシン上での作業になります。
[root@server]# mkfs.lustre --fsname=< fsname > --mgsnode=< NID > --ost --index=< OST index > < block device name >

fsnameにはMGS/MDTファイルシステムと同じ文字列を入れて下さい。block device nameには、OSSが管理する
ブロックデバイス名を記入して下さい(例えば/dev/sdc)。NIDにはMGSのIPアドレスと通信方法を記入して下さい(例えば192.168.10.100@tcp0)。
OST indexにはMGSの管理下にあるOSTの番号をいれて下さい。最初のOSTの場合"--index=0"と指定することになります。
ファイルシステムの構築が終わったらOSTをOSSにマウントします。
[root@server]# mount -t lustre < block device name > < mount point >

サーバ側(MGS/OSS)の設定は以上です。

LustreクライアントでLustreファイルシステムをマウントします。
[root@client]# mount -t lustre < MGS node >:/< fsname> < mount point >

斜体の文字には例えば次のような文字や数字が入ります。
[root@client]# mount -t lustre 192.168.10.100@tcp0:/lustre /lustre

クライアント側でマウントが無事できれば設定は終了です。


テスト

ベンチマークテストプログラムbonnie++を使ってベンチマークを取ってみました。
利用したbonnie++のバージョンは1.03eです。メモリサイズを256MB(-r 256)、最大ファイルサイズを512MB(-s 512)として実行しました。
つまり、
[user@client]$ ./bonnie++ -d /mount/point/lustre/user -s 512 -r 256

を実行しました。結果は以下の通り。

Sequential Output
Per Chr: 99613 KB/sec
Block: 119352 KB/sec
Rewrite: 112251 KB/sec

Sequential Input
Per Chr: 128338 KB/sec
Block: 1221347 KB/sec

Random
Seeks: 7472 B/sec

Sequential Create
Create: 1167 /sec
Read: 1123 /sec
Delete: 1847 /sec

Random Create
Create: 1169 /sec
Read: 1120 /sec
Delete: 1899 /sec

これを見ると、連続書き込みについてはネットワークのバンド幅上限まで性能が出ているようです。
連続読み込みはネットワークのバンド幅を大きく超えて性能が出ています。たぶんクライアント側のキャッシュに
データがのってしまったのだと思います。
その他の結果もまずまずのよう。ボンディングやストライピングをすればまだまだ性能が出そうです。


参考にしたウェブページ