必要に駆られないとやらない性格・・・。

そんな中、仕事でDRBD使うことになったので導入する前にVMware Player上でテストした時のメモ。


■サーバ情報
・サーバ1(DRBDプライマリ)
 ホスト名:drdb01
 アドレス:10.1.254.101 (CentOS 5.5)

・サーバ2(DRBDセカンダリ)
 ホスト名:drdb02
 アドレス:10.1.254.102 (CentOS 5.5)


■導入に必要な設定情報を決める

・IPアドレス   : 10.1.254.101 , 10.1.254.102
・ポート番号   : 7788 ※drbddプロセスのListenポート(TCP)
・DRDBデバイス名 : /dev/drbd0
・物理デバイス名 : /dev/sda4 ※多めに256MBとしておく
・共有データサイズ: 諸々(メタデータ含む)に割り当てた残り容量
・DRBD同期グループ: X
・同期速度    : 100MB/sec ※同期処理の通信速度
・I/Oエラー処理  : pass_on ※監視から気付けるようにあえてdetouchは選択しなかった
・メタデータ領域 : internal ※物理デバイス領域の最後に作られる

*************************************************************************************

以下は例。

■DRBDのインストール

バージョン:DRBD8.3

・drbd01とdrbd02で実施
yum -y install drbd83 kmod-drbd83
lsmod | grep drbd
modprobe drbd
lsmod | grep drbd
drbd 277272 0

---
■DRBDパーティションの準備

・drbd01とdrbd02で実施
fdisk /dev/sda

コマンド (m でヘルプ): n
コマンドアクション
e 拡張
p 基本領域 (1-4)
e
Selected partition 4
最初 シリンダ (2938-13054, default 2938):
Using default value 2938
終点 シリンダ または +サイズ または +サイズM または +サイズK (2938-13054, default 13054):
Using default value 13054

コマンド (m でヘルプ): n
最初 シリンダ (2938-13054, default 2938):
Using default value 2938
終点 シリンダ または +サイズ または +サイズM または +サイズK (2938-13054, default 13054):
Using default value 13054

コマンド (m でヘルプ): p

Disk /dev/sda: 107.3 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot Start End Blocks Id System
/dev/sda1 * 1 65 522081 83 Linux
/dev/sda2 66 2676 20972857+ 83 Linux
/dev/sda3 2677 2937 2096482+ 82 Linux swap / Solaris
/dev/sda4 2938 13054 81264802+ 5 拡張領域
/dev/sda5 2938 13054 81264771 83 Linux

コマンド (m でヘルプ): w
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。

警告: 領域テーブルの再読込みがエラー 16 で失敗しました: デバイスもしくはリソースがビジー状態です。
カーネルはまだ古いテーブルを使っています。
新しいテーブルは次回リブート時に使えるようになるでしょう。
ディスクを同期させます。

partprobe もしくは shutdown -r now

---
■DRBD設定ファイルの作成

・drbd01, drbd02 で実施
vim /etc/drbd.conf
---
global {
usage-count no; # 統計情報の送信をするかどうか
}

common {
syncer { rate 10M; } # ディスク同期処理速度の設定(Byte/sec)
}

resource res-img01 {
protocol C; # データ同期のプロトコル(A/B/C)
startup {
wfc-timeout 120;
degr-wfc-timeout 120; # 指定秒数ピアノードに繋がらなければdegradeモードで起動
}
disk {
on-io-error pass_on; # diskセクション
}
on drbd01 { # uname -n
device /dev/drbd0; # DRBDデバイスを使用
disk /dev/sda4; # /dev/sda4をDRBD用デバイスとする
address 10.1.254.101:7788;
meta-disk internal; # メターデータ保存先
}
on drbd02 { # uname -n
device /dev/drbd0;
disk /dev/sda4;
address 10.1.254.102:7788;
meta-disk internal;
}
}
---

■メタデータの作成
drbdadm create-md res-img01

Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.

