CentOS 5.2でPrimary/Primary構成のDRBD+GFSを組む
ひとまず ext3 で構築はしたのですが,性能的な制約で Primary/Primary 構成をとる必要に迫られて Primary/Primary 構成で組み替えることに.そのために VirtualBox で検証しました.そのログを.
準備編
CentOS 5.2 のインストール
VirtualBox 上で作ります.
必要パッケージのインストール
両ノードにインストール
% sudo yum update % sudo reboot % sudo yum install drbd82 kmod-drbd82 cman lvm2 lvm2-cluster kmod-gfs2 gfs2-utils % sudo reboot
ネットワークの設定
DRBDの設定ファイルとホスト名が一致している必要があるので設定.
# vi /etc/sysconfig/network # vi /etc/hosts
設定編
DRBDのセットアップ
設定ファイルはhttp://gist.github.com/70674に.前回との相違は,common->net の allow-two-primaries; と言う項目.これで Primary/Primary 構成がとれます.
両ノードで実行します.
# fdisk /dev/hda # /dev/hda3 を作成(DRBD用)
# reboot
# drbdadm create-md r0
v08 Magic number not found
v07 Magic number not found
v07 Magic number not found
v08 Magic number not found
Writing meta data...
initialising activity log
NOT initialized bitmap
New drbd meta data block sucessfully created.
# drbdadm attach r0
# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-i386-build, 2008-10-03 11:42:32
0: cs:StandAlone st:Secondary/Unknown ds:Inconsistent/DUnknown r---
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 oos:1718860
# drbdadm connect r0
# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-i386-build, 2008-10-03 11:42:32
0: cs:Connected st:Secondary/Secondary ds:Inconsistent/Inconsistent C r---
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 oos:1718860Primary ノードで,まず Primary に昇格させます.
# drbdadm -- --overwrite-data-of-peer primary all
# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-i386-build, 2008-10-03 11:42:32
0: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r---
ns:159360 nr:0 dw:0 dr:159360 al:0 bm:9 lo:0 pe:0 ua:0 ap:0 oos:1559500
[>...................] sync'ed: 9.6% (1559500/1718860)K
finish: 0:03:28 speed: 7,368 (6,928) K/sec
# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-i386-build, 2008-10-03 11:42:32
0: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r---
ns:1718860 nr:0 dw:0 dr:1718860 al:0 bm:105 lo:0 pe:0 ua:0 ap:0 oos:0同期が終わったら,Secondary を Primary に昇格させます.
# drbdadm primary r0
# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-i386-build, 2008-10-03 11:42:32
0: cs:Connected st:Primary/Primary ds:UpToDate/UpToDate C r---
ns:0 nr:1718860 dw:1718860 dr:0 al:0 bm:105 lo:0 pe:0 ua:0 ap:0 oos:0Primary/Primary構成になりました.
Cluster Manager の設定
GFS(Global File System)はマルチマスタな構成をとれるのですが,当然書き込み時にロックを取得しなければいけません.そこでクラスターマネージャの出番です.設定は GUI でやるのがいいそうなんですが,面倒なのでテキストベースで.
次にクラスターマネージャーの起動.
# /etc/init.d/cman start
Starting cluster:
Loading modules... done
Mounting configfs... done
Starting ccsd... done
Starting cman... done
Starting daemons... done
Starting fencing... done
[ OK ]起動しました.
clvmd の起動
http://gist.github.com/70744:/etc/lvm/lvm.confを書き換えます.具体的には,
237c236 < locking_type = 3 --- > locking_type = 1
と言う感じで,ロックタイプを変更します.デフォルトだと通常のファイルロックで,3 にすることでクラスター用のロックを使うようになるそうです.
GFS2でフォーマット
GFS2形式でフォーマットします.これは片方のノードだけです.Primary で実行します.
# mkfs.gfs2 -p lock_dlm -t mycluster:drbd0 -j 2 /dev/drbd0 This will destroy any data on /dev/drbd0. Are you sure you want to proceed? [y/n] y Device: /dev/drbd0 Blocksize: 4096 Device Size 1.64 GB (429715 blocks) Filesystem Size: 1.64 GB (429714 blocks) Journals: 2 Resource Groups: 7 Locking Protocol: "lock_dlm" Lock Table: "mycluster:drbd0"
mount
# mount -t gfs2 /dev/drbd0 /opt
実験
以下は順次実行しました.
- centos-primary にて(Primary ノード)
% ls -la /opt 合計 12 drwxr-xr-x 2 root root 3864 2月 26 18:02 . drwxr-xr-x 23 root root 4096 2月 26 17:47 .. % sudo touch /opt/test-data % ls -la /opt 合計 16 drwxr-xr-x 2 root root 3864 2月 26 18:06 . drwxr-xr-x 23 root root 4096 2月 26 17:47 .. -rw-r--r-- 1 root root 0 2月 26 18:06 test-data
- centos-secondary にて(Secondary ノード)
% ls -la /opt 合計 16 drwxr-xr-x 2 root root 3864 2月 26 18:06 . drwxr-xr-x 23 root root 4096 2月 27 02:53 .. -rw-r--r-- 1 root root 0 2月 26 18:06 test-data % sudo touch /opt/secondary-test-data % ls -la /opt 合計 20 drwxr-xr-x 2 root root 3864 2月 27 03:14 . drwxr-xr-x 23 root root 4096 2月 27 02:53 .. -rw-r--r-- 1 root root 0 2月 27 03:14 secondary-test-data -rw-r--r-- 1 root root 0 2月 26 18:06 test-data
両方から書き込みできました.
まとめ
同時書き込みが発生した場合にもちゃんとロックがかかるそうですが,まだ試していません.時間か要望があれば検証追加します.