GNU/Linux >> Linux の 問題 >  >> Debian

DebianSqueezeでのGlusterFS3.0.xによる高可用性ストレージ-2つのストレージサーバー間での自動ファイルレプリケーション

このチュートリアルでは、GlusterFSを使用する2つのストレージサーバー(Debian Squeeze)を使用して高可用性ストレージをセットアップする方法を示します。各ストレージサーバーは他のストレージサーバーのミラーになり、ファイルは両方のストレージサーバーに自動的に複製されます。クライアントシステム(Debian Squeezeも)は、ローカルファイルシステムであるかのようにストレージにアクセスできます。GlusterFSは、数ペタバイトに拡張できるクラスター化されたファイルシステムです。 InfinibandRDMAまたはTCP/IP相互接続を介してさまざまなストレージブリックを1つの大規模な並列ネットワークファイルシステムに集約します。ストレージブリックは、SATA-IIRAIDおよびInfinibandHBAを備えたx86_64サーバーなどの任意のコモディティハードウェアで作成できます。

これがあなたのために働くという保証はありません!

1予備メモ

このチュートリアルでは、3つのシステム、2つのサーバー、および1つのクライアントを使用します。

  • server1.example.com:IPアドレス192.168.0.100(サーバー)
  • server2.example.com:IPアドレス192.168.0.101(サーバー)
  • client1.example.com:IPアドレス192.168.0.102(クライアント)

3つのシステムすべてが、他のシステムのホスト名を解決できる必要があります。 DNSを介してこれを実行できない場合は、3つのシステムすべてで次のようになるように/ etc/hostsファイルを編集する必要があります。

vi /etc/hosts
127.0.0.1       localhost.localdomain   localhost
192.168.0.100   server1.example.com     server1
192.168.0.101   server2.example.com     server2
192.168.0.102   client1.example.com     client1

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

(次の設定では、ホスト名の代わりにIPアドレスを使用することもできます。IPアドレスを使用する場合は、ホスト名を解決できるかどうかを気にする必要はありません。)

2GlusterFSサーバーのセットアップ

server1.example.com/server2.example.com:

GlusterFSはDebianSqueezeのパッケージとして入手できるため、次のようにインストールできます。

apt-get install glusterfs-server

コマンド

glusterfs --version

インストールしたばかりのGlusterFSバージョン(この場合は3.0.5)が表示されます:

[メール保護]:〜#glusterfs --version
2010年7月13日16:44:21に構築されたglusterfs3.0.5
リポジトリリビジョン:v3.0.5
Copyright(c)2006-2009 Gluster Inc.
GlusterFSには、まったく保証がありません。
GNU General Public Licenseの条件に基づいて、GlusterFSのコピーを再配布できます。
[メールで保護]:〜#

次に、いくつかのディレクトリを作成します:

mkdir / data /
mkdir / data / export
mkdir / data / export-ns

次に、GlusterFSサーバー構成ファイル/etc/glusterfs/glusterfsd.volを作成します(最初に元の/etc/glusterfs/glusterfsd.volファイルのバックアップを作成します)。これは、エクスポートされるディレクトリ(/ data / export)とその内容を定義します。クライアントは接続を許可されています(192.168.0.102 =client1.example.com):

cp /etc/glusterfs/glusterfsd.vol /etc/glusterfs/glusterfsd.vol_orig
cat / dev / null> /etc/glusterfs/glusterfsd.vol
vi /etc/glusterfs/glusterfsd.vol

volume posix
  type storage/posix
  option directory /data/export
end-volume

volume locks
  type features/locks
  subvolumes posix
end-volume

volume brick
  type performance/io-threads
  option thread-count 8
  subvolumes locks
end-volume

volume server
  type protocol/server
  option transport-type tcp
  option auth.addr.brick.allow 192.168.0.102
  subvolumes brick
end-volume

IPアドレスにワイルドカードを使用することが可能であり(192.168. *など)、コンマで区切って複数のIPアドレスを指定できることに注意してください(例:192.168.0.102,192.168.0.103)。

