インストール手順
Red Hat Enterprise Linux 6.3 の環境に GlusterFS 3.3 を導入して、最もシンプルな「Distributed Volume」を作成する手順を紹介します。
全体構成
gluster01〜gluster04の4ノードからなるGlusterFSサーバのクラスタを構成します。
各サーバの/dataにマウントしたファイルシステムをストレージ領域として使用します。
各サーバ/data/brick01をブリックとするDistributed Volume「vol01」を作成します。
client01にNativeクライアントを導入して、作成したボリュームをマウントします。
RHEL6.3とRPMパッケージの導入
gluster01〜gluster04 に共通の準備作業です。
RHEL6.3をインストールして、RHELリポジトリを利用可能な状態にしておきます。
ストレージ領域として利用するディスク(パーティション)にファイルシステムを作成して、/dataにマウントします。この時、ファイルシステムのi-nodeサイズは512Bを指定します。ext4ファイルシステムの場合は、次のように「-I 512」オプションを指定します。
# mkfs.ext4 -I 512 /dev/sdb
各サーバの名前解決ができるように/etc/hostsにエントリを追加します。
192.168.122.31 gluster01
192.168.122.32 gluster02
192.168.122.33 gluster03
192.168.122.34 gluster04
GlusterFS3.3のRPMパッケージを導入して、glusterdを起動します。
# curl -o /etc/yum.repos.d/glusterfs-epel.repo http://download.gluster.org/pub/gluster/glusterfs/3.3/LATEST/EPEL.repo/glusterfs-epel.repo
# sed -i 's/glusterfs\/glusterfs/glusterfs/' /etc/yum.repos.d/glusterfs-epel.repo
# yum install glusterfs-server glusterfs-geo-replication
# chkconfig glusterd on
# service glusterd start
※ 2行目のsedコマンドは、リポジトリファイルの記述ミスを修正するためのものです。
※オプション作業
iptablesによるパケットフィルタリングを設定する場合は、次のTCPポートへの接続を許可します。
22, 111, 24007〜(24008 + 使用する最大ブリック数), 38465〜38468
次は、/etc/sysconfig/iptablesの設定例です。
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 111 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 24007:24050 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 38465:38468 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
各ノードでは、該当ノードが提供するブリックごとに、接続を受け付けるTCPポートが割り当てられます。実際に使用しているTCPポートは、後述の「gluster vol status」コマンドで確認できます。
NFSでボリュームを公開する場合は、rpcbindサービスを事前に起動しておきます。nfs-utilsパッケージも必要です。
# yum install nfs-utils rpcbind
# chkconfig rpcbind on
# service rpcbind start
※オプション作業
次のスクリプトは、GlusterFSのI/O処理に特化したI/Oパラメータの設定を行います。必要に応じて、/etc/rc.localに記載してください。
sysctl -w vm.swappiness=10; sysctl -w vm.dirty_background_ratio=1; sysctl -w kernel.sched_wakeup_granularity_ns=15 for i in $(ls -d /sys/block/*/queue/iosched 2>/dev/null); do iosched_dir=$(echo $i | awk '/iosched/ {print $1}') [ -z $iosched_dir ] && { continue } path=$(dirname $iosched_dir) [ -f $path/scheduler ] && { echo "deadline" > $path/scheduler } [ -f $path/nr_requests ] && { echo "256" > $path/nr_requests } done
クラスタの構成
これ以降の作業は、gluster01から実施します。
gluster02〜gluster03の各ノードをpeer登録して、クラスタを構成します。
# gluster peer probe gluster02
# gluster peer probe gluster03
# gluster peer probe gluster04
peerの状態を表示して、他のノードが正しく認識できていることを確認します。
# gluster peer status
Number of Peers: 3
Hostname: gluster02
Uuid: ab460681-28f0-4d29-a4ca-1e3ac0c95a5f
State: Peer in Cluster (Connected)
Hostname: gluster03
Uuid: 2fdbf699-ca61-4580-93ec-25e7003161f6
State: Peer in Cluster (Connected)
Hostname: gluster04
Uuid: 1f054581-647d-4c92-96c4-cb5240bd647d
State: Peer in Cluster (Connected)
ボリュームの作成
各ノードのディレクトリ /data/brick01 をブリックとする Distributed Volume「vol01」を作成/起動します。
# gluster vol create vol01 \
gluster01:/data/brick01 \
gluster02:/data/brick01 \
gluster03:/data/brick01 \
gluster04:/data/brick01
# gluster vol start vol01
次のコマンドでボリュームの構成情報を確認します。
# gluster vol info
Volume Name: vol01
Type: Distribute
Volume ID: 0f9a1e88-eb6f-483c-a508-06373896320e
Status: Started
Number of Bricks: 4
Transport-type: tcp
Bricks:
Brick1: gluster01:/data/brick01
Brick2: gluster02:/data/brick01
Brick3: gluster03:/data/brick01
Brick4: gluster04:/data/brick01
次のコマンドでボリュームの起動状況を確認します。
# gluster vol status
Status of volume: vol01
Gluster process Port Online Pid
-----------------------------------------------------------------
Brick gluster01:/data/brick01 24009 Y 1812
Brick gluster02:/data/brick01 24009 Y 1719
Brick gluster03:/data/brick01 24009 Y 1690
Brick gluster04:/data/brick01 24009 Y 1703
NFS Server on localhost 38467 Y 1818
NFS Server on gluster02 38467 Y 1725
NFS Server on gluster04 38467 Y 1708
NFS Server on gluster03 38467 Y 1695
クライアントからの接続
この作業は、client01で実施します。
RHEL6.3をインストールして、RHELリポジトリを利用可能な状態にしておきます。
各サーバの名前解決ができるように/etc/hostsにエントリを追加します。
192.168.122.30 client01
192.168.122.31 gluster01
192.168.122.32 gluster02
192.168.122.33 gluster03
192.168.122.34 gluster04
GlusterFS3.3のクライアント用RPMパッケージを導入します。
# BASEURL=http://download.gluster.org/pub/gluster/glusterfs/3.3/3.3.0/RHEL
# yum install \
$BASEURL/glusterfs-3.3.0-1.el6.x86_64.rpm \
$BASEURL/glusterfs-fuse-3.3.0-1.el6.x86_64.rpm
Nativeクライアントとしてボリュームをマウントする際は、任意のGlusterFSサーバを指定してマウントします。(実際のアクセスは、ボリュームを構成する全てのGlusterFSサーバに対して行われます。)
# mkdir /mnt/vol01
# mount -t glusterfs gluster01:/vol01 /mnt/vol01
# df
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/vda2 4128448 1721848 2196888 44% /
tmpfs 510288 0 510288 0% /dev/shm
/dev/vda1 198337 28099 159998 15% /boot
gluster01:/vol01 11390720 279552 10523264 3% /mnt/vol01
※補足情報
NFSクライアントとしてマウントする際は、クライアント用RPMパッケージの導入は不要です。次のようにオプション「-o mountvers=3」を指定して、NFSv3でマウントします。
# mkdir -p /mnt/nfs/vol01
# mount -t nfs -o mountvers=3 gluster01:/vol01 /mnt/nfs/vol01