2013年1月24日木曜日

OCFS2:クラスタファイルシステム環境構築

以前のエントリの続きです。

前回のエントリ

OVS on VirtualBox 環境に共有ディスクを割り当てたので、
今回はその領域にクラスタファイルシステムを作成してみます。

1. ノード1側のOVSでのディスク認識を確認

共有ディスクが、/dev/sdb として認識されています。
[root@ovs001 ~]# fdisk -l

Disk /dev/sda: 12.8 GB, 12884901888 bytes
255 heads, 63 sectors/track, 1566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 405 3148740 83 Linux
/dev/sda3 406 1435 8273475 83 Linux
/dev/sda4 1436 1566 1052257+ 5 Extended
/dev/sda5 1436 1566 1052226 82 Linux swap / Solaris

Disk /dev/sdb: 4294 MB, 4294967296 bytes
255 heads, 63 sectors/track, 522 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdb doesn't contain a valid partition table
You have new mail in /var/spool/mail/root

2. ノード2側のOVSでのディスク認識を確認

こちらでも共有ディスクが /dev/sdb として認識されています。
[root@ovs002 ~]# fdisk -l

Disk /dev/sda: 12.8 GB, 12884901888 bytes
255 heads, 63 sectors/track, 1566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 405 3148740 83 Linux
/dev/sda3 406 1435 8273475 83 Linux
/dev/sda4 1436 1566 1052257+ 5 Extended
/dev/sda5 1436 1566 1052226 82 Linux swap / Solaris

Disk /dev/sdb: 4294 MB, 4294967296 bytes
255 heads, 63 sectors/track, 522 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdb doesn't contain a valid partition table

3. パーティションを作成

ノード1側のOVSで、
共有ディスク(/dev/sdb)にパーティション(/dev/sdb1)を作成します。
[root@ovs001 ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-522, default 1): ★エンター
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-522, default 522):★エンター
Using default value 522

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

fdiskコマンドでパーティション(/dev/sdb1)が表示されるようになりました。
[root@ovs001 ~]# fdisk -l

Disk /dev/sda: 12.8 GB, 12884901888 bytes
255 heads, 63 sectors/track, 1566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 405 3148740 83 Linux
/dev/sda3 406 1435 8273475 83 Linux
/dev/sda4 1436 1566 1052257+ 5 Extended
/dev/sda5 1436 1566 1052226 82 Linux swap / Solaris

Disk /dev/sdb: 4294 MB, 4294967296 bytes
255 heads, 63 sectors/track, 522 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 1 522 4192933+ 83 Linux

共有領域に対してパーティションを作成したので、
2台目OVS側でも、作成したパーティション(/dev/sdb1)が見えるようになります。
[root@ovs002 ~]# fdisk -l

Disk /dev/sda: 12.8 GB, 12884901888 bytes
255 heads, 63 sectors/track, 1566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 405 3148740 83 Linux
/dev/sda3 406 1435 8273475 83 Linux
/dev/sda4 1436 1566 1052257+ 5 Extended
/dev/sda5 1436 1566 1052226 82 Linux swap / Solaris

Disk /dev/sdb: 4294 MB, 4294967296 bytes
255 heads, 63 sectors/track, 522 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 1 522 4192933+ 83 Linux

4. クラスタファイルシステムの作成

ノード1側のOVSで、/dev/sdb1 パーティションに、ファイルシステムを作成します。
  • -t ocfs2 → ファイルシステムの種類は、OCFS2
  • -N 4 →このファイルシステムに接続するノード数(少し多めの4台にした)
  • -L /OVS → ファイルシステムのラベル。(マウントポイントと合わせておいた)

[root@ovs001 ~]# mkfs -t ocfs2 -N 4 -L /OVS /dev/sdb1
mkfs.ocfs2 1.4.3
Cluster stack: classic o2cb
Filesystem label=/OVS
Block size=4096 (bits=12)
Cluster size=4096 (bits=12)
Volume size=4293562368 (1048233 clusters) (1048233 blocks)
33 cluster groups (tail covers 16041 clusters, rest cover 32256 clusters)
Journal size=67108864
Initial number of node slots: 4
Creating bitmaps: done
Initializing superblock: done
Writing system files: done
Writing superblock: done
Writing backup superblock: 1 block(s)
Formatting Journals: done
Formatting slot map: done
Writing lost+found: done
mkfs.ocfs2 successful

ノード1側で確認
ファイルシステムを作成すると、
blkid コマンドでファイルシステムのUUIDを見られるようになります。
[root@ovs001 ~]# blkid
/dev/sda5: LABEL="92bd3ba0a8ea" TYPE="swap"
/dev/sda3: LABEL="" UUID="5ec25b24-cb6f-4681-a59e-ede39840b5af" TYPE="ocfs2"
/dev/sda2: LABEL="/" UUID="562b8305-61ec-4673-8433-0edccf75d609" TYPE="ext3"
/dev/sda1: LABEL="/boot" UUID="cddae22e-6f94-4e59-882c-1d0dfa3c099d" TYPE="ext3"
/dev/sdb1: LABEL="/OVS" UUID="b5c473c6-b650-473e-b196-f4a2af104868" TYPE="ocfs2"


