2013年2月3日日曜日

クラスタ非対応ファイルシステム(ext3)でディスク共有

基本的に、ext3のようなクラスタ非対応ファイルシステムでは、
共有ディスクにたいして複数OSから同時アクセスすることはできません。

そこで、ext3 でフォーマットした領域を
あえて複数OSから同時マウントしてみました。

共有するディスクを ext3 でフォーマット

まず、2ノード(2つのOS)から同時アクセスできるディスクパーティションに対して
ext3 のファイルシステムを作成します。
[root@ovs001 ~]# mkfs -t ext3 /dev/sdb1
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
524288 inodes, 1048233 blocks
52411 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1073741824
32 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 22 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

マウント(ノード1側)

/OVS から既存のパーティションをアンマウントして、
あらためて ext3 フォーマットした /dev/sdb1 パーティションをマウントします。
[root@ovs001 ~]# umount /OVS
[root@ovs001 ~]# mount -t ext3 /dev/sdb1 /OVS

ext3でマウントされていることが確認できます。
[root@ovs001 ~]# df -h /OVS
Filesystem            Size  Used Avail Use% Mounted on
/dev/sdb1             4.0G   73M  3.7G   2% /var/ovs/mount/8FA1F11000F145DA8A8272436BCD02C2
[root@ovs001 ~]# mount
/dev/sda2 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
configfs on /sys/kernel/config type configfs (rw)
ocfs2_dlmfs on /dlm type ocfs2_dlmfs (rw)
none on /var/lib/xenstored type tmpfs (rw)
/dev/sdb1 on /var/ovs/mount/8FA1F11000F145DA8A8272436BCD02C2 type ext3 (rw)

マウント(ノード2側)

ノード側と同様に、ノード2側でも /dev/sdb1 をマウントします。
[root@ovs002 ~]# umount /OVS
[root@ovs002 ~]# mount -t ext3 /dev/sdb1 /OVS
[root@ovs002 ~]# df -h /OVS
Filesystem            Size  Used Avail Use% Mounted on
/dev/sdb1             4.0G   73M  3.7G   2% /var/ovs/mount/4EA14718C32B4D7784F3161A75953439
[root@ovs002 ~]# mount
/dev/sda2 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
configfs on /sys/kernel/config type configfs (rw)
ocfs2_dlmfs on /dlm type ocfs2_dlmfs (rw)
none on /var/lib/xenstored type tmpfs (rw)
/dev/sdb1 on /var/ovs/mount/4EA14718C32B4D7784F3161A75953439 type ext3 (rw)


共有ディスク上にファイル作成してみる

共有ディスクの領域(/OVSディレクトリ配下)に対して、
ノード1側でディレクトリとファイルを作成してみます。
[root@ovs001 ~]# mkdir /OVS/dir1
[root@ovs001 ~]# ls -dl /OVS/dir1
drwxr-xr-x 2 root root 4096 Feb  3 12:06 /OVS/dir1
[root@ovs001 ~]# echo Test001 > /OVS/dir1/test.f
[root@ovs001 ~]# cat /OVS/dir1/test.f
Test001

しかし作成したディレクトリもファイルも、ノード2からは見えません。
[root@ovs002 ~]# ls -dl /OVS/dir1
ls: /OVS/dir1: No such file or directory
[root@ovs002 ~]# cat /OVS/dir1/test.f
cat: /OVS/dir1/test.f: No such file or directory

逆に、ノード2側でディレクトリとファイルを作成してみます。
[root@ovs002 ~]# mkdir /OVS/dir2
[root@ovs002 ~]# echo Test002 > /OVS/dir2/test.f
[root@ovs002 ~]# dir -dl /OVS/dir2
drwxr-xr-x 2 root root 4096 Feb  3 12:13 /OVS/dir2
[root@ovs002 ~]# cat /OVS/dir2/test.f
Test002

しかし、これもノード1側では見えません。
[root@ovs001 ~]# cat /OVS/dir2/test.f
cat: /OVS/dir2/test.f: No such file or directory

この時点で両ノードの /OVS を再マウントしてみます。
そうすると、どちらのノードからも最初に作成した dir1 ディレクトリがなくなり、
dir2 だけ両ノードから見えるようになりました。

ノード1側
[root@ovs001 ~]# umount /OVS
[root@ovs001 ~]# mount -t ext3 /dev/sdb1 /OVS
[root@ovs001 ~]# ls /OVS
dir2  lost+found
[root@ovs001 ~]# cat /OVS/dir2/test.f
Test002
ノード2側
[root@ovs002 ~]# umount /OVS
[root@ovs002 ~]# mount -t ext3 /dev/sdb1 /OVS
[root@ovs002 ~]# ls /OVS
dir2  lost+found
[root@ovs002 ~]# cat /OVS/dir2/test.f
Test002

このように、クラスタ非対応ファイルシステムを
複数のOSからマウントすると、書き込んだデータの整合性が取れなくなります。

そのため、クラスタ対応のファイルシステム(クラスタファイルシステム)
が必要になります。

以上、
ためしにクラスタ非対応ファイルシステムを
2ノードからマウントしてみる話でした。

0 件のコメント:

コメントを投稿