読者です 読者をやめる 読者になる 読者になる

CentOSへのインストールメモ

Linuxサーバーを簡単にクラスタ化できるdrbdのインストールメモ。OSはCentOS4.5を使用。

  • インストール
yum -y install drbd

続いて、drbdのkernelモジュールのインストール

yum -y install kernel-module-drbd

これだと、kernel-module-drbd が、kernelのバージョンが異なるものがインストールされてしまった。( modprobe drbd でエラーが出る。)
uname -a すると、 「2.6.9-55.EL」なのに、インストールされるのは、「kernel-module-drbd-2.6.9-42.EL-0.7.21-1.c4」のように、「2.6.9-42」用のものがインストールされてしまい、kernelモジュールがロードされずにdrbdが起動できない。
そのため、

yum search kernel-module-drbd

を実行して、kernelのバージョンがマッチしているものを探し、

rpm -e kernel-module-drbd-2.6.9-42.EL.i686

のように間違ったバージョンのものをアンインストールし、

yum -y install kernel-module-drbd-2.6.9-55.ELsmp.i686

のように正しいバージョンのものをインストールする。

  • 設定

/usr/share/doc/drbd-0.7.23/drbd.conf を /etc/drbd.conf にコピーして編集する。

設定例

resource r0 {
  protocol C;
  incon-degr-cmd "echo '!DRBD! pri on incon-degr' | wall ; sleep 60 ; halt -f";

  startup {
    degr-wfc-timeout 120;    # 2 minutes.
  }

  disk {
    on-io-error   detach;
  }

  net {
    sync-min=600M;
    sync-max=600M;
  }

  syncer {
    rate 10M;
    group 1;
    al-extents 257;
  }

  on web01.rukatan.com {
    device     /dev/drbd0;
    disk       /dev/sdb1;
    address    192.168.0.101:7788;
    meta-disk  internal;
  }

  on web02.rukatan.com {
    device    /dev/drbd0;
    disk      /dev/sdb1;
    address   192.168.0.102:7788;
    meta-disk internal;
  }
}
  • 起動

今はもう1台が見つからないので、以下のような結果になる。

# service drbd start
Starting DRBD resources:    [ d0 s0 n0 ].
..........
***************************************************************
 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 0 seconds. [wfc-timeout]
   (These values are for resource 'r0'; 0 sec -> wait forever)
 To abort waiting enter 'yes' [  25]:

「yes」と入力。
そして、

# cat /proc/drbd
version: 0.7.23 (api:79/proto:74)
SVN Revision: 2686 build by buildcentos@build-i386, 2007-05-23 09:30:50
 0: cs:WFConnection st:Secondary/Unknown ld:Inconsistent
    ns:0 nr:0 dw:0 dr:0 al:0 bm:1008 lo:0 pe:0 ua:0 ap:0
 1: cs:Unconfigured

自分自身が「Secondary」で、もう一台が「Unknown」状態は「Inconsistent」。

# drbdsetup /dev/drbd0 primary
ioctl(,SET_STATE,) failed: Input/output error
Local replica is inconsistent (--do-what-I-say ?)

自分自身をprimaryにしようとすると、エラーがでる。

# drbdadm -- --do-what-I-say primary all
# cat /proc/drbd
version: 0.7.23 (api:79/proto:74)
SVN Revision: 2686 build by buildcentos@build-i386, 2007-05-23 09:30:50
 0: cs:WFConnection st:Primary/Unknown ld:Consistent
    ns:0 nr:0 dw:0 dr:0 al:0 bm:1008 lo:0 pe:0 ua:0 ap:0
 1: cs:Unconfigured

自分自身が「Primary」で、もう一台が「Unknown」状態は「Consistent」。
これで、1台目の準備完了。

  • 使ってみる

ファイルシステムの作成。今回は ext3

# mkfs.ext3 /dev/drbd0
mke2fs 1.35 (28-Feb-2004)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
1032192 inodes, 2063706 blocks
103185 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2113929216
63 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 30 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

マウントする場所を作成して、マウントする。

# mkdir /www
# mount /dev/drbd0 /www
# touch /www/test
# ls /www
lost+found  test

ばっちり。

  • もう1台の方のセットアップ

1台目と同様にセットアップ。/etc/drbd.conf は1台目のコピーで問題なし。 ホスト名、IPアドレスは設定ファイルに合わせる。drbdで使うディスクは、/etc/drbd.conf のとおり/dev/sdb1にして1台目と同じサイズにしておく。両方のマシンを起動して、両方のマシンで、service drbd start させれば、勝手に同期が始まる。同期中も1台目をprimaryにしてマウントし、ファイルの書き込みが出来た。すごい。これなら、運用中に障害が起きてもサービス停止する必要がなくなる。