その後、GlusterFSサーバーを起動します:

/etc/init.d/glusterfs-server start

3GlusterFSクライアントのセットアップ

client1.example.com:

クライアントでは、次のようにGlusterFSクライアントをインストールできます。

apt-get install glusterfs-client

次に、次のディレクトリを作成します。

mkdir /mnt/glusterfs

次に、ファイル/etc/glusterfs/glusterfs.volを作成します(最初に元の/etc/glusterfs/glusterfs.volファイルのバックアップを作成します):

cp /etc/glusterfs/glusterfs.vol /etc/glusterfs/glusterfs.vol_orig
cat / dev / null> /etc/glusterfs/glusterfs.vol
vi /etc/glusterfs/glusterfs.vol

volume remote1
  type protocol/client
  option transport-type tcp
  option remote-host server1.example.com
  option remote-subvolume brick
end-volume

volume remote2
  type protocol/client
  option transport-type tcp
  option remote-host server2.example.com
  option remote-subvolume brick
end-volume

volume replicate
  type cluster/replicate
  subvolumes remote1 remote2
end-volume

volume writebehind
  type performance/write-behind
  option window-size 1MB
  subvolumes replicate
end-volume

volume cache
  type performance/io-cache
  option cache-size 512MB
  subvolumes writebehind
end-volume

オプションのリモートホスト行で正しいサーバーホスト名またはIPアドレスを使用していることを確認してください!

それでおしまい!これで、次の2つのコマンドのいずれかを使用して、GlusterFSファイルシステムを/ mnt/glusterfsにマウントできます。

glusterfs -f /etc/glusterfs/glusterfs.vol /mnt/glusterfs

または

mount -t glusterfs /etc/glusterfs/glusterfs.vol /mnt/glusterfs

これで、出力に新しいシェアが表示されるはずです...

mount

[メールで保護]:〜#mount
/ dev / sda1 on / type ext3(rw、errors =remount-ro)
tmpfs on / lib / init / rw type tmpfs(rw、nosuid、mode =0755)
proc on / proc type proc(rw、noexec、nosuid、nodev)
sysfs on / sys type sysfs(rw、noexec、nosuid、nodev)
udev on / dev type tmpfs (rw、mode =0755)
tmpfs on / dev / shm type tmpfs(rw、nosuid、nodev)
devpts on / dev / pts type devpts(rw、noexec、nosuid、gid =5、mode =620)
fusectl on / sys / fs / Fuse / connections type fusectl(rw)
/etc/glusterfs/glusterfs.vol on / mnt / glusterfs type destroy.glusterfs(rw、allow_other、default_permissions、 max_read =131072)
[メールで保護]:〜#

...そして...

df -h

[メールで保護]:〜#df -h
Filesystem Used Available Use%Mounted on
/ dev / sda1 29G 278M 27G 3%/
tmp / RW
のudev 244M、100K 244M 1%/ devの
TMPFS 249M 0 249M 0%は/ dev / SHM
/etc/glusterfs/glusterfs.vol
18G 848M 16G 5%/ mnt / glusterfs
[メール保護]:〜#

(server1.example.comとserver2.example.comにはそれぞれGlusterFSファイルシステム用に18GBのスペースがありますが、データがミラーリングされているため、クライアントには36GB(2 x 18GB)は表示されず、18GBしか表示されません。)

>

GlusterFS共有をクライアントに手動でマウントする代わりに、/ etc / fstabを変更して、クライアントの起動時に共有が自動的にマウントされるようにすることができます。

/ etc / fstabを開き、次の行を追加します。

vi /etc/fstab  
[...]
/etc/glusterfs/glusterfs.vol  /mnt/glusterfs  glusterfs  defaults,_netdev  0  0

変更した/etc/ fstabが機能しているかどうかをテストするには、クライアントを再起動します。

reboot 

再起動後、出力に共有が表示されます...

df -h

...そして...

mount

/ etc / fstabを変更しても問題が解決しない場合は、/ etc / fstabへの変更を元に戻し、代わりにこの行を/etc/rc.localに追加します(exit 0行の前):

