がらくたネット


Gluster

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_point
glusterマウントする場合、glusterサーバ名を指定するけど
一度マウントしてしまえば、指定したglusterサーバが停止していても
他のglusterサーバの情報を取得済みなのでそちらに自動的に切り替わる

fstabでマウントする場合
_netdevが超重要!

vi /etc/fstab
gluster01:/vol01    /mnt/mount_point    gluster    defaults,_netdev    0 0
netfsサービスも起動しておいてね

再レプリケーション

レプリカ構成のボリュームでは、特定のノードが一時的に停止していて
その後復活した場合は、自動的にバックグラウンドで再レプリケーション処理が実施される
ファイルにアクセスがあった場合は、そのファイルが即時再レプリケーションされる

手動でやる場合

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を変更できる
ちょっと良くなるかも?