ノード2側で確認
ノード2側では、まず partprobe コマンドを実行して
OSにディスクパーティションテーブルの情報を再読み込みさせておきます。

blkid コマンドを実行してみると、
/dev/sdb1(ラベルは"/OVS")のUUIDがノード1側と同じものになっていて
同一のデバイスを共有していることがわかります。
[root@ovs002 ~]# partprobe /dev/sdb
[root@ovs002 ~]# blkid
/dev/sda5: LABEL="f678b4e7110e" TYPE="swap"
/dev/sda3: LABEL="" UUID="bebfa05e-5ba3-4e02-bf5a-164edaf9b0a4" TYPE="ocfs2"
/dev/sda2: LABEL="/" UUID="60a03a37-f574-4376-9233-8716a014dca5" TYPE="ext3"
/dev/sda1: LABEL="/boot" UUID="dfabb15a-a290-43f4-b8d8-c8fb76433546" TYPE="ext3"
/dev/sdb1: LABEL="/OVS" UUID="af59f99b-9163-49a3-b474-5f9948b57b7d" TYPE="ocfs2"

5. 既存の/OVSをアンマウント

現時点では、ノード1、ノード2 それぞれでことなるデバイスを/OVSにマウントしています。
そのため、両ノードで既存の /OVS をアンマウントしたうえで、
新規作成した /dev/sdb1 のクラスタファイルシステムをマウントします。

