GlusterFSでクラスタファイルシステムを構築

以前、クラスタストレージであるGlusterFSを、Maildir形式のメールサーバ使えないか調べていたが、1000Base-Tのネットワーク環境では、システムコールに非常に時間がかかる(キャッシュされない)ことが分かり、あきらめた。

しかしながら、少数のファイルしかない VMイメージの保存用には問題ないと思われる。またGlusterFS v3.1.2から、GlusterのNFS領域をXenServerで利用できるようになったらしい。

そこで、XenServer上のVM (OpenSUSE)でGlusterFSを動作させ、それをXenServerのSR (Storage Repository)として利用したいと思う。
※無駄が多いけど、VM上で構築しておけばノードの追加が楽なので。
※試して使い物にならない程遅ければ、XenServer上に直接GlusterFSをインストールすることにする。

※なお、Oracle VM Server for x86 2.2.1で試している方がいましたので、それを参考にします。
http://nkjmkzk.net/?p=1691

開発用ツールをインストール
[code]
# zypper install autoconf automake libtool gcc make flex bison readline-devel
[/code]

GlusterFSのソースのダウンロード
[code]
# cd /usr/local/src
# wget http://download.gluster.com/pub/gluster/glusterfs/3.1/LATEST/glusterfs-3.1.2.tar.gz
# tar zxvf glusterfs-3.1.2.tar.gz
[/code]

コンパイル
[code]
# cd glusterfs-3.1.2
# ./configure
~~~略~~~
GlusterFS configure summary
===========================
FUSE client : yes
Infiniband verbs : no
epoll IO multiplex : yes
argp-standalone : no
fusermount : no
readline : yes

# make
# make install
※デフォルトでは、/usr/local/ 以下にインストールされる。
[/code]

ldconfigコマンドで共有ライブラリのキャッシュを作り直す。
[code]
# /sbin/ldconfig
# /usr/local/sbin/glusterfs –version
glusterfs 3.1.2 built on Mar 6 2011 15:26:49
Repository revision: v3.1.1-64-gf2a067c
Copyright (c) 2006-2010 Gluster Inc. <http://www.gluster.com>
GlusterFS comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of GlusterFS under the terms of the GNU Affero General Public License.
[/code]

引き続き初期設定を行う。
各サーバで、以下のデーモンが起動されるようにしておく
[code]
※なぜか起動しなかったため、起動スクリプトに以下の修正を行った。
# diff -u /tmp/glusterd glusterd
— /tmp/glusterd 2011-03-06 11:44:37.077995074 +0900
+++ glusterd 2011-03-06 11:43:23.375896074 +0900
@@ -24,7 +24,8 @@
start()
{
echo -n $"Starting $BASE:"
– startproc $GLUSTERD
+ $GLUSTERD
+ # startproc $GLUSTERD
return $?
}

# /sbin/chkconfig glusterd on
# /etc/init.d/glusterd start

# vi /etc/hosts
192.168.11.102 gluster1.furelo.jp gluster1
192.168.11.103 gluster2.furelo.jp gluster2
[/code]

各サーバ間のpeerを張る。(片方向にpeerを張るだけで良い。自身とのpeerは不要。)
[code]
[gluster1]# /usr/local/sbin/gluster peer probe gluster2.furelo.jp
Probe successful
[/code]

peer状況を確認する。
[code]
# /usr/local/sbin/gluster peer status
Number of Peers: 1

Hostname: gluster2.furelo.jp
Uuid: 7ecd445c-601a-4cc7-bd48-568f97d3ee14
State: Peer in Cluster (Connected)
[/code]

各サーバで、GlusterFSが利用する領域(BRICK)を作成する。
[code]
# mkdir /var/brick
# mkdir /var/brick/backup
※任意のディレクトリをBRICKに指定できるが、今回は、/var/brick ディレクトリに大容量のパーティションをマウントし、このサブディレクトリを各用途で利用することにする。
[/code]

任意の一台で、以下のコマンドを入力し、バックアップ領域をRAID1構成にする。
[code]
# /usr/local/sbin/gluster volume create BACKUP_VOL \
replica 2 \
transport tcp \
gluster1.furelo.jp:/var/brick/backup \
gluster2.furelo.jp:/var/brick/backup

# /usr/local/sbin/gluster volume info
# /usr/local/sbin/gluster volume start BACKUP_VOL
# /usr/local/sbin/gluster volume info
[/code]

各サーバでglusterfs をfuseでマウントする。
[code]
# mount -t glusterfs localhost:BACKUP_VOL /var/backup

※もし、NFSでマウントする場合、GlusterのNFS機能がTCPのみのサポートなので、以下の様に行う。
# mount -t nfs -o mountproto=tcp localhost:/BACKUP_VOL /var/backup
[/code]

認識されているか確認する。
[code]
# df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/system-root
6631976 2277552 4017528 37% /
devtmpfs 509812 108 509704 1% /dev
tmpfs 524464 4 524460 1% /dev/shm
/dev/xvda1 69410 23664 42162 36% /boot
/dev/xvdb1 516054864 1565272 488275532 1% /var/brick
localhost:BACKUP_VOL 412843904 203136 391669632 1% /var/backup
[/code]

※なお、既存データがある場合、self-heal機能を使って同期を行う必要がある。
※self-heal機能を使うには、一度すべてのファイルにアクセスすればいい。
[code]
# du /var/backup/
[/code]

問題なければ、起動時に自動マウントするようにする。
[code]
# vi /etc/hosts
※GlusterFSでマウントする場合、以下の様な設定を追加する
localhost:BACKUP_VOL /var/backup glusterfs acl,user_xattr,_netdev 3 0

※NFSでマウントする場合、以下の様な設定を追加する。
localhost:/BACKUP_VOL /var/backup nfs _netdev,mountproto=tcp,rsize=8192,wsize=8192 3 0
[/code]

NFSやCIFSの場合だと、専用に起動スクリプト S05nfs や S04cifs があるので自動マウントしてくれるようなのだが、
GlusterFSの様な、その他のネットワークファイルシステムについては考慮されてないようだ。
適当に以下の様に行った。
[code]
# vi /etc/init.d/after.local
/bin/mount -a -t nfs
/bin/mount -a -t glusterfs

# chmod a+x /etc/init.d/after.local
[/code]

しかし、NFSの場合、以下のエラーが出てマウントされなかった。
GlusterFSでは問題なかったので、GlusterFSを使うことにし、原因は調べてない。
[code]
Master Resource Control: Running /etc/init.d/after.local
mount.nfs: mounting localhost:/BACKUP_VOL failed, reason given by server:
No such file or directorydone
[/code]

※なお、一度作ったボリューム設定を削除したい場合以下の様に行う。
[code]
# /usr/local/sbin/gluster volume stop BACKUP_VOL
# /usr/local/sbin/gluster volume delete BACKUP_VOL
[/code]

カテゴリー: Technology タグ: , パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)