Gluster
本家
複数台のサーバ上のファイルシステムをまとめて1つのネットワークボリュームを生成できるソフト
ネットワークミラーリングみたいなことができる
インストール
クライアントインストール
wget http://download.gluster.org/pub/gluster/glusterfs/repos/YUM/ glusterfs-3.4/LATEST/EPEL.repo/glusterfs-epel.repo mv glusterfs-epel.repo /etc/yum.repos.d/ yum install -y glusterfs gluster-fuse
サーバインストール
yum install -y glusterfs-server chkconfig glusterd on service glusterd start
サーバの設定
peer接続するサーバはホスト名で名前解決できることが望ましいので
hostsファイルで定義しておくのがよい
ネットワーク越しにデータ転送するので、最低でも1Gbpsの回線が必要。100Mbpsでは遅すぎて厳しかった。
例として2台構成の場合を記述しておく
vi /etc/hosts 192.168.0.1 gluster01 192.168.0.2 gluster02
サーバを接続
gluster01上で実行 gluster peer probe gluster02 gluster peer status
vol01という名前でボリュームを作成、2ノードでレプリカ構成
gluster vol create vol01 replica 2 gluster01:/data/brick01 gluster02:/data/brick01 gluster vol start vol01
クライアントの設定
クライアント側はサーバで生成されたボリュームをマウントするだけ
マウント方式にはNFSとglusterの2種類ある
ここではglusterマウントについて書く
mount -t gluster gluster01:/vol01 /mnt/mount_pointglusterマウントする場合、glusterサーバ名を指定するけど
一度マウントしてしまえば、指定したglusterサーバが停止していても
他のglusterサーバの情報を取得済みなのでそちらに自動的に切り替わる
fstabでマウントする場合
_netdevが超重要!
vi /etc/fstab gluster01:/vol01 /mnt/mount_point gluster defaults,_netdev 0 0netfsサービスも起動しておいてね
再レプリケーション
レプリカ構成のボリュームでは、特定のノードが一時的に停止していて
その後復活した場合は、自動的にバックグラウンドで再レプリケーション処理が実施される
ファイルにアクセスがあった場合は、そのファイルが即時再レプリケーションされる
手動でやる場合
gluster vol heal vol01 info →再レプリケーションが必要なノードとファイルが表示される gluster vol heal vol01 →再レプリケーション実行 gluster vol heal vol01 info →再レプリケーションが必要なノードとファイルが表示されなくなったらOK
ノード交換
特定のノードが壊れたため、別ハードで構築して再度ノードとして登録する方法
ホスト名、IPアドレスは以前と同一とする
gluster peer status Hostname: gluster02 Uuid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx State: Peer in Cluster (Disconnected) →特定ノードがDisconnectedになっていることを確認 gluster vol info vol01 →ボリューム構成に特定のノードも含まれていることを確認 gluster vol status vol01 →ボリュームステータス内には特定ノードが含まれていないことを確認 新規ハードで特定ノードのホスト名、IPアドレスを設定してglusterをインストール 新規構築ノードで次を実施 mkdir /data/brick01 →元のブリックディレクトリ service glusterd start gluster peer probe gluster01 service glusterd restart gluster01ノードで次を実施 gluster peer status →新しいUUIDで特定ノードが接続されていることを確認 gluster vol status vol01 →特定ノードが含まれていることを確認 OnlineがNになっている場合はglusterdを再起動させてOnlineをYにする gluster vol heal vol01 full →再レプリケーション実行ノードを再構築して交換した場合は、自動的に再レプリケーションは実行されないので
手動でfullオプション付きで実行する必要あり
glusterdを再起動させてもBrickがOnlineにならない場合
要件は色々とあるが、まずはログを確認する
確認するログは/var/log/glusterfs/brick/にあるファイルで
ブリックディレクトリ名毎のファイル
E [posix.c:4288:init] 0-vol01-posix: Extended attribute trusted.glusterfs.volume-id is absent E [xlator.c:390:xlator_init] 0-vol01-posix: Initialization of volume 'vol01-posix' failed, review your volfile again E [graph.c:292:glusterfs_graph_init] 0-vol01-posix: initializing translator failed E [graph.c:479:glusterfs_graph_activate] 0-graph: init failedこんなログの場合、該当するBrickに拡張属性のtrusted.glusterfs.volume-idが
ないから初期化に失敗したと言っていることになる
という事は、該当するBrickに拡張属性を付与すればよいって事
vol=vol01 brick=/data/brick01 setfattr -n trusted.glusterfs.volume-id \ -v 0x$(grep volume-id /var/lib/glusterd/vols/$vol/info \ | cut -d= -f2 | sed 's/-//g') $brick
そして、glusterdを再起動する
これはbugzillaで報告されているように
v3.4.0でのバグかもしれない
Quota
ボリュームとディレクトリに対してQuotaが設定できる
gluster vol quota [VOLNAME] enable →有効にする gluster vol quota [VOLNAME] disable →無効にする gluster vol quota [VOLNAME] limit-usage [path] 1GB →Quota値設定 pathは/がボリューム直下のこと gluster vol quota [VOLNAME] remove [path] →Quota値を未設定にする
ブリックディレクトリの再利用
ブリックディレクトリを再度bリックディレクトリとして利用する場合は 拡張属性等を全て削除しなければいけない。 そのスクリプト
#!/bin/sh if [[ ! -d $1 ]]; then echo "usage: $0 <brickdir>" exit 1 fi getfattr -m . $1 2> /dev/null | grep -E '^trusted\.(glusterfs|gfid|afr|dht|hsrepl)' | while read xa; do echo "removing $xa on $1" setfattr -x $xa $1 done echo "removing $1/.glusterfs" rm -rf $1/.glusterfs
ログファイル
ログファイルは/var/log/glusterfsに出力される
logrotateファイルもRPMでインストールした場合はコピーされている
ログファイル内の時刻表示はUTCに固定されている
Bugzillaによると今後のバージョンで
設定可能なようにしたいとの事www
今はできないんやね。
パフォーマンス
パフォーマンスが気になる所
gluster vol set images performance.write-behind-window-size 512MB書き込みwindows sizeを変更できる
ちょっと良くなるかも?