SSブログ

離れた場所にある2つのストレージの同期 その3~共用アクセス可能なファイルシステムを作成する~ [Linux(LVM/RAID/Storage)]

 drbdを用いて両方のサーバから同時にアクセス可能なボリュームを作成できたので、今度は、両方のサーバから同時にアクセス可能なファイルシステムを作成することとします。

 細かいことは割愛しますが、ext3はダメなので他のファイルシステムを使用しなければなりません。共有ボリュームに同時アクセスの可能なファイルシステムとしてよく知られている物としては…

1:GFS2 (Global File System)
2:ocfs2 (Oracle Cluster File System)

 あたり。残念なことに、今テスト環境として構築しているCentOS5.7の環境ではocfs2はサクッとyumっちゃうことが出来ないので、GFS2でいくより他はなさそう。
[root@rein cluster]# yum search ocfs
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
Warning: No matches found for: ocfs
No Matches found

 「No Matches found」という表示が寂しい。

 GFS2ならCentOSのオリジナルにあたるRedHat Linuxが対応しているくらいなのでCentOSでも問題無くいけることでしょう。
[root@rein cluster]# yum search gfs
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
====================================== Matched: gfs ======================================
(略)
Global_File_System-ja-JP.noarch : Global File System
(略)
e2fsprogs.i386 : Utilities for managing the second and third extended (ext2/ext3)
               : filesystems
e4fsprogs.i386 : Utilities for managing the fourth extended (ext4) filesystem
gfs-utils.i386 : Utilities for managing the global filesystem (GFS)
gfs2-utils.i386 : Utilities for managing the global filesystem (GFS)
gnbd.i386 : GFS's Network Block Device
kmod-gfs.i686 : gfs kernel module(s)
kmod-gfs-PAE.i686 : gfs kernel module(s)
kmod-gfs-xen.i686 : gfs kernel module(s)

 と、いう訳で、GFS2でいくことに大決定。

 手順としては以下の通りか。

① 必要なパッケージをyumでサクッとインストール
② cmanまわりの設定
③ clvmまわりの設定
④ GFS2でファイルシステムを作成
⑤ マウント

 ではレッツトライ。

① 必要なパッケージをyumでサクッとインストール。

 yumでインストールするなら、yum install kmod-gfs gfs2-utils cman lvm2-cluster あたりをインストール。「lvm2」は最初から入っていると思うので書いてないが、書いても特に害はないので心配性な人はlvm2も書いて差し支えない。

