ウェブサイト検索

GlusterFSを使用した高可用性ストレージサーバーの構成


2013年3月12日
by ルボス・レンデック

紹介

小規模な家庭ネットワークを管理している場合でも、大企業のためのエンタープライズネットワークを管理している場合でも、データストレージは常に懸念事項です。それはディスクスペースの不足や非効率なバックアップソリューションに関するものです。どちらの場合でも、GlusterFSは問題を解決するための適切なツールとなる可能性があり、リソースを水平および垂直にスケールすることができます。このガイドでは、分散および複製/ミラーリングされたデータストレージを構成します。名前が示すように、GlusterFSの分散ストレージモードは、データを複数のネットワークノードに均等に再配分することを可能にします。一方、複製モードは、すべてのデータがすべてのネットワークノード間でミラーリングされることを保証します。

GlusterFSとは何ですか

導入を読んだ後、GlusterFSが何であるかの大まかなアイデアを持っているはずです。これを、ネットワーク全体のすべての空きディスクスペースを集約するサービスとして考えることができます。それは、TCPまたはRDMAを介してGlusterFSがインストールされたすべてのノードを接続し、すべての利用可能なディスクスペースを単一のストレージボリューム(分散モード)に結合するか、すべてのノードの利用可能なディスクスペースの最大を使用してデータをミラーリングします(複製モード)。したがって、各ボリュームは複数のノードで構成され、GlusterFSの用語ではこれらをブリックと呼びます。

予備的な仮定

GlusterFSは任意のLinuxディストリビューションにインストールして使用できますが、この記事では主にUbuntu Linuxを使用します。ただし、このガイドはRedHat、Fedora、SuSeなどの任意のLinuxディストリビューションでも使用できるはずです。異なる部分は、GlusterFSのインストールプロセスのみです。

さらに、このガイドでは3つの例のホスト名を使用します:

  • ストレージサーバー1 - GlusterFSストレージサーバー
  • ストレージサーバ2 - GlusterFSストレージサーバ
  • ストレージクライアント - GlusterFSストレージクライアント

DNSサーバーまたは/etc/hostsファイルを使用してホスト名を定義し、このガイドにシナリオを調整してください。

GlusterFSのインストール

GlusterFSサーバーは、最終的なストレージボリュームに追加したいすべてのホストにインストールする必要があります。私たちのケースでは、storage.server1とstorage.server2になります。GlusterFSを単一のサーバーとして使用し、クライアント接続をNFSサーバーとして機能させることもできます。しかし、GlusterFSの真の価値は、複数のサーバーホストを一つとして利用する際にあります。両方のサーバーで以下のLinuxコマンドを使用してGlusterFSサーバーをインストールしてください:

storage.server1 $ sudo apt-get install glusterfs-server

そして

storage.server2 $ sudo apt-get install glusterfs-server

上記のコマンドは、両方のシステムにglusterfs-serverをインストールして起動します。両方のサーバーが実行中であることを確認してください:

sudo service glusterfs-server status

分散ストレージ構成

まず、GlusterFSの分散ボリュームを作成します。分散モードでは、GlusterFSはすべての接続されたブリックにデータを均等に分配します。たとえば、クライアントがGlusterFSマウントディレクトリにfile1、file2、file3、およびfile4というファイルを書き込むと、server.storage1にはfile1とfile2が、server.storage2にはfile3とfile4が含まれます。このシナリオは、以下の図を使用して示されています。

ピアプローブ

まず、両方のGlusterFSサーバーを互いに通信できるようにする必要があります。これは、信頼できるサーバーのプールを実質的に作成することを意味します。

storage.server1 $ sudo gluster peer probe storage.server2
Probe successful 

上記のコマンドは、storage.server2を信頼されたサーバープールに追加します。この設定は接続されているサーバー全体に複製されるため、他のサーバーで上記のコマンドを実行する必要はありません。これで、両方のサーバーには、以下のようなピア設定ファイルが利用可能になります:

