ステータス:非推奨

この記事では、サポートされなくなったバージョンのUbuntuについて説明します。 現在Ubuntu12.04を実行しているサーバーを運用している場合は、サポートされているバージョンのUbuntuにアップグレードまたは移行することを強くお勧めします。

理由: Ubuntu 12.04は2017年4月28日に保守終了(EOL)に達し、セキュリティパッチまたはアップデートを受信しなくなりました。 このガイドはもう維持されていません。

代わりに参照してください:このガイドは参照として役立つ場合がありますが、他のUbuntuリリースでは機能しない場合があります。 可能な場合は、使用しているUbuntuのバージョン用に作成されたガイドを使用することを強くお勧めします。 ページ上部の検索機能を使用して、より新しいバージョンを見つけることができます。

序章


非常に多様なサーバーアクティビティには、冗長性と高可用性が必要です。 データストレージに関して単一障害点を持つことは、重要なデータにとって非常に危険な構成です。

多くのデータベースやその他のソフトウェアを使用すると、単一のアプリケーションのコンテキストでデータを分散できますが、他のシステムはファイルシステムレベルで動作して、データがディスクに書き込まれるたびに別の場所に確実にコピーされるようにすることができます。 GlusterFS のようなクラスター化されたストレージソリューションは、まさにこの機能を提供します。

このガイドでは、2つの64ビットUbuntu12.04VPSインスタンス間に冗長なGlusterFSクラスターをセットアップします。 これは、ミラー化されたRAIDを備えたNASサーバーと同様に機能します。 次に、3番目の64ビットUbuntu12.04VPSからクラスターにアクセスします。

一般的な概念


クラスター化された環境では、さまざまなコンピューターを単一のより強力なユニットとして扱うことができるように、リソース(通常はコンピューティングまたはストレージ)をプールできます。 GlusterFSを使用すると、さまざまなVPSインスタンスのストレージをプールして、単一のサーバーであるかのようにそれらにアクセスできます。

GlusterFSを使用すると、さまざまな種類のストレージ構成を作成できます。その多くは、機能的にはRAIDレベルに似ています。 たとえば、クラスター内の異なるノード間でデータをストライプ化することも、冗長性を実装してデータの可用性を向上させることもできます。

このガイドでは、分散ファイルシステムとも呼ばれる冗長クラスターストレージアレイを作成します。 基本的に、これにより、ネットワーク上でミラー化されたRAID構成と同様の機能を使用できるようになります。 独立した各サーバーにはデータの独自のコピーが含まれているため、アプリケーションはどちらのコピーにもアクセスでき、読み取り負荷の分散に役立ちます。

各VPSで実行する手順


このガイドで使用している各VPSインスタンスで実行するいくつかの手順があります。 各ホスト間でDNS解決を構成し、GlusterFSパッケージのインストールに使用するソフトウェアソースを設定する必要があります。

DNS解決を構成する


さまざまなコンポーネントが相互に簡単に通信できるようにするには、各コンピューター間に何らかのホスト名解決を設定するのが最善です。

各システムを指すように構成するドメイン名がある場合は、このガイドに従って、DigitalOceanドメイン名を設定できます。

予備のドメイン名がない場合、または何かをすばやく簡単に設定したい場合は、代わりに各コンピューターのhostsファイルを編集できます。

最初のコンピューターでroot権限でこのファイルを開きます。

sudo nano /etc/hosts

次のようなものが表示されます。

127.0.0.1       localhost gluster2

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

ローカルホスト定義の下に、各VPSのIPアドレスに続いて、それを参照するために使用する長い名前と短い名前を追加する必要があります。

終了すると、次のようになります。

 127.0.0.1localhostホスト名first_ip  gluster0.droplet.com  gluster0 second_ip  gluster1.droplet.com  gluster1 third_ip  gluster2.droplet.com  gluster2

IPv6対応ホストには次の行が望ましい

