第1章 DRBDの基礎

目次

1.1. カーネルモジュール
1.2. ユーザー空間の管理ツール
1.3. リソース
1.4. リソースのロール(役割)

Distributed Replicated Block Device (DRBD)は、ストレージのレプリケーション(複製)のためのソフトウェアで、シェアードナッシングを実現します。DRBDはサーバ間でブロックデバイス(ハードディスク、パーティション、論理ボリュームなど)の内容をミラーします。

DRBDによるミラーは次の特徴を持ちます。

1.1. カーネルモジュール

DRBDのコア機能はLinuxのカーネルモジュールとして実装されています。OSのI/Oスタックの下位の階層でDRBDは仮想的なブロックデバイスを作ります。このために、DRBDは非常に柔軟で応用範囲が広く、さまざまなアプリケーションの可用性を高めるために利用できます。

その定義とLinuxカーネルアーキテクチャとの関連にもとづき、DRBDは上位レイヤに関して一切関知しません。このため、DRBDは上位レイヤに対しては何ら機能を付与できません。たとえば、DRBDはファイルシステムの障害を検出できません。またext3やXFSなどのファイルシステムに対してアクティブ-アクティブクラスタ機能を追加することもできません。

図1.1 LinuxのI/OスタックでのDRBDの位置

drbd-in-kernel

1.2. ユーザー空間の管理ツール

DRBDにはカーネルモジュールと通信を行う管理ツールがいくつか用意されています。トップレベルのものからボトムレベルの順に以下に説明します。

drbdmanageマルチノードクラスタでDRBDリソース管理を行う場合に推奨するツールです。本ツールは別プロジェクトとして位置づけられています。DRBD Manageはクラスタ全体の設定情報を保存するために1つのDRBDリソースを使用し、lvcreatedrbdadm などの外部コマンドを呼び出すことで、使用頻度の高い管理作業を簡単に素早く行うことができます。

詳細についてはDRBD Manageの章をご参照ください。

drbdadmDRBDプログラム群における高レベル管理ツールです。このコマンドは、DRBDの制御に必要なすべてのパラメータを /etc/drbd.conf から読み込み、drbdsetupdrbdmeta のフロントエンドとして動作します。drbdadm には -d オプションで起動する dry-run モードがあり、実際にコマンドを実行することなく、drbdadm から呼び出される drbdsetupdrbdmeta のコマンドを表示します。

drbdsetupカーネルにロードされたDRBDモジュールを設定します。drbdsetup の全パラメータはコマンドラインで指定する必要があります。 drbdadmdrbdsetup を分離していることで最大限の柔軟性を確保しています。ほとんどのユーザーは drbdsetup を使う事はないでしょう。

drbdmetaDRBDメタデータの作成、ダンプ、リストアなどを行うコマンドです。drbdsetup と同様、ほとんどのユーザーはdrbdmeta を使うことはないでしょう。

1.3. リソース

DRBDでは、レプリケートするデータセットに関するさまざまな属性を総称して リソース と呼びます。リソースは以下の要素で構成されます。

リソース名. 個々のリソースを区別するために、ホワイトスペース以外のUS-ASCII文字で表される任意の名前を与えることができます。

ボリューム. どのリソースも、複数のレプリケーションストリームを共有する ボリュームのうちの1つを構成するレプリケーショングループですDRBDは、リソース内のすべてのボリューム間で書き込みの忠実性を保証します。ボリュームは 0 から番号付けされ、1つのリソースにおいて、最大で65,535ボリュームまで可能です。ボリュームにはレプリケートされたデータセットを含み、DRBD内部で使用するメタデータのセットも含みます。

drbdadm コマンドでは、リソース内のボリュームを、リソース名とボリューム名を <resource>/<volume> のように記述して指定します。

DRBDデバイス. DRBDが管理する仮想的なブロックデバイスです。DRBDが管理する仮想的なブロックデバイスで、147のメジャー番号を持ち、minor番号は0から順次割り振られます。各DRBDデバイスは、リソース内の1つのボリュームに該当します。関連付けられたブロックデバイスは通常 /dev/drbdX の形式になり、X はデバイス番号です。通常 udev#/dev/drbd/by-res/#resource/vol-nr にあるリソース名とボリューム名を含むシンボリックリンクも作成します。

[注記]注記

初期のバージョンのDRBDは、NBDのデバイスメジャー番号43を勝手に使っていました。現在は147という番号が、DRBDデバイスメジャー番号として、LANANA-registeredに正式に登録されています。

コネクション. コネクション はレプリケートされるデータセットを共有する、2つのホスト間の通信リンクです。DRBD9では、各リソースが複数のホストで設定できますが、この場合、現在のバージョンではホスト間にフルメッシュ型の接続が必要です。つまり、リソース用に各ホストは他のホストへの接続が必要です。

drbdadm では、コネクションはリソース名とコネクション名(デフォルトでは対向のホスト名)で指定されます。

1.4. リソースのロール(役割)

DRBDのすべてのリソースプライマリ または セカンダリ のどちらかのロール(役割)を持っています。

[注記]注記

「プライマリ」と「セカンダリ」という用語は適当に選んだものではないことを理解してください。DRBD開発者は意図的に「アクティブ」と「パッシブ」という用語を避けました。プライマリセカンダリストレージ の可用性に関する概念です。一方、アクティブパッシブアプリケーション の可用性に関する概念です。ハイアベイラビリティクラスタ環境では、一般的にアクティブノードのDRBDは プライマリ になりますが、これが例外のないルールだということではありません。

  • プライマリロールのDRBDデバイスでは、データの読み込みと書き込みが制約なく行えます。  この状態のストレージに対しては、ファイルシステムの作成やマウントが可能であり、 ブロックデバイスに対する下位デバイスI/OやダイレクトI/O等も可能です。
  • セカンダリ ロールのDRBDデバイスは、対向するノードのすべてのデータの更新を受け取りますが、他からのアクセスは受け付けません。 つまり自ノードのアプリケーションからのアクセスについても、読み込みと書き込みの両方とも一切受け付けません。 読み込みすら受け付けない理由は、 キャッシュの透過性を保証するためです。もしもセカンダリリソースが自ノードからのアクセスを受け付けると、この保証ができなくなります。

リソースのロールは、もちろん手動で切り替えできる他に、クラスタ管理アプリケーションの何らかの自動化アルゴリズムによって、または自動プロモーションでも切り替えられます。セカンダリからプライマリへの切り替えを 昇格 と呼びます。一方プライマリからセダンダリの切り替えは 降格 と呼びます。