DRBD(Distributed Replicated Block Device)は、同じデータを同時に複数のサーバーのディスクに書き込むソフトウエアだ。約10年の歴史を持ち、開発元のLINBITによれば約20万セットの実績があるという。

 Linuxカーネルのローダブルモジュールとして動作するブロックデバイスモジュールと、管理用のコマンドやスクリプトで構成され、GPL(General Public License)バージョン2にもとづいて開発、配布されている。2.6.33以降のLinuxカーネルに取り入れられたため、多くのLinuxディストリビューションでサポートされている。

 DRBDによるデータレプリケーションには、次のような特徴がある。

・ファイルレベルではなくブロックレベルのレプリケーションである
・最大4台のサーバーにデータをレプリケートできる
・同期モードと非同期モードを持つ
・片方がダウンしても動作を続け、復旧したら自動的に同期される
・1ペタバイトまでサポート、SSDやInfinibandサポートなど、大容量、高速ディスクI/Oに対応

 以下、これらの特徴について説明する。

ブロックレベルのレプリケーション

 DRBDの最大の特徴は、ディスクブロック単位のレプリケーションである。対象ディスク領域(パーティションまたは論理ボリューム)を512バイト単位のブロックに分割し、書き換えられたブロックのみをコピー先にコピーする。コピー元とコピー先のディスク領域の内容は、ディスクブロックのレベルで完全に同一になる(図1)。

図1●DRBDの動作イメージ
[画像のクリックで拡大表示]

 コピー元を「プライマリ」、コピー先を「セカンダリ」と呼ぶが、レプリケーションの方向はつねにプライマリからセカンダリに向かう。セカンダリが停止した場合はプライマリのみに書き込む「非接続モード」に移行するので、片肺状態でもディスクI/Oを継続できる。セカンダリが復帰すると、「接続モード」に復帰し、プライマリのみに書きこまれていたブロックだけを自動的にセカンダリに高速にコピーしてくれる(図2)。

図2●セカンダリがダウンしたとき
[画像のクリックで拡大表示]

 プライマリがダウンしたらどうなるのだろうか。ダウン直前までのデータはセカンダリにレプリケートされている。このため、手動またはクラスタ管理システムの手助けによって、セカンダリ側をプライマリに「昇格」させ、ディスクにデータを書き込むサービスをこのサーバーで起動すればいい。

 rsyncのようなファイルレベルのレプリケーションツールと比較した場合、DRBDは次のような特徴を持つ。

・どんなファイルシステムでも取り扱える。ファイルシステムを使わないディスクI/O、例えばOracleのRAWデバイスモードもサポートできる。
・書き換えられたブロックのみをネットワーク経由でセカンダリに送るため、ネットワーク負荷が最小ですむ。言い換えると、高速にレプリケートできる。
・カーネルのブロックデバイスドライバとして動作するため、いったん起動してしまえば自動的、継続的にレプリケーションされ、プライマリとセカンダリのデータはつねに同期される。

 一方、DRBDは次のような前提条件ないし制約を持つ。

・ブロック単位の同期状態などを記録するための「メタデータ」領域を必要とする。ただし、レプリケーション領域サイズの約1/32768程度のサイズにすぎない。
・パーティションまたは論理ボリューム単位でのレプリケーションになる。パーティションの中の特定のサブディレクトリだけを対象にする、といった設定はできない。
・ルートパーティションはレプリケートできない。

 なお、2台ともプライマリで動作させる「デュアルプライマリモード」もサポートされている。ただし、GFS2やOCFS2などのクラスタファイルシステムを使うか、自分でディスク領域を管理しなければならない。