---
■自動起動設定
chkconfig drbd off ※自動起動はしないことにする(意図しない起動を避けるため)

---
■DRBDの起動

・プライマリノードでDRBDの起動(drbd01)
/etc/init.d/drbd start
Starting DRBD resources: [
res01
Found valid meta data in the expected location, 0 bytes into /dev/sda5.
d(res01) s(res01) n(res01) ]..........
***************************************************************
DRBD's startup script waits for the peer node(s) to appear.
- In case this node was already a degraded cluster before the
reboot the timeout is 120 seconds. [degr-wfc-timeout]
- If the peer was available before the reboot the timeout will
expire after 120 seconds. [wfc-timeout]
(These values are for resource 'res01'; 0 sec -> wait forever)
To abort waiting enter 'yes' [ 120]:

 ※相手側が起動していない場合は120秒待つ
---

/etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:09
m:res cs ro ds p mounted fstype
0:res01 WFConnection Secondary/Unknown Inconsistent/Inconsistent C

・セカンダリノードでDRBDの起動 
/etc/init.d/drbd start ※起動!
Starting DRBD resources: [
res01
Found valid meta data in the expected location, 0 bytes into /dev/sda5.
d(res01) s(res01) n(res01) ].

初回起動時や同期中はcsのところが「sync'ed: 1.8%」のようになり同期が始まる。

/etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:09
m:res cs ro ds p mounted fstype
0:res01 Connected Secondary/Secondary Inconsistent/Inconsistent C

※DRBD状態確認の他の方法
cat /proc/drbd

version: 8.3.2 (api:88/proto:86-90)
GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build
by mockbuild@v20z-x86-64.home.local, 2009-08-29 14:02:24
0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent B r----
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:307200000

---
■プライマリノードをPrimary状態への移行+データ同期(プライマリ側のみ)
drbdadm -- --overwrite-data-of-peer primary image01

→同期が始まる
---
■同期完了
以下の状態になっていれば同期が完了しているので、この状態を確認する。

・drbd01
service drbd status
drbd driver loaded OK; device status:
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:09
m:res cs ro ds p mounted fstype
0:res01 Connected Primary/Secondary UpToDate/UpToDate C

・drbd02
service drbd status
drbd driver loaded OK; device status:
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:09
m:res cs ro ds p mounted fstype
0:res01 Connected Secondary/Primary UpToDate/UpToDate C

-----
■DRBDボリュームのマウント(プライマリ側のみ)
同期が完了したらプライマリノード側でファイルシステムを作成する。
※セカンダリノード側で実施する必要はない。

drbdadm role res01

Primary/Secondary

mke2fs -j /dev/drbd0
mount -t ext3 /dev/drbd0 /data
 ※プライマリ側だけがread-writeでmountできる

/etc/init.d/drbd status

drbd driver loaded OK; device status:
version: 8.3.2 (api:88/proto:86-90)
GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build
by mockbuild@v20z-x86-64.home.local, 2009-08-29 14:02:24
m:res cs ro ds p mounted fstype
0:r0 Connected Primary/Secondary UpToDate/UpToDate C /data ext3

-----
■データ用パーティションに対する自動fsckの無効化
tune2fs -c -1 -i 0 /dev/sda5

-----
■データディレクトリの作成とマウント
mkdir /data
mount -o noatime /dev/drbd0 /data
mount

(略)
/dev/drbd0 on /data type ext3 (rw,noatime)
※このファイルシステム上ではinodeのファイルアクセス時間を更新する必要がないので
 noatimeオプションをつけてマウント(アクセス速度の向上)

-----
■ディスク容量の確認
df -h /data
Filesystem サイズ 使用 残り 使用% マウント位置
/dev/drbd0 77G 180M 72G 1% /data
※ここでは例として約80GBで切ってるのでこれで良い。

-----
■画像配置用ディレクトリの作成 ※自分環境用
mkdir -p /data/image
chown -R tomy. /data/image ※xxx部分は一般ユーザ(自分環境用)
chmod -R 775 /data/image