:: 1 ip6-localhost ip6-loopback fe00 :: 0 ip6-localnet ff00 :: 0 ip6-mcastprefix ff02 :: 1 ip6-allnodes ff02 :: 2 ip6-allrouters

The gluster0.droplet.comgluster0 行の一部は、各ドロップレットにアクセスするために使用する名前に変更できます。 このガイドでは、これらの設定を使用します。

終了したら、追加した行をコピーして、 /etc/hosts 他のVPSインスタンス上のファイル。 各 /etc/hosts ファイルには、IPを選択した名前にリンクする行が含まれている必要があります。

終了したら、各ファイルを保存して閉じます。

ソフトウェアソースの設定


Ubuntu 12.04にはGlusterFSパッケージが含まれていますが、それらはかなり古くなっているため、この記事の執筆時点でGlusterFSプロジェクトの最新の安定バージョン(バージョン3.4)を使用します。

クラスター内のノードとして機能するすべてのコンピューターと、クライアントコンピューターにソフトウェアソースをセットアップします。

プロジェクトがUbuntuユーザーに推奨するPPA(パーソナルパッケージアーカイブ)を実際に追加します。 これにより、他のシステムソフトウェアと同じツールを使用してパッケージを管理できるようになります。

まず、をインストールする必要があります python-software-properties パッケージ。aptを使用してPPAを簡単に管理できます。

sudo apt-get update
sudo apt-get install python-software-properties

PPAツールをインストールしたら、次のように入力してGlusterFSパッケージのPPAを追加できます。

sudo add-apt-repository ppa:semiosis/ubuntu-glusterfs-3.4

PPAを追加したら、ローカルパッケージデータベースを更新して、システムがPPAから利用できる新しいパッケージを認識できるようにする必要があります。

sudo apt-get update

このガイドで使用しているすべてのVPSインスタンスでこれらの手順を繰り返します。

サーバーコンポーネントのインストール


このガイドでは、2台のマシンをクラスターメンバーとして指定し、3台目をクライアントとして指定します。

ラベルを付けたコンピューターを構成します gluster0gluster1 クラスタコンポーネントとして。 我々は使用するだろう gluster2 クライアントとして。

クラスタメンバーマシン(gluster0およびgluster1)では、次のように入力してGlusterFSサーバーパッケージをインストールできます。

sudo apt-get install glusterfs-server

これが両方のノードにインストールされると、ストレージボリュームのセットアップを開始できます。

ホストの1つで、2番目のホストとピアリングする必要があります。 どのサーバーを使用するかは問題ではありませんが、簡単にするためにgluster0サーバーからこれらのコマンドを実行します。

sudo gluster peer probe gluster1.droplet.com

peer probe: success

これは、ピアリングが成功したことを意味します。 次のように入力することで、ノードがいつでも通信していることを確認できます。

sudo gluster peer status

Number of Peers: 1

Hostname: gluster1.droplet.com
Port: 24007
Uuid: 7bcba506-3a7a-4c5e-94fa-1aaf83f5729b
State: Peer in Cluster (Connected)

この時点で、2つのサーバーは通信しており、ストレージボリュームを一緒にセットアップできます。

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


サーバーのプールが利用可能になったので、最初のボリュームを作成できます。

冗長性に関心があるため、レプリカ機能を備えたボリュームをセットアップします。 これにより、データの複数のコピーを保持できるようになり、単一障害点からの節約になります。

各サーバーに1つのデータのコピーが必要なため、レプリカオプションを「2」に設定します。これは、サーバーの数です。 ボリュームの作成に使用する一般的な構文は次のとおりです。

 sudo gluster volumecreatevolume_nameレプリカnum_of_serversトランスポートtcp  domain1.com  :/ path / to / data / directory  domain2.com  :/ path / to / data/directory… force

実行する正確なコマンドは次のとおりです。

sudo gluster volume create volume1 replica 2 transport tcp gluster0.droplet.com:/gluster-storage gluster1.droplet.com:/gluster-storage force

