インストール手順

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