Global File System(GFS)は、Linuxコンピュータ・クラスター用クラスタファイルシステムの一種である。AFSやCoda、Google File System(紛らわしいことに同様にGFSと略される)などの分散ファイルシステムとは異なり、全ノードから同じ共有ストレージに同時にアクセスできる。
出典: wikipedia

スケールアウトが容易なシステムのストレージとしてNFSからiSCSIに移行出来ないかと思案していた時にGFS+iSCSIで良いのでは無いかと思いついたので調査および妄想。

用意するものは以下。

----------------------------------------------------------
Cluster管理(Conga)専用サーバ 1台
GFSを利用するCluster Memberサーバ 3台
iSCSIターゲット
----------------------------------------------------------

実験するのに5台も用意するのは大変だと言うのであれば
/etc/cluster/cluster.confに以下の記載をする事で、2台でも動かすことは出来るみたいですが
Sprit Brainが起きやすくなると思うので3台は用意した方が良いです。

<cman two_node="1" expected_votes="1"/>


とりあえず構築手順を記載

1) 各ノードの /etc/hosts の編集
RHCSで利用するサーバは FQDN を登録する必要がありますので各サーバの /etc/hosts に記載します。
DNSが引けるならそれでも良いですがDNSが停止していた時は?等々考えるのが嫌なので素直にhostsに書きましょう。

# Public Net
192.168.1.230   gfsman
192.168.1.231   gfs01
192.168.1.232   gfs02
192.168.1.233   gfs03
# Cluster Net
192.168.100.230 gfsman.cluster
192.168.100.231 gfs01.cluster
192.168.100.232 gfs02.cluster
192.168.100.233 gfs03.cluster

2) RHCS管理サーバの構築

# yum install -y luci
# chkconfig luci on
# luci_admin init
<管理ユーザ(admin)のパスワードを問われるので入力>
# service luci restart

で完了、この時点でWebブラウザから https://hostname:8084 にログイン可能な状態になっています。

3) iSCSIターゲットの構築
iSCSIターゲットになるホストで以下を実行

# yum install scsi-target-utils
# service tgtd  start
# chkconfig tgtd on
# tgtadm --lld iscsi --op new --mode target --tid 1 --targetname iqn.2010-02.genteel:storage.iSCSI01
# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/sdb
# tgtadm --lld iscsi --op bind --mode target --tid 1 --initiator-address ALL

4) クラスタメンバの構築
gfs01~03で以下を実行

# yum install -y ricci
# chkconfig ricci on
# service ricci start
# chkconfig clvmd off (※) LVM使うならon
# chkconfig rgmanager off

5) iSCSIのマウント及びGFSフォマットの実施
適当なホスト( gfs01 ) で以下を実施

# yum install iscsi-initiator-utils
# service iscsi start
# chkconfig iscsi on
# iscsiadm --mode=discovery --type=sendtargets -p 192.168.100.250
192.168.100.250:3260,1 iqn.2010-02.genteel:storage.iSCSI01
# iscsiadm --mode node --targetname  iqn.2010-02.genteel:storage.iSCSI01 --login
Logging in to [iface: default, target: iqn.2010-02.genteel:storage.iSCSI01, portal: 192.168.100.250,3260]
Login to [iface: default, target: iqn.2010-02.genteel:storage.iSCSI01, portal: 192.168.100.250,3260]: successful
# mkfs -t gfs -j 3 -p lock_dlm -t genteel:gfs01 /dev/sdb1
# mkdir /gfs
# mount -t gfs /dev/sdb1 /gfs

残り2台からもマウント

# yum install iscsi-initiator-utils
# service iscsi start
# chkconfig iscsi on
# iscsiadm --mode=discovery --type=sendtargets -p 192.168.100.250
192.168.100.250:3260,1 iqn.2010-02.genteel:storage.iSCSI01
# iscsiadm --mode node --targetname  iqn.2010-02.genteel:storage.iSCSI01 --login
Logging in to [iface: default, target: iqn.2010-02.genteel:storage.iSCSI01, portal: 192.168.100.250,3260]
Login to [iface: default, target: iqn.2010-02.genteel:storage.iSCSI01, portal: 192.168.100.250,3260]: successful
# mkdir /gfs
# mount -t gfs /dev/sdb1 /gfs

6) 動作確認
以下のようなperlでロックの共有が行われていることを確認した。

#!/usr/bin/perl
open(OUT, ">>data.txt") or die;
flock(OUT, 2);
seek(OUT, 0, 2);
my $line = "hello world!\n";
while (true) {
print "Locked\n";
sleep 1;
}
print OUT $line;
close(OUT);

つかれたので考察、妄想はまた今度