volume create: volume1: success: please start the volume to access data

これにより、というボリュームが作成されます volume1. このボリュームのデータを各ホストのディレクトリに保存します。 /gluster-storage. このディレクトリが存在しない場合は、作成されます。

この時点で、ボリュームは作成されていますが、非アクティブです。 次のように入力して、ボリュームを開始し、使用できるようにすることができます。

sudo gluster volume start volume1

volume start: volume1: success

現在、ボリュームはオンラインになっているはずです。

クライアントコンポーネントのインストールと構成


ボリュームが構成されたので、クライアントマシンで使用できるようになります。

ただし、始める前に、前に設定したPPAから関連するパッケージを実際にインストールする必要があります。

クライアントマシン(この例ではgluster2)で、次のように入力します。

sudo apt-get install glusterfs-client

これにより、クライアントアプリケーションがインストールされ、カーネルの外部でファイルシステム機能を提供するために必要なヒューズファイルシステムツールもインストールされます。

リモートストレージボリュームをクライアントコンピューターにマウントします。 そのためには、マウントポイントを作成する必要があります。 伝統的に、これは /mnt ディレクトリですが、便利な場所ならどこでも使用できます。

にディレクトリを作成します /storage-pool:

sudo mkdir /storage-pool

そのステップが邪魔にならないので、リモートボリュームをマウントできます。 これを行うには、次の構文を使用する必要があります。

sudo mount -t glusterfs domain1.com:volume_name path_to_mount_point

mountコマンドでボリューム名を使用していることに注意してください。 GlusterFSは、各ホストの実際のストレージディレクトリを抽象化します。 マウントするつもりはありません /gluster-storage ディレクトリ、しかし volume1 音量。

また、ストレージクラスターのメンバーを1つだけ指定する必要があることに注意してください。

実行する実際のコマンドは次のとおりです。

sudo mount -t glusterfs gluster0.droplet.com:/volume1 /storage-pool

これでボリュームがマウントされます。 使用する場合 df コマンドを実行すると、GlusterFSが正しい場所にマウントされていることがわかります。

冗長機能のテスト


ストレージのプールを使用するようにクライアントを設定したので、機能をテストしてみましょう。

クライアントマシン(gluster2)で、これを入力して、いくつかのファイルをstorage-poolディレクトリに追加できます。

cd /storage-pool
sudo touch file{1..20}

これにより、ストレージプールに20個のファイルが作成されます。

私たちを見ると /gluster-storage 各ストレージホストのディレクトリでは、これらのファイルがすべて各システムに存在することがわかります。

# on gluster0.droplet.com and gluster1.droplet.com
cd /gluster-storage
ls

file1  file10  file11  file12  file13  file14  file15  file16  file17  file18  file19  file2  file20  file3  file4  file5  file6  file7  file8  file9

ご覧のとおり、これにより、クライアントから両方のノードにデータが書き込まれました。

ストレージクラスター内のノードの1つがダウンし、ファイルシステムに変更が加えられた場合。 ノードがオンラインに戻った後にクライアントマウントポイントで読み取り操作を実行すると、不足しているファイルを取得するように警告する必要があります。

ls /storage-pool

ボリュームへのアクセスを制限する


ストレージプールをマウントして、クラスター内の両方のマシンにデータを複製できることを確認したので、プールをロックダウンする必要があります。

現在、どのコンピュータも制限なしにストレージボリュームに接続できます。 ボリュームにオプションを設定することで、これを変更できます。

ストレージノードの1つで、次のように入力します。

sudo gluster volume set volume1 auth.allow gluster_client_IP_addr

このコマンドでは、クラスタークライアント(gluster2)のIPアドレスを置き換える必要があります。 現在、少なくとも /etc/hosts 構成、ドメイン名の制限が正しく機能しません。 この方法で制限を設定すると、すべてのトラフィックがブロックされます。 代わりにIPアドレスを使用する必要があります。

