VA Linux Systems Japan株式会社

VA Linux 採用情報
ホーム 検索 お問い合わせ

English

サービス・製品

技術情報・資料

オープンソースプロジェクト イベント情報

出版・執筆

プレスリリース

会社情報

採用情報

 
 

 

ホーム VA Tech.Top テックライブラリーTop DRBD+Heartbeatでお手軽HA Cluster1

update : 2007/09/30

 

index

Xen特集

テックライブラリ

DRBDの導入と設定

Heartbeatの導入と設定

プレゼンライブラリ

イベントレポート

tips

VA Virtual-suite

仮想化に関するレポート販売

Xenを使ってみよう

Kernel対応障害解析サービス VA Quest

DRBD

Heartbeat

   
   
 
 


DRBD+Heartbeatでお手軽HA Cluster

DRBD + Heartbeat

DRBD+Heartbeat構成図サーバを運用する際の問題の一つとして故障時の対応があります。高価なシステムを構築すればストレージはSANで構築し、サービスのフェイルオーバーも高価な商用ソフトを導入することで実現することは可能です。しかしながら、「そこまでコストをかけて構築しなくても、、、」といった場合もあるかと思います。そのような場合の解決策の一つとして、本編ではDRBD + Heartbeatというオープンソース・ソフトウェアを用いて、HA Clusterを構築する方法を解説します。以下、<host_m>と<host_s>という2台のサーバを用いた構成手順を紹介します。

1. DRBDの導入

DRBDとは、Distributed Replicated Block Deviceの略で、本家WEBサイトは http://www.drbd.org/ になります。具体的にDRBDは何をするものか?というと、パーティションをネットワークを介してミラーリングを行ってくれます。ここで注意が必要なのですが、ミラーを行う場所をブロックデバイスにて指定する為、「ある特定のディレクトリ以下を全て」といったようなミラーリングは行えないということです。また、同じ理由からミラーリングを行うにはOSの再インストールが必要になることもあります。
DRBDのミラーリングは、指定したブロックデバイスに変更があったときに自動的に行われます。また、その実行はkernelモードで行われます。これまでrsync等を用いて手動で行っていた方も多いと思いますが、これらに対して速度、簡易性といった点で有利です。

また、同じくオープンソースDBのMySQLがDRBDをサポートしており、これにより冗長構成が行えるようです。

DRBDのインストール

現在のDRBDの最新版として、8.0.5がリリースされています。しかし、後述のHeartbeatと組み合わせて使用する場合、HeartbeatがサポートするDRBDは1世代前の0.7系となりますので、0.7系の最新版0.7.24を導入しましょう。(8.0系でサポートされるLinuxは2.6系のみですが、0.7系では2.4系と2.6系の両方がサポートされます。また、8.0系では機能追加等が行われており、この為導入までの設定は0.7系の方が容易と思われます。)

DRBDとHeartbeatとの対応表インストール自体は、本家サイトからdrbd-0.7.24.tar.gzをダウンロードし、ビルド、インストールを行うのですが、含まれているdrbd.spec.inを用いてrpmを作成してからインストールする方が簡単でしょう。注意点として、kernel moduleが作成され、これがビルドを行った環境のLinux Kernelのバージョンに依存してしまいます。これにより、kernelアップデートを行った場合等は再度これらを作成する等の作業が必要になってきます。

DRBDの設定

host_m、host_sの両方で、設定ファイル/etc/drbd.confを下記のように同じ記述を行います。

resource drbd0 {
  protocol C;
  syncer {
    rate 200M;
  }
  disk {
    on-io-error pass_on;
  }
  on host_m {
    device /dev/drbd0;
    disk /dev/hda2;
    address 192.168.0.1:7789;
    meta-disk internal;
  }
  on host_s {
    device /dev/drbd0;
    disk /dev/hda2;
    address 192.168.0.2:7789;
    meta-disk internal;
  }
}

設定ファイル詳細は、< $ man drbd.conf >とすれば、英文ドキュメントによる説明を確認することが出来ます。上記を簡単に説明すると、protocolはsyncを「どの時点で完了するか?」を決定するもので、A, B, Cが指定できます。これらの意味は下記の通りとなります。

A:

write IO is reported as completed, if it has reached local disk and local TCP send buffer.