vi /etc/rc.local
[...]
/bin/mount -t glusterfs /etc/glusterfs/glusterfs.vol /mnt/glusterfs
[...]

これにより、ネットワークが起動した後に共有が確実にマウントされます。

4つのテスト

それでは、GlusterFS共有にいくつかのテストファイルを作成しましょう:

client1.example.com:

/ mnt / glusterfs/test1にタッチします
/mnt / glusterfs/test2にタッチします

次に、server1.example.comとserver2.example.comの/ data/exportディレクトリを確認しましょう。 test1ファイルとtest2ファイルは各ノードに存在する必要があります:

server1.example.com/server2.example.com:

ls -l /data/export 

[メール保護]:〜#ls -l / data / export
total 0
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test1
-rw-r--r--1ルートルート02012-03-2914:51 test2
[メール保護]:〜#

ここで、server1.example.comをシャットダウンし、client1.example.comのGlusterFS共有でいくつかのファイルを追加/削除します。

server1.example.com:

shutdown -h now

client1.example.com:

touch / mnt / glusterfs / test3
touch / mnt / glusterfs / test4
rm -f / mnt / glusterfs / test2

変更は、server2.example.comの/ data/exportディレクトリに表示されます。

server2.example.com:

ls -l /data/export 

[メール保護]:〜#ls -l / data / export
total 0
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test1
-rw-r--r--1ルートルート02012-03-2914:52 test3
-rw-r--r--1ルートルート02012-03-2914:52 test4
[メール保護]:〜#

server1.example.comを再度起動して、/ data/exportディレクトリを確認してみましょう。

server1.example.com:

ls -l /data/export 

[メール保護]:〜#ls -l / data / export
total 0
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test1
-rw-r--r--1ルートルート02012-03-2914:51 test2
[メール保護]:〜#

ご覧のとおり、server1.example.comは、ダウン中に発生した変更に気づいていません。これは簡単に修正できます。必要なのは、client1.example.comのGlusterFS共有で読み取りコマンドを呼び出すことだけです。例:

client1.example.com:

ls -l /mnt/glusterfs/

[メール保護]:〜#ls -l / mnt / glusterfs/
合計8
-rw-r--r--1ルートルート02012-03-2914:51 test1
-rw-r--r--1ルートルート02012-03-2914:52 test3
-rw-r--r--1ルートルート02012-03-2914:52 test4
[メール保護]:〜#

ここで、server1.example.comの/ data / exportディレクトリをもう一度確認すると、変更がそのノードに複製されていることがわかります。

server1.example.com:

ls -l /data/export 

[メール保護]:〜#ls -l / data / export
total 8
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test1
-rw-r--r--1ルートルート02012-03-2914:52 test3
-rw-r--r--1ルートルート02012-03-2914:52 test4
[メール保護]:〜#

  • GlusterFS:http://www.gluster.org/
  • Debian:http://www.debian.org/

Debian
  1. CentOS7上のGlusterFSを使用した高可用性ストレージ-2つのストレージサーバー間でミラーリング

  2. Ubuntu12.10上のGlusterFS3.2.xを使用した2つのストレージサーバー間での自動ファイルレプリケーション(ミラーリング)

  3. DebianLennyでのGlusterFSによる高可用性ストレージ-2つのストレージサーバー間での自動ファイルレプリケーション

  1. DebianLenny上のGlusterFSを使用した4つのストレージノードにまたがる分散ストレージ

  2. DebianLenny上のGlusterFSを使用した4つのストレージノードに分散されたレプリケートされたストレージ

  3. DebianLenny上のGlusterFSを使用した4つのストレージノード間のストライピング

  1. DebianLennyでGlusterFSを使用してNFSのようなスタンドアロンストレージサーバーを作成する

  2. DebianSqueezeでGlusterFS3.0.xを使用してNFSのようなスタンドアロンストレージサーバーを作成する

  3. DebianSqueezeでのGlusterFS3.0.xによる高可用性ストレージ-2つのストレージサーバー間での自動ファイルレプリケーション