② cmanまわりの設定

 /etc/cluster/cluster.conf を書く。XMLファイルなので面倒くさい。ちなみにGUIでサポートしてくれるものもあるが、そんなゆとり教育は(ry
 RedHatの公式・英文なドキュメントに四苦八苦しながらも、以下のような内容を記述。おそらくこれが最低限の内容じゃないかと思われる。
<?xml version="1.0"?>
<cluster name="fushigiStar" config_version="1">
    <clusternodes>
        <clusternode name="rein" nodeid="1">
        </clusternode>
        <clusternode name="fine" nodeid="2">
        </clusternode>
    </clusternodes>
</cluster>

 ちなみにこのファイルは両方のサーバに設置する。
 設置したら、service cman start(または「restart」)で設定を反映しておく。
 あと、忘れずにchkconfig cman onとかも実行。

③ clvmまわりの設定

 続いて、clvm(クラスタ対応のlvm)まわりの設定。
 ロック方法の設定と、lvmの書き込みキャッシュの設定を変更すればよい。変更するファイルは/etc/lvm/lvm.confである。
 デフォルトでは「locking_type = 1」と記述されている(はず)なので、これを「locking_type = 3」に変更する。
 さらに、「write_cache_state = 1」と記述されている箇所を「write_cache_state = 0」と書き換える。
 また、drbdより先にlvmがボリュームを握ってしまう現象を回避するため、フィルター設定も変更する。まず、オリジナルのフィルター部分の記述は…
filter = [ "a/.*/" ]

 と記述されている(はず)。これは、「全てのデバイスについてpvscanしまくる」ということを言っている。しかし、drbdの起動より先に、生のデバイスについてpvscanされてしまうと、drbdが起動する際にエラーとなってしまうので、/dev/drbd*についてはpvscanをしてほしいがdrbdが使用する領域についてはpvscanしないで欲しいのである。そこで、テスト環境の場合は
[root@fine test]# cat /proc/partitions
major minor  #blocks  name

   3     0   16777152 hda
   3     1     104391 hda1
   3     2   16667437 hda2
   3    64   16777152 hdb
   3    65   16777120 hdb1
 253     0   15073280 dm-0
 253     1    1572864 dm-1
 147     0   16776572 drbd0
 253     2   16773120 dm-2

 と、なっていてhda*についてはOSの起動用ディスクなのでpvscanをしてほしいがhdb*以降についてはpvscanなどしないで欲しい。しかしdrbd*についてはpvscanをして欲しいので、filterの設定を以下のように修正する必要が生じる。
filter = [ "a/drbd.*/", "a/hda.*/", "r/.*/" ]


 変更したら、キャッシュファイルを手動で削除するため、rm -f /etc/lvm/cache/.cacheを実行し、service clvmd start(または「restart」)で設定を反映しておく。
 こちらも同様にchkconfig clvmd onを忘れずに。


④ GFS2でファイルシステムを作成

 いよいよ、ファイルシステムを作成する。まずはlvmの操作から。なお、drbdの公式サイトの情報では以下のコマンドを「両方のサーバで実行する」ようなことが書いてあるんだけども、個人的には片方でよくね?とも思うんだけどどうだろう…。

 lvmについては通常の手順通り。
pvcreate /dev/drbd0
vgcreate --clustered y vgShareDrbd /dev/drbd0
lvcreate -l 100%VG -n lvData vgShareDrbd

 これでlvmの論理ボリュームを作成すれば、clvmが即座に相手側サーバに伝達する模様。公式サイトには「--clustered y」の記述が無いが、コレがないと同時に書き込みしたときにサーバが返事をしなくなる模様。(へんじがない。ただのしかばねのようだ。)

 mkfsする際はクラスタ用にいくつかオプションが増えることに注意する。
mkfs -t gfs2 -p lock_dlm -j 2 -t fushigiStar:ShareVolume /dev/vgShareDrbd/lvData

 「-t gfs2」は、ファイルシステムの指定。
 「-p lock_dlm」はロックマネージャの指定。
 「-t fushigiStar:ShareVolume」はロックテーブルの名前を指定する。fushigiStar/etc/cluster/cluster.confに記述したクラスタシステム名。ShareVolumeはクラスタシステム内で一意の名前であればよいとのこと。

 さあ!それでは両方で同時にマウントしてみましょう!!!!!!!!
 まずはrein側!!
[root@rein lvm]# mount -t gfs2 /dev/vgShareDrbd/lvData /mnt/work
[root@rein lvm]# df -h
Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
                       14G  1.2G   13G   9% /
/dev/hda1              99M   19M   76M  20% /boot
tmpfs                 379M     0  379M   0% /dev/shm
/dev/mapper/vgShareDrbd-lvData
                       16G  259M   16G   2% /mnt/work

 そしてfine側!!
[root@fine lvm]# mount -t gfs2 /dev/vgShareDrbd/lvData /mnt/work
[root@fine lvm]# df -h
Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
                       14G  1.2G   13G   9% /
/dev/hda1              99M   19M   76M  20% /boot
tmpfs                 379M     0  379M   0% /dev/shm
/dev/mapper/vgShareDrbd-lvData
                       16G  259M   16G   2% /mnt/work

 というわけで、まずは同時にマウント出来ました。

 /mnt/work/testというディレクトリを作成し、両方のサーバからこのディレクトリにファイルを保存して、相手側サーバで作成したファイルをそれぞれ確認してみましょう。
 まずはrein側
[root@rein ~]# mkdir /mnt/work/test
[root@rein ~]# uname -a > /mnt/work/test/rein
[root@rein ~]# cat /mnt/work/test/fine
Linux fine 2.6.18-274.7.1.el5 #1 SMP Thu Oct 20 16:20:37 EDT 2011 i686 athlon i386 GNU/Linux

 そしてfine側
[root@fine lvm]# uname -a > /mnt/work/test/fine
[root@fine lvm]# cat /mnt/work/test/rein
Linux rein 2.6.18-274.7.1.el5 #1 SMP Thu Oct 20 16:20:37 EDT 2011 i686 athlon i386 GNU/Linux


 おっおっおっ ^ω^

 うまくいってるくさいお ^ω^

nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。