(データを自分のディスクとTCP送信バッファに送った時点で完了。)

B:

write IO is reported as completed, if it has reached local disk and remote buffer cache.

(データを自分のディスクと相手ノードのバッファキャッシュに送った時点で完
了。)

C:

write IO is reported as completed, if it has reached both local and remote disk.

(データを自分と相手のディスクに送った時点で完了。)

 

となっており、C > B > Aのように安全性が高くなっています。

on host_m {
  device /dev/drbd0;
  disk /dev/hda2;
  address 192.168.0.1:7789;

この部分は、「ディスクパーティション /dev/hda2 を、/dev/drbd0 に割り当てて、host_mのIP 192.168.0.1の7789番ポートを用いてsyncを行う」といった意味になっています。

また、Heartbeatと連携させる場合、host_m、host_sの双方において、/dev/drbd0部は共通である必要があります。

次にhost_m、host_sの双方において、以下のように実行します。

# /sbin/modprobe drbd <- drbd moduleを読み込む
# /sbin/lsmod | grep drbd <- モジュールがロードされているか確認する
# drbdsetup /dev/drbd0 disk /dev/hda2 internal -1
# drbdsetup /dev/drbd0 net 192.168.0.1 192.168.0.2 C

   <- host_mで実行 IPの部分は <host_m> <host_s>の順になる
# drbdsetup /dev/drbd0 net 192.168.0.2 192.168.0.1 C

   <- host_sで実行 IPの部分は上と逆なので注意

この時点でステータスを確認すると、

[root@host_m crm]# cat /proc/drbd
version: 0.7.24 (api:79/proto:74)
SVN Revision: 2875 build by foo@host_m, 2007-07-18 09:59:41
0: cs:WFConnection st:Secondary/Unknown ld:Consistent
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0
1: cs:Unconfigured

のように見えます。Unknownとなっているのは、host_sで実行していない為です。

更に、host_mで、< # drbdsetup /dev/drbd0 primary >として、drbdサービスのPrimaryに格上げします。/proc/drbdを確認すると、

version: 0.7.24 (api:79/proto:74)
SVN Revision: 2875 build by foo@host_m, 2007-07-18 09:59:41
0: cs:Connected st:Primary/Secondary ld:Consistent
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0
1: cs:Unconfigured

のように、Primaryに変化しているのが確認出来ます。更に、< # drbdadm -- --do-what-I-say primary all >として、syncを開始します。

動作確認

それでは、動作確認をしてみましょう。host_m、host_sの双方で、< # /etc/init.d/drbd stop >としてサービスを終了します。次に、host_mで< # /etc/init.d/drbd start >としてサービスを起動します。そうすると、

[root@host_m crm]# /etc/init.d/drbd start
Starting DRBD resources: [ d0 s0 n0 ].
........

のように表示されますので、この間にhost_s側でサービスを起動させます。この間に起動させない場合、継続するか、無視するか?の決断を迫られます。

問題なくサービスが起動したら、host_mで、

# drbdsetup /dev/drbd0 primary <- host_mをPrimaryにする
# /sbin/mkfs.ext3 /dev/drbd0

   <- /dev/drbd0をext3ファイルシステムでフォーマット
# mount -t ext3 /dev/drbd0 /drbd

   <- /dev/drbd0を/drbdにマウント

として、ファイルシステムをマウントします。その後、

# touch /drbd/testfile1
# dd if=/dev/zero of=/drbd/testfile2 bs=1M count=100

のようにファイルを作成します。そして、

# umount /drbd
# drbdsetup /dev/drbd0 secondary

として、ファイルシステムのアンマウント、secondaryへと格下げを行います。念の為、< # /proc/drbd >として確認を行います。
host_sにおいて、

# drbdsetup /dev/drbd0 primary <- host_mをPrimaryにする
# mount -t ext3 /dev/drbd0 /drbd <- /dev/drbd0を/drbdにマウント

として、ファイルシステムをマウント後に、< # ls -al /drbd >として先ほどhosts_mで作成したファイルが存在していることを確認します。ファイルが存在していた場合、無事動作が確認できたことになります。

次へ


 
 
本サイトの利用に関して 免責事項 コピーライト 個人情報保護方針

Copyright C VA Linux Systems Japan. All rights reserved.