見積依頼・お問合せ

株式会社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であれば運用継続できます。