GFS(RHCS)によるクラスタファイルシステム(1)
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);
つかれたので考察、妄想はまた今度
コメントを残す