cat /etc/glusterd/peers/951b8732-42f0-42e1-a32f-0e1c4baec4f1 
uuid=951b8732-42f0-42e1-a32f-0e1c4baec4f1
state=3
hostname1=storage.server2

ストレージボリュームを作成する

次に、2つのサーバーを使用して、それぞれのサーバー用の1つずつのブリックからなる新しいストレージボリュームを定義できます。

storage.server1 $ sudo gluster volume create dist-vol storage.server1:/dist-data \
storage.server2:/dist-data
Creation of volume dist-vol has been successful. Please start the volume to access data.

上記のコマンドは、2つのブリックからなるdist-volという新しいボリュームを作成しました。もしディレクトリ/dist-dataが存在しない場合は、上記のコマンドによって両方のサーバーに作成されます。前に述べたように、ボリュームに1つのブリックだけを追加でき、その結果、ClusterFSサーバーがNFSサーバーとして機能します。新しいボリュームが作成されたかどうかを確認するには:

sudo gluster volume info dist-vol

Volume Name: dist-vol
Type: Distribute
Status: Created
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: storage.server1:/dist-data
Brick2: storage.server2:/dist-data

ストレージボリュームを開始する

さて、私たちはあなたの新しい巻を始める準備ができました。

storage.server1 $ sudo gluster volume start dist-vol
Starting volume dist-vol has been successful
storage.server1 $ sudo gluster volume info dist-vol

Volume Name: dist-vol
Type: Distribute
Status: Started
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: storage.server1:/dist-data
Brick2: storage.server2:/dist-data

これで分散モードでのGlusterFSデータサーバーの構成が完了しました。最終的な結果は、2つのブリックからなるdist-volという名前の新しい分散ボリュームになります。

クライアントの設定

新しいGlusterFSボリュームを作成したので、GlusterFSクライアントを使用してこのボリュームを任意のホストにマウントできます。クライアントホストにログインし、GlusterFSクライアントをインストールします。

storage.client $ sudo apt-get install glusterfs-client

次に、新しい dist-vol GlusterFS ボリュームをマウントするマウントポイントを作成します。例えば、export-dist です。

storage.client $ sudo mkdir /export-dist

では、mountコマンドを使ってdist-vol GlusterFSボリュームをマウントできます:

storage.client $ sudo mount -t glusterfs storage.server1:dist-vol /export-dist

すべて準備が整っている必要があります。mountコマンドを使用して、GlusterFSボリュームが正しくマウントされているかどうかを確認してください:

mount | grep glusterf

GlusterFSの分散構成のテスト

すべての準備が整ったので、テストを始めることができます。クライアント側で、GlusterFSにマウントされたディレクトリに4つのファイルを作成してください。

storage.client $ touch /export-dist/file1 file2 file3 file4

GlusterFSは、すべてのファイルを取り込み、dist-volボリューム内のすべてのブリックに均等に再分配します。したがって、storage.server1には次のものが含まれます:

storage.server1 $ ls /dist-data/
file3  file4

および storage.server2 には次のものが含まれます:

storage.server2 $ ls /dist-data
file1  file2

もちろん、あなたの結果は異なる場合があります。

複製されたストレージ構成

レプリケートされたGlusterFSボリュームを作成する手順は、前に説明した分散ボリュームと似ています。実際、唯一の違いはClusterFSボリュームの作成方法です。しかし、もう一度最初から始めましょう:

ピアプローブ

まず、両方のGlusterFSサーバーを互いに通信できるようにする必要があります。これは、信頼できるサーバーのプールを実質的に作成することを意味します。

storage.server1 $ sudo gluster peer probe storage.server2
Probe successful

もしこれがすでに完了しているのであれば、このステップをスキップできます。

ストレージボリュームを作成する

このステップでは、レプリカボリュームを作成する必要があります。

sudo gluster volume create repl-vol replica 2 \ 
storage.server1:/repl-data storage.server2:/repl-data
Creation of volume repl-vol has been successful. Please start the volume to access data.

