Global File System(GFS)は、Linuxコンピュータ・クラスター用クラスタファイルシステムの一種である。AFSやCoda、Google File System(紛らわしいことに同様にGFSと略される)などの分散ファイルシステムとは異なり、全ノードから同じ共有ストレージに同時にアクセスできる。
出典: wikipedia
スケールアウトが容易なシステムのストレージとしてNFSからiSCSIに移行出来ないかと思案していた時にGFS+iSCSIで良いのでは無いかと思いついたので調査および妄想。
用意するものは以下。
[code lang=”text”]
———————————————————-
Cluster管理(Conga)専用サーバ 1台
GFSを利用するCluster Memberサーバ 3台
iSCSIターゲット
———————————————————-
[/code]
実験するのに5台も用意するのは大変だと言うのであれば
/etc/cluster/cluster.confに以下の記載をする事で、2台でも動かすことは出来るみたいですが
Sprit Brainが起きやすくなると思うので3台は用意した方が良いです。
[code lang=”xml”]
<cman two_node="1" expected_votes="1"/>
[/code]
とりあえず構築手順を記載
1) 各ノードの /etc/hosts の編集
RHCSで利用するサーバは FQDN を登録する必要がありますので各サーバの /etc/hosts に記載します。
DNSが引けるならそれでも良いですがDNSが停止していた時は?等々考えるのが嫌なので素直にhostsに書きましょう。
[code lang=”text”]
# 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
[/code]
2) RHCS管理サーバの構築
[code lang=”text”]
# yum install -y luci
# chkconfig luci on
# luci_admin init
<管理ユーザ(admin)のパスワードを問われるので入力>
# service luci restart
[/code]
で完了、この時点でWebブラウザから https://hostname:8084 にログイン可能な状態になっています。
3) iSCSIターゲットの構築
iSCSIターゲットになるホストで以下を実行
[code lang=”text”]
# 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
[/code]
4) クラスタメンバの構築
gfs01~03で以下を実行
[code lang=”text”]
# yum install -y ricci
# chkconfig ricci on
# service ricci start
# chkconfig clvmd off (※) LVM使うならon
# chkconfig rgmanager off
[/code]
5) iSCSIのマウント及びGFSフォマットの実施
適当なホスト( gfs01 ) で以下を実施
[code lang=”text”]
# 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
[/code]
残り2台からもマウント
[code lang=”text”]
# 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
[/code]
6) 動作確認
以下のようなperlでロックの共有が行われていることを確認した。
[code lang=”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);
[/code]
つかれたので考察、妄想はまた今度