いつでも制限を解除する必要がある場合は、次のように入力できます。

sudo gluster volume set volume1 auth.allow *

これにより、どのマシンからでも再び接続できるようになります。 これは安全ではありませんが、問題のデバッグに役立つ場合があります。

複数のクライアントがある場合は、それらのIPアドレスをコンマで区切って同時に指定できます。

sudo gluster volume set volume1 auth.allow gluster_client1_ipgluster_client2_ip

GlusterFSコマンドを使用した情報の取得


GlusterFSストレージの設定の一部を変更し始めると、使用可能なオプション、稼働中のボリューム、および各ボリュームに関連付けられているノードについて混乱する可能性があります。

このデータを取得してストレージプールとやり取りするためにノードで使用できるさまざまなコマンドがいくつかあります。

各ボリュームに関する情報が必要な場合は、次のように入力します。

sudo gluster volume info

Volume Name: volume1
Type: Replicate
Volume ID: 3634df4a-90cd-4ef8-9179-3bfa43cca867
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: gluster0.droplet.com:/gluster-storage
Brick2: gluster1.droplet.com:/gluster-storage
Options Reconfigured:
auth.allow: 111.111.1.11

同様に、このノードが接続されているピアに関する情報を取得するには、次のように入力します。

sudo gluster peer status

Number of Peers: 1

Hostname: gluster0.droplet.com
Port: 24007
Uuid: 6f30f38e-b47d-4df1-b106-f33dfd18b265
State: Peer in Cluster (Connected)

各ノードのパフォーマンスに関する詳細情報が必要な場合は、次のように入力してボリュームのプロファイルを作成できます。

sudoglusterボリュームプロファイルvolume_namestart

このコマンドが完了すると、次のように入力して収集された情報を取得できます。

 sudoglusterボリュームプロファイルvolume_nameinfo
 レンガ:  gluster1.droplet.com  :/ gluster-storage

累積統計:%-latency Avg-latency Min-Latency Max-Latency No. 呼び出しのFop


  0.00       0.00 us       0.00 us       0.00 us             20     RELEASE
  0.00       0.00 us       0.00 us       0.00 us              6  RELEASEDIR
 10.80     113.00 us     113.00 us     113.00 us              1    GETXATTR
 28.68     150.00 us     139.00 us     161.00 us              2      STATFS
 60.52     158.25 us     117.00 us     226.00 us              4      LOOKUP

Duration: 8629 seconds

読み取りデータ:0バイト書き込みデータ:0バイト。 . .

このコマンドを使用すると、各ノードに関する多くの情報を受け取ることができます。

各ノードで実行されているすべてのGlusterFS関連コンポーネントのリストについては、次のように入力できます。

sudo gluster volume status

Status of volume: volume1
Gluster process                                         Port    Online  Pid
------------------------------------------------------------------------------
Brick gluster0.droplet.com:/gluster-storage             49152   Y       2808
Brick gluster1.droplet.com:/gluster-storage             49152   Y       2741
NFS Server on localhost                                 2049    Y       3271
Self-heal Daemon on localhost                           N/A     Y       2758
NFS Server on gluster0.droplet.com                      2049    Y       3211
Self-heal Daemon on gluster0.droplet.com                N/A     Y       2825
 
There are no active volume tasks

GlusterFSストレージボリュームを管理する場合は、GlusterFSコンソールにドロップすることをお勧めします。 これにより、入力しなくてもGlusterFS環境を操作できるようになります。 sudo gluster すべての前に:

sudo gluster

これにより、コマンドを入力できるプロンプトが表示されます。 これは、自分の方向性を決めるのに適しています。

help

終了したら、次のように終了します。

exit

結論


この時点で、2つの別々のサーバーに同時に書き込むことができる冗長ストレージシステムが必要です。 これは、多数のアプリケーションに役立ち、1台のサーバーがダウンした場合でもデータを確実に利用できるようにすることができます。

ジャスティン・エリングウッド