CentOS 5.2でPrimary/Primary構成のDRBD+GFSを組む

ひとまず ext3 で構築はしたのですが,性能的な制約で Primary/Primary 構成をとる必要に迫られて Primary/Primary 構成で組み替えることに.そのために VirtualBox で検証しました.そのログを.

##準備編 ###CentOS 5.2 のインストール VirtualBox 上で作ります.

  • Name : Primary/Secondary
  • Memory : 256MB
  • HDD : 8GB
  • CentOS
    • パーティション
    • / : 6000MB
    • swap : 512MB
    • 残りは空き(DRBD 用)
    • インストールタスク : Server

###必要パッケージのインストール 両ノードにインストール

% 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

両方から書き込みできました.

##まとめ 同時書き込みが発生した場合にもちゃんとロックがかかるそうですが,まだ試していません.時間か要望があれば検証追加します.

 
comments powered by Disqus