DRBD HOWTO

David Krovich

Hiroaki Kuze

改訂履歴
改訂 v0.6.5J2002-05-17Revised by: hk
改訂 v0.6.52002-01-23Revised by: dmk

DRBD HOWTO


目次
1. はじめに
1.1. DRBDとは何ですか?
1.2. DRBDでどこまでできますか。HAクラスタを構築するために他に必要なものはありますか?。
1.3. どのように動作しますか?
1.4. DRBDは最近のHAクラスタとどのような関係がありますか?
2. インストール
2.1. ダウンロード
2.2. コンパイル
2.3. DRBDモジュールのロードテスト
2.4. 2.4.x系カーネルについて
2.5. Unresolved symbolエラー
3. drbdsetup使用方法
3.1. drbdsetup
3.2. drbdsetupの使用例
4. drbd.confサンプル設定
4.1. drbd.conf
4.2. drbd.confサンプル設定
5. heartbeatとの組み合わせ
5.1. heartbeatとは何ですか?
5.2. drbd及びheartbeatのスクリプト
5.3. heartbeatと組み合わせた例 - Webサーバ
5.4. heartbeatの組み合わせ例 - NFSサーバ
6. タイムアウト
6.1. タイムアウトはどのように動作しますか?
6.2. タイムアウト値が小さい方がいいのはなぜですか?
6.3. なぜ小さなタイムアウト値が、timeout/resync/connectを引き起こすのですか?
6.4. "postpone packets"とは何ですか?
6.5. このtimeout/resync/connectパターンを発見したときには何をすべきですか?
7. その他
7.1. tl-size

1. はじめに

1.1. DRBDとは何ですか?

DRBDは1つのカーネルモジュールと関連する複数のスクリプトで構成され、ハイアベイラビリティクラスタを構築できるように設計されたブロックデバイスを提供します。このハイアベイラビリティクラスタは、ブロックデバイス全体を(専用の)ネットワークを介してミラーリングすることによって実現されます。ネットワークRAIDを実現していると考えてください。

1.2. DRBDでどこまでできますか。HAクラスタを構築するために他に必要なものはありますか?。

DRBDはデータを受け取ると、ローカルディスクに書き込み、かつ他方のマシンに送信します。他方のマシン上では、受信したデータを自身のディスクに書き込みます。

他に必要なソフトウェアは、heartbeatのようなサービスや、ブロックデバイス上で動作するいくつかのアプリケーションです。

例:

  • ファイルシステム及びfsck

  • ジャーナリングファイルシステム

  • リカバリ機能付きデータベース

1.3. どのように動作しますか?

各デバイス(DRBDは2つ以上のデバイスを提供します)には、プライマリあるいはセカンダリという状態になります。プライマリデバイスのあるノード上でアプリケーションは動作し、デバイス(/dev/nbX)にアクセスします。すべての書き込みはローカルの「さらにローレベルなブロックデバイス」に送られ、セカンダリ状態のデバイスのあるノードに送られます。セカンダリデバイスは単にデータを自身のローレベルのブロックデバイスに書き込みます。読み取りは常にローカルで実行されます。

プライマリノードが停止した場合、heartbeatがセカンダリデバイスをプライマリ状態に切り替えてアプリケーションを起動させます。(もし非ジャーナリングファイルシステムを使用している場合、fsckの実行も含まれます。)

停止したノードが再び起動した場合、それは新しいセカンダリノードであり、データ内容をプライマリ側と同期させる必要があります。これはもちろんサービスを中断せずにバックグラウンドで行われます。

1.4. DRBDは最近のHAクラスタとどのような関係がありますか?

私の知っている限りでは、最近のクラスタ(HP、Compaqなど)はたいてい共有されたストレージデバイスを使っています。従ってストレージデバイスは2台以上のノードに接続されていることになります(これは共有SCSIバスやファイバーチャネルを使って実現されています。)。

DRBDは共有デバイスを使うのと意味的には同じですが、非一般的なハードウェアは一切必要としません。DRBDは、私の印象では特別なストレージネットワークよりもコストの低いIPネットワーク上で動作します。

現在では、DRBDは一度に1つのノードにのみ読み書きアクセスを許可します。これは通常のフェールオーバー型HAクラスタにとって十分です。私の現在のタスクリストには載っていませんが、両ノードに読み書きアクセスを許可できるようになるにはそれほどの努力は必要ないでしょう。これには例えばGFSを使うと便利でしょう。