離れた場所にある2つのストレージの同期 その3~共用アクセス可能なファイルシステムを作成する~ [Linux(LVM/RAID/Storage)]
drbdを用いて両方のサーバから同時にアクセス可能なボリュームを作成できたので、今度は、両方のサーバから同時にアクセス可能なファイルシステムを作成することとします。
細かいことは割愛しますが、ext3はダメなので他のファイルシステムを使用しなければなりません。共有ボリュームに同時アクセスの可能なファイルシステムとしてよく知られている物としては…
1:GFS2 (Global File System)
2:ocfs2 (Oracle Cluster File System)
あたり。残念なことに、今テスト環境として構築しているCentOS5.7の環境ではocfs2はサクッとyumっちゃうことが出来ないので、GFS2でいくより他はなさそう。
「No Matches found」という表示が寂しい。
GFS2ならCentOSのオリジナルにあたるRedHat Linuxが対応しているくらいなのでCentOSでも問題無くいけることでしょう。
と、いう訳で、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の公式・英文なドキュメントに四苦八苦しながらも、以下のような内容を記述。おそらくこれが最低限の内容じゃないかと思われる。
ちなみにこのファイルは両方のサーバに設置する。
設置したら、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がボリュームを握ってしまう現象を回避するため、フィルター設定も変更する。まず、オリジナルのフィルター部分の記述は…
と記述されている(はず)。これは、「全てのデバイスについてpvscanしまくる」ということを言っている。しかし、drbdの起動より先に、生のデバイスについてpvscanされてしまうと、drbdが起動する際にエラーとなってしまうので、/dev/drbd*についてはpvscanをしてほしいがdrbdが使用する領域についてはpvscanしないで欲しいのである。そこで、テスト環境の場合は
と、なっていてhda*についてはOSの起動用ディスクなのでpvscanをしてほしいがhdb*以降についてはpvscanなどしないで欲しい。しかしdrbd*についてはpvscanをして欲しいので、filterの設定を以下のように修正する必要が生じる。
変更したら、キャッシュファイルを手動で削除するため、rm -f /etc/lvm/cache/.cacheを実行し、service clvmd start(または「restart」)で設定を反映しておく。
こちらも同様にchkconfig clvmd onを忘れずに。
④ GFS2でファイルシステムを作成
いよいよ、ファイルシステムを作成する。まずはlvmの操作から。なお、drbdの公式サイトの情報では以下のコマンドを「両方のサーバで実行する」ようなことが書いてあるんだけども、個人的には片方でよくね?とも思うんだけどどうだろう…。
lvmについては通常の手順通り。
これでlvmの論理ボリュームを作成すれば、clvmが即座に相手側サーバに伝達する模様。公式サイトには「--clustered y」の記述が無いが、コレがないと同時に書き込みしたときにサーバが返事をしなくなる模様。(へんじがない。ただのしかばねのようだ。)
mkfsする際はクラスタ用にいくつかオプションが増えることに注意する。
「-t gfs2」は、ファイルシステムの指定。
「-p lock_dlm」はロックマネージャの指定。
「-t fushigiStar:ShareVolume」はロックテーブルの名前を指定する。fushigiStarは/etc/cluster/cluster.confに記述したクラスタシステム名。ShareVolumeはクラスタシステム内で一意の名前であればよいとのこと。
さあ!それでは両方で同時にマウントしてみましょう!!!!!!!!
まずはrein側!!
そしてfine側!!
というわけで、まずは同時にマウント出来ました。
/mnt/work/testというディレクトリを作成し、両方のサーバからこのディレクトリにファイルを保存して、相手側サーバで作成したファイルをそれぞれ確認してみましょう。
まずはrein側
そしてfine側
おっおっおっ ^ω^
うまくいってるくさいお ^ω^
細かいことは割愛しますが、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
おっおっおっ ^ω^
うまくいってるくさいお ^ω^
2011-11-15 13:11
nice!(0)
コメント(0)
トラックバック(0)
コメント 0