技術情報
GlusterFSの概要と導入手順について
株式会社HPCソリューションズ
2012年11月15日
GlusterFSは2011年にRedHatが買収し、2012年からRedHat Storage 2.0 というオペレーティングシステムとして販売されています。 オープンソースとして開発されているため、FedraやCentOS用のrpmも公開されており、手を出し易い並列ファイルシステムです。 この報告ではGlusterFSの概要を紹介し、CentOSを使った導入手順を紹介します。
1. GlusterFSの特徴
GlusterFSには以下の様な特徴があります。
FUSEによる実装
FUSEとはFilesystem in Userspaseのことで、一般的なアプリケーションと同様にユーザ空間で稼働するファイルシステムの実装の仕組みです。 Lustreの様なkernel依存性がなく、導入が容易です。 ドライバより上のレイヤーでの実装になるため、パフォーマンスは低いといううわさもあります。
RDMA対応
サーバ間、サーバ-クライアント間通信はTCPとrdma(インフィニバンド)に対応しています。 ただし、最新バージョン3.3.xではrdmaに非対応です。 この点については情報が少なく、今後、rdma非対応が標準となるのか不明です。
NFSクライアントに対応
独自のクライアントプロトコルを持っていますが、GlusterFSのサーバはNFS 3.0サービスにも対応しています。 つまり、Linux以外のOS(SolarisやAIXなど)の場合もGlusterFSをNFSマウントすることが出来ます。
多彩なボリューム構成方式
Distribute、Stripe、Replicaの三方式に対応します。 更にこれらの組合せた方式での構成も可能です。
Geo-Replication
遠隔地とのレプリケーションを想定しています。 いわゆるディザスタ・リカバリなどのシステムとしても利用できそうです。
2. GlusterFSのボリューム構成
GlusterFSの基本的な3つのボリューム構成は以下の通りです。
Distributed Volume
デフォルトのボリューム構成方式です。Distributed Volumeはファイル書込みがあると構成するブリックのどれかにファイルを配置します。 ブリックのサイズを超えるファイル書込みは出来ません。 総容量はブリックの合計容量になります。サーバかブリックに障害が発生した場合は、そのブリックの内容は参照できませんが、その他のブリックのファイルは参照することが出来ます。 以下はブリックが3つの場合の例です。

Striped Volume
書き込まれたファイルをストライプサイズ(デフォルト128KB)に分割し、ブリックに分散配置します。 Lustreファイルシステムとよく似た方式です。 ただし、Lustreではディレクトリ単位でOST(GlusterFSの場合ブリック)の数やストライプサイズを変更できますが、GlusterFSではボリューム単位で設定します。

Replicated Volume
2つのブリックで構成しブリック間でミラーリングを行います。 ボリュームの容量に対し、ブリックの合計容量は倍必要になりますが、片方のブリックが障害などで停止した場合も運用を継続できるメリットがあります。 ※Replicaは3つ以上作ることも出来ますが、パフォーマンスが悪いという話もあります。確認は出来ていません。

3種類のボリューム構成は一長一短があります。 Replicated Volumeの信頼性は捨てがたいが、Distributed VolumeやStriped Volumeのスケールアウト型パフォーマンスも捨てがたい、という要求は少なくないでしょう。 GlusterFSではReplicated Volumeを連結してDistributed Replicated Volumeという複合的なボリュームを構成することが出来ます。 実際の構築ではReplicaを作ってからDistribute構成にするわけではなく、構成できるパターンには制限があります。 GlusterFSのマニュアルでは以下の4種類の複合的なボリューム構成が紹介されています。
Distributed Striped Volume
Distributed Replicated Volume
Striped Replicated Volume
Distributed Striped Replicated Volume
3. GlusterFSの導入手順
GlusterFSのインストール方法と簡単なボリューム構成の作成手順を紹介します。 ここで紹介するのはEPEL (Extra Packages for Enterprise Linux)を使って、yumインストールする方法です。 OSはCentOS6.3、インターネットが参照できることを仮定します。
サーバにGlusterFSのrpmを導入
サーバは2台以上あるはずですが、同じようにインストールして下さい。 まずはEPELのレポジトリを追加しましょう。 EPELで公開されているGlusterFSのrpmはVer. 3.2.xです。 現在(2012年11月)、GlusterFSの最新版はVer. 3.3.1ですが、rdma非対応なこともあるので、ここでは3.2のインストールを行います。 下記では理研さんのレポジトリを使わせて頂きました。
rpm -ivh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm
これでEPELからyumインストールが出来る様になりました。 続けてGlusterFSのrpmをインストールします。 サーバの場合は以下の4つのrpmをインストールします。
# yum install glusterfs glusterfs-fuse glusterfs-rdma glusterfs-server
GlusterFSのデーモンが再起動時に起動する様に設定してください。 Ver. 3.2.xでは2つのデーモンがあります。 Ver. 3.3.xでは1つに集約されています。
# chkconfig glusterfsd on # chkconfig glusterd on # /etc/init.d/glusterd start # /etc/init.d/glusterfsd start
GlusterFSのボリュームを作成
各サーバの/dev/sdb1がGlusterFSのブリックとして利用できるとします。 ブリックはディレクトリで指定できますが、i-nodeサイズを512B(default 256B)にしてフォーマットしておく必要があります。 ext4でフォーマットする時は以下の様にフォーマットします。
# mkfs.ext4 -I 512 /dev/sdb1
フォーマットが終わったら、/data/brick01としてマウントして下さい。 ディレクトリ名は何でも結構です。 それではいよいよボリュームを作成します。 今回はStriped Volumeを2台のサーバ(gsrv01、gsrv02)の同じフォルダ名/data/brick01で作ることにします。 インターコネクトはインフィニバンド(rdma)を指定します。 以下のコマンドを先頭サーバ(gsrv01)で実行して下さい。
# gluster volume create vol01 stripe 2 transport rdma gsrv01:/data/brick01 gsrv02:/data/brick01 Creation of volume vol01 has been successful. Please start the volume to access data.
ここで、vol01がこのボリュームの名前になります。 作成に成功すると上記の様なメッセージが出てきます。 作成出来たら、glusterfsとしてのサービスを開始します。
# gluster volume start vol01
vol01の設定情報は以下の様に参照します。
# gluster volume info vol01 Volume Name: vol01 Type: Stripe Status: Started Number of Bricks: 2 Transport-type: rdma Bricks: Brick1: gsrv01:/data/brick01 Brick2: gsrv02:/data/brick01
クライアントのGlusterFSインストールとマウント
クライアントにもEPELのレポジトリをインストールして下さい。(上述参照) レポジトリがインストール出来たら、GlusterFSのクライアント用rpmをインストールします。 クライアントは以下の3つのrpmをインストールします。
# yum install glusterfs glusterfs-fuse glusterfs-rdma
マウントはmountコマンドを使い、ファイルタイプにglusterfsを指定します。 NFSなどと同様に事前にマウント先ディレクトリを作ってください。
# mount -t glusterfs gsrv01:/vol01 /work01
起動時に自動的にマウントする場合は /etc/fstab に設定を記述して下さい。 基本的にNFSなどと同様です。 ネットワークが有効になってからマウントする様に「_netdev」オプションを付けた方がよいです。
gsrv01:/vol01 /work01 glusterfs defaults,_netdev 1 2
サーバ名はgsrv01を指定します。 もし、gsrv01が障害で停止した場合、gsrv02に引き継がれます。 今回のStriped Volumeだと不整合が起きますが、Replicated Volumeであれば運用継続できます。