上記のコマンドの基本的な翻訳として、私たちは repl-vol という名前の複製ボリューム(レプリカ)を作成したということになります。コマンド内の数字 2 はストライプ数を示しており、このボリュームを拡張する際には、常にボリュームのストライプ数(2、4、8、16 など)の倍数に等しい数のブリックを追加する必要があることを意味します。

ストレージボリュームを開始する

新しい複製ボリュームを開始する時です。

sudo gluster volume start repl-vol
Starting volume repl-vol has been successful

ステータスを確認してください:

storage.server1 $ sudo gluster volume info repl-vol

Volume Name: repl-vol
Type: Replicate
Status: Started
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: storage.server1:/repl-data
Brick2: storage.server2:/repl-data

クライアントの設定

クライアントの設定は、分散ボリュームマウントのためにクライアントを設定するときと同じです。

クライアントをインストールする:

storage.client $ sudo apt-get install glusterfs-client

マウントポイントを作成する:

storage.client $ sudo mkdir /export-repl

リプルボリューム GlusterFS ボリュームを mount コマンドでマウントします:

storage.client $ sudo mount -t glusterfs storage.server1:repl-vol /export-repl

すべては今準備が整ったはずです。mount コマンドを使用して、GlusterFS ボリュームが正しくマウントされているかどうかを確認してください:

mount | grep glusterf

GlusterFSの複製構成のテスト

複製されたGlusterFSボリュームのポイントは、データがすべてのノードにシームレスにミラーリングされることです。したがって、/export-repl/にファイルを作成する際には、

touch /export-repl/file1 file2 file3 file4

すべてのファイルは両方のサーバーで利用可能です。

storage.server1 $ ls /repl-data/
file1  file2  file3  file4

そして

storage.server2 $ ls /repl-data/
file1  file2  file3  file4

GlusterFSボリュームの拡張

データストレージを追加のブリックを含むようにスケールアップする必要がある場合、そのプロセスは簡単です:

sudo gluster volume add-brick rep-vol storage.server3:/repl-vol storage.server4:repl-vol /export-repl

これにより、あなたのrepl-volにさらに2つのストレージブロックが追加されます。新しいブロックを追加すると、次のコマンドを使用してボリューム全体のバランスを再調整する必要があるかもしれません:

sudo gluster volume rebalance repl-vol  fix-layout start

そして、すべてのデータを次と同期/移行します。

sudo gluster volume rebalance repl-vol  migrate-data start

さらに、再バランスの進捗を確認することができます。

sudo gluster volume rebalance vol0 status

セキュリティ設定

上記の構成に加えて、特定のホストのみが信頼プールに参加できるようにすることで、ボリューム全体をより安全にすることができます。たとえば、10.1.1.10のホストのみがボリューム repl-vol に参加することを許可したい場合、次のLinuxコマンドを使用します:

sudo gluster volume set repl-vol auth.allow 10.1.1.10

サブネット全体が必要な場合は、単純にアスタリスクを使用します:

sudo gluster volume set repl-vol auth.allow 10.1.1.*

結論

GlusterFSは強力なGPL3ライセンスのソフトウェアです。単一のホスト上で二つの異なる物理デバイスをブリックとして定義することにより、GlusterFSボリュームを複製して、素早くソフトウェアRAID 1としても使用できます。もちろん、その作業にはソフトウェアRAIDを使用する方が良いですが、それでもその可能性はあります。私はGlusterFSを使いやすく、設定しやすいと感じました。

付録

ここでは、GlusterFSを使っている間に遭遇したいくつかのエラーとその回答を挙げます。

不正確なレンガの数

Incorrect number of bricks supplied 1 for type REPLICATE with count 2

ストライプ数が2のボリュームを作成した場合、その時点で少なくとも2つの追加ブリックを追加する必要があります。

ホスト storage.server1 は友達ではありません

Host storage.server1 not a friend

まず、グラスターファイルシステムサーバーを信頼のプールに追加してから、それをボリュームに含めることを試みてください。

関連記事: