サイト管理者
なみかわみやこ
元々はオープンソースで開発がされていた分散ストレージシステムの1つ
現在は、Redhatが取り込んでRed Hat Storage Serverとしてリリースしている。
いつもの通りCentOS/Scientific Linuxな環境に構築をしてみる。
英語は苦手だが、とりあえずQuickStartに目を通してみる。
Step 1 – Have at least two nodes
なんて事が書いてある。
いくら英語が苦手なオイラでも64bit OSじゃないとダメ!!って事はわかるぞ。よーし、64bit OSを用意すりゃ良いんだろ?
って思って64bitで検証してたんだけど
32bitしかインストール出来ないようなダメなサーバーくんをなんとか使えないのだろうか?という心の声が聞こえてきたのでソースファイルがあるならコンパイルしちゃえば良いのかな?とか思ってダウンロードサイトを見に行ってみたら。。。
ダウンロードサイトはここね CentOS Gluster
ん?
あーーーーーーーー
i386があるじゃないか!!いやいや、フォルダだけかも・・・・・・
はい、ちゃんとRPMが存在しました(--;)
なんてこったい。
そんな訳で、glusterfs-epel.repoを編集する
# Place this file in your /etc/yum.repos.d/ directory [glusterfs-epel] name=GlusterFS is a clustered file-system capable of scaling to several petabytes. baseurl=http://download.gluster.org/pub/gluster/glusterfs/3.3/3.3.1/CentOS/epel-6/$basearch/ enabled=1 skip_if_unavailable=1 gpgcheck=0 [glusterfs-swift-epel] name=GlusterFS is a clustered file-system capable of scaling to several petabytes. baseurl=http://download.gluster.org/pub/gluster/glusterfs/3.3/3.3.1/CentOS/epel-6/noarch enabled=1 skip_if_unavailable=1 gpgcheck=0 [glusterfs-source-epel] name=GlusterFS is a clustered file-system capable of scaling to several petabytes. - Source baseurl=http://download.gluster.org/pub/gluster/glusterfs/3.3/3.3.1/CentOS/epel-6/SRPMS enabled=0 skip_if_unavailable=1 gpgcheck=0
バージョンとかは適当に変えちゃってね
リポジトリの登録がちゃんと出来ていればyumでインストール出来てしまうので難しい事は何もない・・・
yum install glusterfs glusterfs-server glusterfs-fuse glusterfs-geo-replication
うむぅ。32bitでも動くじゃないか!
chkconfig glusterd on chkconfig glusterfsd on ついでにスタートしてみる。特にエラーもなく実行されるよ。たぶん・・・ service glusterd start service glusterfsd start
お互いが名前解決できるようにhostsに登録をしておく
vi /etc/hosts
gluster peer probe サーバー名2
gluster volume create ボリューム名 replica 2 transport tcp サーバー名1:ディレクトリ サーバー2:ディレクトリ
作成したボリュームを利用可能にする
gluster volume start ボリューム名
障害が発生したサーバーと同じホスト名・同じIP・同じ設定でGlusterFSを構築します
状況の確認
gluster peer status ダウンしているノードのステータスがDisconnectedになっているはず State: Peer in Cluster (Disconnected)
ボリュームにアサインされているBrickを確認
gluster vol info ボリューム名 Volume Name: ボリューム名 Type: Distributed-Replicate Volume ID: a3221ea9-fe65-4e97-9f20-2960cb81187d Status: Started Number of Bricks: 2 x 2 = 4 Transport-type: tcp Bricks: Brick1: gfs00:/data/brick00 Brick3: gfs00:/data/brick02 落ちてるサーバーに含まれるBrickは表示されない。 あたりまえだけど、本来は1サーバーに複数のBrickを出しても意味は無いw
ボリュームのステータスを確認するには
gluster vol status ボリューム名
復旧したサーバーから既存のノードを指定してpeer probeを実行
service glusterd start gluster peer probe 既存のノード ※複数のノードがある場合は全てのノードに対して実行する
service glusterd restart service glusterfsd start
gluster vol status ボリューム名
Volume-idの確認 既存のサーバーで以下のコマンド実行 gluster vol info ボリューム名
表示されるVolume IDをそのまま登録は出来ない -を抜いたIDを登録しないといけない
面倒な場合は以下のコマンドで-無しのIDが表示される getfattr -d -m . -e hex BrickPath
って事で設定してみる setfattr -n trusted.glusterfs.volume-id -v 確認したVolumeID ボリューム名
Glusterdを再起動する
service glusterd restart
これでオンラインになるはず(^^;)
再レプリケーションを実行
gluster vol heal ボリューム名 full
作成したボリュームに容量制限をかけたい場合も簡単!
gluster volume quota ボリューム名 enable
1GBで制限する場合
gluster volume quota ボリューム名 limit-usage / 1GB
/mklを200MBで制限したい場合 gluster volume quota ボリューム名 limit-usage /mkl 200MB /とは作成したボリューム直下という意味。
親フォルダに制限を設定している場合、子フォルダは自身の制限値に達していない場合でも書き込めなくなる場合がある
既に存在するファイルのトータルサイズより小さな制限値も設定してもエラーにはならない。 その場合、制限値以下にしないとファイルの編集も出来なくなる
解除する場合は
gluster volume quota ボリューム名 disable
一度ボリュームに追加したBrick(ディレクトリ)を再度ボリュームに追加する場合
ボリュームを削除していたとしてもボリューム作成時に以下のようなエラーが出力する事がある。
{path} or a prefix of it is already part of a volume
この場合、以下のコマンドを実行する必要がある
setfattr -x trusted.glusterfs.volume-id $brick_path setfattr -x trusted.gfid $brick_path rm -rf $brick_path/.glusterfs
Glusterfsをインストールしたサーバで作成したBrickを起動時にマウントしたい場合、通常通りfstabに追記するのだけど
起動順の問題でfstabでマウントするタイミングではGlusterfsは起動していないのでマウントができない。
うにゅ~/etc/rc.localにでもmountコマンドを書きゃいいのかと思ったら、どうやらその辺りもちゃんと出来るそうなw
まず、fstabに追記する書き方
localhost:/[Brick名] [マウント先] glusterfs defaults,_netdev 0 0
_netdevがミソ。
どうやら_netdevを付ける事で、マウント処理を遅延させてくれるそうな。
この動きを制御してくれてるのがnetfsサービス。ちゃんと起動しておきましょう。
デフォルトはONになってる気がする・・・
chkconfig netfs on service netfs start