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:1718860
Primary ノードで,まず 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:0
Primary/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
両方から書き込みできました.
まとめ
同時書き込みが発生した場合にもちゃんとロックがかかるそうですが,まだ試していません.時間か要望があれば検証追加します.