既存の/OVSをマウントしている状態
★ノード1
[root@ovs001 ~]# ls -ld /OVS
lrwxrwxrwx 1 root root 47 Jan 20 06:22 /OVS -> /var/ovs/mount/8FA1F11000F145DA8A8272436BCD02C2
[root@ovs001 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 3.0G 847M 2.0G 30% /
/dev/sda1 99M 46M 49M 49% /boot
tmpfs 257M 0 257M 0% /dev/shm
none 256M 40K 256M 1% /var/lib/xenstored
/dev/sda3 7.9G 264M 7.7G 4% /var/ovs/mount/8FA1F11000F145DA8A8272436BCD02C2
[root@ovs001 ~]# blkid /dev/sda3
/dev/sda3: LABEL="" UUID="b33cf2ad-5021-4321-8faf-52e5b19c5e27" TYPE="ocfs2"

★ノード2
[root@ovs002 ~]# ls -ld /OVS
lrwxrwxrwx 1 root root 47 Jan 20 06:35 /OVS -> /var/ovs/mount/4EA14718C32B4D7784F3161A75953439
[root@ovs002 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 3.0G 847M 2.0G 30% /
/dev/sda1 99M 46M 49M 49% /boot
tmpfs 257M 0 257M 0% /dev/shm
none 256M 40K 256M 1% /var/lib/xenstored
/dev/sda3 7.9G 264M 7.7G 4% /var/ovs/mount/4EA14718C32B4D7784F3161A75953439
[root@ovs002 ~]# blkid /dev/sda3
/dev/sda3: LABEL="" UUID="bebfa05e-5ba3-4e02-bf5a-164edaf9b0a4" TYPE="ocfs2"
それぞれのサーバで/OVSをアンマウントします。
ノード1側でアンマウント
[root@ovs001 ~]# umount /OVS

ノード2側でもアンマウント
[root@ovs002 ~]# umount /OVS

このあと、共有ディスクを/OVSにマウントします。
ただし、このままではマウントできません。
OCFS2で共有ディスクを制御するための専用のクラスタウェアを使用します。
[root@ovs001 ~]# mount -t ocfs2 /dev/sdb1 /OVS
mount.ocfs2: Unable to access cluster service while trying initialize cluster

6. OCFS2のクラスタ設定ファイル作成

OCFS2でディスクを共有するため、クラスタの設定ファイルを作成します。
ディスクを共有したいサーバを、OCFS2独自のクラスタに所属させる設定をします。

  • クラスタの名前: ovscluster
  • クラスタのノード数: 2
  • クラスタに参加するノード: ovs001 と ovs02
  • OCFS2用クラスタの通信で使用するIPアドレスは192.168.10.x を指定。(これは、共有ディスクをマウントするネットワークセグメントとは別でもよい)

[root@ovs001 ~]# mkdir /etc/ocfs2
[root@ovs001 ~]# vi /etc/ocfs2/cluster.conf

【ファイルの内容】
node:
  ip_port = 7777
  ip_address = 192.168.10.101
  number = 0
  name = ovs001
  cluster = ovscluster

node:
  ip_port = 7777
  ip_address = 192.168.10.102
  number = 1
  name = ovs002
  cluster = ovscluster

cluster:
  node_count = 2
  name = ovscluster

7. O2CBの設定と起動

OCFS2のクラスタウェアは、O2CBという名前です。
下記のように「/etc/init.d/o2cb configure」コマンドで、
O2CBの設定変更とその内容の読み込みができます。
設定した内容は、/etc/sysconfig/o2cb ファイルに反映されます。

[root@ovs001 ~]# /etc/init.d/o2cb configure
Configuring the O2CB driver.

This will configure the on-boot properties of the O2CB driver.
The following questions will determine whether the driver is loaded on
boot. The current values will be shown in brackets ('[]'). Hitting
without typing an answer will keep that current value. Ctrl-C
will abort.

Load O2CB driver on boot (y/n) [n]: y
Cluster stack backing O2CB [o2cb]: ★Enterキー
Cluster to start on boot (Enter "none" to clear) [ocfs2]: ovscluster
Specify heartbeat dead threshold (>=7) [31]:★Enterキー
Specify network idle timeout in ms (>=5000) [30000]:★Enterキー
Specify network keepalive delay in ms (>=1000) [2000]:★Enterキー
Specify network reconnect delay in ms (>=2000) [2000]:★Enterキー
Writing O2CB configuration: OK
Mounting configfs filesystem at /sys/kernel/config: OK
Loading filesystem "ocfs2_dlmfs": OK
Creating directory '/dlm': OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK
Starting O2CB cluster ovscluster: OK
8. 共有ディスクのマウント

ノード1で、共有ディスクをマウントします。
マウント後に「mounted.ocfs2 -f」コマンドで
/dev/sdb1 のocfs2ファイルシステムが ovs001サーバ からマウントされていることが確認できます。
[root@ovs001 ~]# mount -t ocfs2 /dev/sdb1 /OVS
[root@ovs001 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 3.0G 848M 2.0G 30% /
/dev/sda1 99M 46M 49M 49% /boot
tmpfs 257M 0 257M 0% /dev/shm
none 256M 40K 256M 1% /var/lib/xenstored
/dev/sdb1 4.0G 270M 3.8G 7% /var/ovs/mount/8FA1F11000F145DA8A8272436BCD02C2

[root@ovs001 ~]# mounted.ocfs2 -f /dev/sdb1
Device FS Nodes
/dev/sdb1 ocfs2 ovs001

9. ノード2側でも同様にOCFS2環境を設定して、共有ディスクをマウント

ノード2側でOCFS2の設定ファイルを作成します。
※ノード1側と同じ設定をします。
[root@ovs002 ~]# mkdir /etc/ocfs2
[root@ovs002 ~]# vi /etc/ocfs2/cluster.conf
[root@ovs002 ~]# cat /etc/ocfs2/cluster.conf
node:
  ip_port = 7777
  ip_address = 192.168.10.101
  number = 0
  name = ovs001
  cluster = ovscluster

node:
  ip_port = 7777
  ip_address = 192.168.10.102
  number = 1
  name = ovs002
  cluster = ovscluster

cluster:
  node_count = 2
  name = ovscluster

ノード2側のO2CBを設定して起動します。
[root@ovs002 ~]# /etc/init.d/o2cb configure
Configuring the O2CB driver.

This will configure the on-boot properties of the O2CB driver.
The following questions will determine whether the driver is loaded on
boot. The current values will be shown in brackets ('[]'). Hitting
without typing an answer will keep that current value. Ctrl-C
will abort.

Load O2CB driver on boot (y/n) [n]: y
Cluster stack backing O2CB [o2cb]:
Cluster to start on boot (Enter "none" to clear) [ocfs2]: ovscluster
Specify heartbeat dead threshold (>=7) [31]:
Specify network idle timeout in ms (>=5000) [30000]:
Specify network keepalive delay in ms (>=1000) [2000]:
Specify network reconnect delay in ms (>=2000) [2000]:
Writing O2CB configuration: OK
Mounting configfs filesystem at /sys/kernel/config: OK
Loading filesystem "ocfs2_dlmfs": OK
Creating directory '/dlm': OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK
Starting O2CB cluster ovscluster: OK

ノード2でも、共有ディスクをマウントします。
マウント後に「mounted.ocfs2 -f」コマンドで
/dev/sdb1 のocfs2ファイルシステムが2台のサーバ(ovs001とovs002)から
マウントされていることが確認できます。
[root@ovs002 ~]# mount -t ocfs2 /dev/sdb1 /OVS
[root@ovs002 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 3.0G 847M 2.0G 30% /
/dev/sda1 99M 46M 49M 49% /boot
tmpfs 257M 0 257M 0% /dev/shm
none 256M 40K 256M 1% /var/lib/xenstored
/dev/sdb1 4.0G 270M 3.8G 7% /var/ovs/mount/4EA14718C32B4D7784F3161A75953439

[root@ovs002 ~]# mounted.ocfs2 -f /dev/sdb1
Device FS Nodes
/dev/sdb1 ocfs2 ovs001, ovs002

以上、OCFS2の環境構築でした。

0 件のコメント:

コメントを投稿