2007/10/05

CentOS4.5にて、DRBD/hearbeatでサーバ冗長化


先日(といっても、結構時間が経ってしまいましたが・・・)、Linuxサーバを冗長化する機会がありました。



その際に、ドキュメントを用意したのですが、一部異なるアプローチをとったところがあったので、そのあたりをメモしておこうと思います。

ドキュメントはこちら

HAクラスタ構築手順書



其の一 DRBDパーティション



まず、DRBDでネットワークミラーリングを構築するのですが、マニュアルでは第2SCSIディスクを想定していますが、今回は、ディスクが一つしかないので、既存のディスクにパーティションを作成する必要がありました。

空き領域に新たなパーティションを作成するのですが、/(root)パーティションで全部使っていて空きは無かったので、やむなく再インストール・・・



せっかくですので、この機会に自由にサイズ変更をできるというLVMでパーティションを作成し、DRBDをセットアップです。


DRDBパーティション(論理ボリューム)の作成
$ sudo lvcreate -L 10G -n drbd main

$ sudo vi /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 panic;
}

syncer {
rate 100M;

group 1;

al-extents 257;
}

on host1 {
device /dev/drbd0;
disk /dev/main/drbd;
address 192.168.0.221:7788;
meta-disk internal;
}

on host2 {
device /dev/drbd0;
disk /dev/main/drbd;
address 192.168.0.231:7788;
meta-disk internal;
}
}

其の二 ミラーリングデータはシンボリックリンクで



既存のアプリケーションがあるため、設定ファイル等はなるべく変更したくありません。

そこで、設定ファイルはそのままに、データディレクトリをシンボリックリンクで参照するようにしました。


アプリケーション及びWebデータ
$ sudo -u user mkdir /data/application
$ sudo -u user ln -s /data/application /home/rms/application
$ sudo -u user tar cpzf /home/user/old_htdocs.tar.gz /home/user/htdocs
$ sudo -u user mv /home/user/htdocs /data/user_htdocs
$ sudo -u user ln -s /data/user_htdocs /home/user/htdocs
$ sudo ls -l /home/user
$ sudo ls -l /data

MySQLデータ
$ sudo -u mysql tar cpzf /home/mysql/old_data.tar.gz /home/mysql/data
$ sudo -u mysql mv /home/mysql/data /data/mysql_data
$ sudo -u mysql ln -s /data/mysql_data /home/mysql/data
$ sudo ls -l /home/mysql
$ sudo ls -l /data


その他、heartbeat等はマニュアルどおりでおおむねいけました。

マニュアルを作成してくれたK氏には感謝です!



DRBD/hearbeatでサーバ冗長化は、手軽にできてかなりおススメです!

自動でフェイルオーバー/フェイルバックする様子には、本気で感動しました。

この機会に(?)、是非挑戦してみてください。



参考書籍: