Database JUNKY

MySQL,MariaDBを中心としたブログです

GlusterFSを利用した分散ストレージ(分散ファイルシステム)の構築

分散ストレージ(分散ファイルシステム)ってなんだろう?そもそもここからなんですが、複数のサーバのディスク領域をくっつけて、あたかもひとつのストレージにように見せる技術です(違 じゃあ、はじめから、でかいディスクを特定のサーバにくっつけてファイルサーバとして使えばいいのでは?と思われるかもしれませんが、そこが分散ストレージの利点の一つで、ファイルの書き出しも読み込みも、それぞれのサーバのcpuとメモリも分散して利用されるので、単体のディスクにアクセスするよりも高速!あとは、逆にいうと(別に「逆」でもなんでもないけど)「ファイルサーバ」というサーバは必要ないってことでしょうか(汗

OSSの分散ストレージもいくつか最近は出回っており。OSSの分野では、以下のものが有名なようです。

・Coda ・Ceph ・GlusterFS ・MogileFS

いくつか試してみましたが、上二つは。。断念。検証環境が、xenベースのゲストOSなので、カーネルとかを設定するようなものですとどんどん分散ストレージの話から脱線してしまい心が折れましたので、今回は、「比較的設定が簡単」であった、「GlusterFS」について話を触れてみたいと思います。

言葉で説明しても、なかなか伝わりずらいものがありますので、ちょっと構成図をつけてみます。今回の実験では、こんなストレージ環境を構築してみたいと思います。

簡単に説明しますと、sqdev01,02,03 それぞれの/data 物理パーティションを結合し、gluster_volというクラスタストレージを形成するといった手順です。生成したgluster_volは、sqdev01のglmntにマウントしております。また、今回は、クラスタストレージを生成する手順を中心に説明しますので、HAや、レプリケーションなどを利用した、高可用性については未検討です。(ちゃんと運用するのであれば、ちゃんとしないと大変なことになります)

以下に手順を記載します。

【glusterダウンロード】 http://download.gluster.com/pub/gluster/glusterfs/LATEST/CentOS/

【手順】 ▼リポジトリの設定 [shell]

cd /usr/local/src

wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

wget http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

rpm -ivh epel-release-5-4.noarch.rpm

wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm

rpm -ivh remi-release-5.rpm

[/shell]

▼開発ツールのインストール [shell]

yum groupinstall "Development Tools"

yum remove rsync

yum install python-ctypes

wget http://pkgs.repoforge.org/rsync/rsync-3.0.7-1.el5.rfx.x86_64.rpm

rpm -ivh rsync-3.0.7-1.el5.rfx.x86_64.rpm

[/shell]

▼glusterfsのインストールおよび確認 [shell]

wget http://download.gluster.com/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-core-3.2.2-1.x86_64.rpm

wget http://download.gluster.com/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-geo-replication-3.2.2-1.x86_64.rpm

wget http://download.gluster.com/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-fuse-3.2.2-1.x86_64.rpm

rpm -ivh glusterfs-*

準備中...                ########################################### [100%] 1:glusterfs-core         ########################################### [ 33%] 2:glusterfs-fuse         ########################################### [ 67%] 3:glusterfs-geo-replicati########################################### [100%]

dmesg | grep -i fuse

fuse init (API version 7.10)

[sqdev01] # /etc/init.d/glusterd status glusterd (pid 1469) を実行中...

[sqdev01] # /etc/init.d/glusterd start Starting glusterd:                                         [  OK  ]

[sqdev01] # ps -ax | grep glusterd Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ 1469 ?        Ssl    0:00 /opt/glusterfs/3.2.2/sbin/glusterd 1545 pts/1    S+     0:00 grep glusterd

[sqdev01] # /usr/sbin/glusterfs -V glusterfs 3.2.2 built on Jul 14 2011 13:34:24 Repository revision: git://git.gluster.com/glusterfs.git 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. [/shell]

▼ストレージプールの作成 [shell] [sqdev01] # gluster peer probe sqdev02 Probe successful [sqdev01] # gluster peer probe sqdev03 Probe successful

※glusterfsデーモンが起動しているサーバは、ストレージプールを作成しないでください。(やってもエラーがでますけど)

接続状態を確認

[sqdev01] # gluster peer status Number of Peers: 2

Hostname: sqdev02 Uuid: a9a6396b-5793-4db7-b0d6-b10e613f4def State: Peer in Cluster (Connected)

Hostname: sqdev03 Uuid: af1a0d7c-0cf9-4e7e-97fd-70ad4878a2a9 State: Peer in Cluster (Connected) [/shell]

※ちなみにプールの切断(デタッチ)は以下の通り [shell] [sqdev01] # gluster peer detach sqdev02 [sqdev01] # gluster peer detach sqdev03 [/shell]

▼ボリュームの作成 [shell] [sqdev01] # gluster volume create gluster_vol sqdev01:/data sqdev02:/data sqdev03:/data Creation of volume gluster_vol has been successful. Please start the volume to access data.

[sqdev01] # gluster volume start gluster_vol [/shell]

※ ちなみにボリュームの削除は下記コマンド [shell] [sqdev01] # gluster volume stop gluster_vol [sqdev01] # gluster volume delete gluster_vol [/shell]

▼マウント先の作成 どこでもいいけど。。。各クライアントにgluster_volのマウント先を作成する(今回は、sqdev01にしかマウントしません) [shell] [sqdev01] # mkdir /glmnt [sqdev01] # chmod 775 /glmnt [sqdev02] # mkdir /glmnt [sqdev02] # chmod 775 /glmnt [sqdev03] # mkdir /glmnt [sqdev03] # chmod 775 /glmnt [/shell]

▼各クライアントでマウントを行う [shell] [sqdev01] # mount sqdev01:gluster_vol /glmnt -- 下記は任意 [sqdev02] # mount sqdev02:gluster_vol /glmnt [sqdev03] # mount sqdev03:gluster_vol /glmnt [/shell] ※ df で容量を確認すると、sqdev01 + sqdev02 + sqdev03の合計値が表示されているのがわかるかと思います。 4.0GB + 4.0GB + 4.0GB = 12GB の領域が、/glmnt にマウントされております [shell] [sqdev01]# df -h Filesystem          サイズ  使用  残り 使用% マウント位置 /dev/mapper/VolGroup00-LogVol00 19G  2.4G   15G  14% / /dev/xvda1             99M   22M   73M  23% /boot tmpfs                 256M     0  256M   0% /dev/shm /dev/hda1             4.0G   73M  3.7G   2% /data sqdev01:gluster_vol    12G  217M   11G   2% /glmnt [/shell]

▼尚、glusterコマンドにつきましては、以下のリンクで詳しく説明しておりますのでそちらを参考にしてください。 http://dai_yamashita.bitbucket.org/glusterfs_ja/gluster_Command.html?highlight=gluster%20peer