DRBD.CONF(5) | Configuration Files | DRBD.CONF(5) |
NAME
drbd.conf - DRBD 構成ファイルINTRODUCTION
DRBD は、データをクラスタのすべてのノードに複製するブロックデバイスを実装する。実際のデータおよび関連するメタデータは、通常、各クラスタノードの「通常の」ブロックデバイスに格納される。複製されたブロックデバイスは、 デフォルトで /dev/drbdminor で呼ばれる。それらはリソースにグループ化され、リソースごとに 1 つ以上のデバイスが含まる。リソース内のデバイス間のレプリケーションは、時間順に行われる。DRBD では、リソース内のデバイスを volumes で参照する。
DRBD 9 では、2 つ以上のクラスタノード間でリソースを複製できる。クラスタノード間の接続はポイントツーポイントリンクであり、TCP または TCP のようなプロトコルを使用する。すべてのノードを直接接続する必要がある。
DRBD は、カーネルと相互作用し、基本的な操作を実行する低レベルのユーザー空間コンポーネント (drbdsetup、 drbdmeta) 、DRBD の構成を理解、処理し、それを低レベルコンポーネントの基本操作に変換する高レベルのユーザー空間コンポーネント(drbdadm)、およびカーネルコンポーネントで構成される。
デフォルトの DRBD 構成は、 /etc/drbd.conf とそこからインクルードされる追加のファイル、通常は、 /etc/drbd.d/ の global_common.conf, すべての *.res ファイルから成り立つ。各リソースを *.res ファイルで別々に定義することは有用である。
構成ファイルは、各クラスタノードがクラスタ構成全体で同一のコピーを含むことができるように設計されている。各ノードのホスト名によって、構成のどの部分が適用されるかが決まるuname -n)。すべてのノードのクラスタ構成を同期させておくことを推奨する。手動でノードをすべてのノードにコピーするか、 csync2 または同様のツールそ使用する。
設定ファイルの例
global { usage-count yes; udev-always-use-vnr; } resource r0 { net { cram-hmac-alg sha1; shared-secret "FooFunFactory"; } volume 0 { device /dev/drbd1; disk /dev/sda7; meta-disk internal; } on alice { node-id 0; address 10.1.1.31:7000; } on bob { node-id 1; address 10.1.1.32:7000; } connection { host alice port 7000; host bob port 7000; net { protocol C; } } }
この例では、ボリューム番号が 0 の単一の複製デバイスが含まれるリソース r0 を定義する。このリソースは、ホスト alice, bob 間で複製され、それぞれ IPv4 アドレス 10.1.1.31, 10.1.1.32、ノード識別子 0, 1 を持つ。両方のホストで複製されたデバイスは /dev/drbd1 で呼び出され、実際のデータとメタデータは下位のデバイス /dev/sda7 に格納される。ホスト間の接続はプロトコル C を使用する。
詳しくは DRBD User's Guide[1] を参照。
FILE FORMAT
DRBD 構成ファイルはセクションで構成され、セクションには他のセクションとパラメータが含まれる。各セクションは、1 つ以上のキーワード、場合によってはセクション名、開始ブレース(“{”)、セクションの内容、および閉じ括弧(“}”) で構成される。セクション内のパラメータは、キーワード、1 つ以上のキーワードまたは値、セミコロン(“;”) で構成される。一部のパラメータ値には、素の数値が指定されたときに適用されるデフォルトのスケールがある(たとえば、Kilo は数値の1024倍)。このようなデフォルトのスケールは、接尾辞を使用して上書きすることができる。(メガの場合は M)。共通の接尾語 K = 2^10 = 1024, M = 1024 K, G = 1024 M はサポートされている。
コメントはハッシュ記号で始まり(“#”)、行の最後までコメントとみなされる。さらに、どのセクションにもキーワード skip 接頭辞を付けることができ、セクションおよびすべてのサブセクションを無効にするのに使用できる。。
追加ファイルは include file-pattern キーワードでインクルードできる。サポートされている形式は glob(7) マニュアルを参照。インクルード形式はセクションの外部でのみ許可される。
次のセクションが定義されている(インデントはどのコンテキストにあるかを示す)。
common [disk] [handlers] [net] [options] [startup] global [require-drbd-module-version-{eq,ne,gt,ge,lt,le}] resource connection multiple path | 2 host [net] [volume] [peer-device-options] [peer-device-options] connection-mesh [net] [disk] floating handlers [net] on volume disk [disk] options stacked-on-top-of startup
角括弧 [] 内のセクションは、設定の他の部分にも影響する。 common セクションはすべてのリソースに適用される。resource または on 内の disk セクションは、そのリソース内のすべてのボリュームに適用される。resource 内のnet セクションはそのリソースのすべての接続に適用される。これにより、各リソース、接続、またはボリュームに対して同じオプションを繰り返すのを避けることができる。オプションは resource, connection, on, volume セクションでオーバーライドできる。
peer-device-options は resync-rate, c-plan-ahead, c-delay-target, c-fill-target, c-max-rate, c-min-rate のどれかである. 後方互換性のため、disk オプションセクションでも指定できる。それらはすべての関連する接続に継承される。connection レベルでそれらが与えられた場合、その接続上のすべてのボリュームに継承される。peer-device-options セクションは disk キーワードで始まる。
セクション
commonconnection [name]
path
connection-mesh
disk
floating [address-family] addr:port
このセクションの node-id パラメータは必須である。address パラメータが指定されていない場合、デフォルトで対向ノードへの接続は作成されない。device, disk, meta-disk パラメータは定義もしくは継承されている必要がある。
global
require-drbd-module-version-{eq,ne,gt,ge,lt,le}
有効な形式は 1 つの文字列と 3 桁のバージョン番号で形成される(例えば require-drbd-module-version-eq 9.0.16;)。現在ロードされている DRBD カーネルモジュールが仕様と一致しない場合、読み込みを中止する。比較演算子名は test(1) と同じ形式である。
handlers
このセクションのすべてのパラメータはオプションである。イベントごとに 1 つのハンドラしか定義できない。ハンドラが定義されていなければ何も起こらない。
net
on host-name [...]
通常、少なくとも 1 つの volume セクションを含むか継承する。node-id と address パラメータはこのセクションで定義する必要がある。device, disk, meta-disk パラメータは定義もしくは継承されている必要がある。
通常の構成ファイルには、各リソースで 2 つ以上の on セクションが含まれる。floating セクションも参照。
options
resource name
リソースを定義する。通常、少なくとも 2 つの on セクションと少なくとも 1 つの connection セクションを含む。
stacked-on-top-of resource
DRBD 9 以降、スタッキングは推奨しない。代わりに 2 つ以上のノード間で複製されるリソースを使用することを推奨する。
startup
volume volume-number
connection セクションのパラメータ
host name [address [address-family] address] [port port-number]path セクションのパラメータ
host name [address [address-family] address] [port port-number]connection-mesh セクションのパラメータ
hosts name...disk セクションのパラメータ
al-extents extentsアクティビティーログはメタデータに書き込まれるが、失敗したノードのリカバリー時にはログ全体を再同期化する必要がある。アクティビティログのサイズは、再同期にかかる時間やクラッシュ後に複製されるディスクが整合状態になる時間に影響を与える。
アクティビティログは、4メガバイトのセグメントから構成される。その al-extents パラメータは、同時にアクティブにできるセグメントの数を決定する。al-extents のデフォルト値は 1237、 最小値は 7、 最大値は 65536 である。
有効な最大値はもっと小さくなる点に注意が必要であり、メタデータのデバイスの作成方法によっても異なる。次のマニュアルページを参照、drbdmeta(8)。有効な最大値は 919 * (使用できる オンディスクのアクティビティログのリングバッファ領域 /4KB -1) である。リングバッファはデフォルトで 32KB で、有効な最大値は 6433 である (データは 25GiB 以上カバーしている)。下位デバイスの量とレプリケーションリンク全体が 5 分以内で再同期できるようにすることを推奨する。
al-updates {yes | no}
disk-barrier,
disk-flushes,
disk-drain
disk-barrier
ディスクバリアをサポートしていないシステムで、このオプションを有効にするとデータが消失または破損する可能性がある。DRBD 8.4.1 までは、下位デバイスがバリアをサポートする場合 disk-barrier が有効でした。しかし、linux-2.6.36 (または RHEL6 の 2.6.32) 以降のカーネルでは、バリアがサポートされているかどうかを検出できなくなりました。drbd-8.4.2 以降、このオプションはデフォルトでは無効であり、使用する場合は明示的に有効にする必要がある。
disk-flushes
disk-drain
これらの3つの方法から、DRBD は設定が有効で、下位デバイスもサポートしている最初のものを使用する。これらの3つのオプションがすべて無効になっている場合、DRBD は依存関係を気にせずに書き込みリクエストを送信する。下位デバイスによって、書き込みリクエストを並べ替えることができ、異なるクラスタノード上で異なる順序で書き込みリクエストを送信できる。これは、データの損失または破損の原因となる。したがって、書き込み順序を制御する 3 つの方法をすべて無効にしないことを推奨する。
書込み順序を設定する一般的なガイドラインは、揮発性書込みキャッシュを備えた通常のディスク(または通常のディスクアレイ)を使用する場合は、disk-barrier または disk-flushes を使用することである。キャッシュを持たないストレージまたはバッテリバックアップのライトキャッシュでは、 disk-drain が適している。
disk-timeout
このオプションは カーネルパニックを引き起こす可能性があり、注意が必要である。
リクエストの「中断」あるいはディスクの強制切り離しは、完全に下位デバイスをブロックまたはハンギングして、リクエストをまったく処理せずエラーも処理しなくなる。この状況ではハードリセットとフェイルオーバ以外になす術がない。
「中断」すると、基本的にローカルエラーの完了を装い、すみやかにサービスの移行を行うことで安全な切り替えを行う。それでもなお、影響を受けるノードは "すぐ" に再起動される必要はある。
リクエストを完了することで、上位レイヤーに関連するデータページを再利用させることができる。
後にローカルの下位デバイスが「復帰」すると、ディスクから元のリクエストページへの DMA のデータは、うまくいくと未使用のページへランダムなデータを送るが、多くの場合その間に関係のないデータに変形してしまい、様々なダメージの原因になる。
つまり遅延した正常な完了は、特に読み込みリクエストの場合 panic() の原因になる。遅延した「エラー」完了は、その都度に通知は行うが、問題ないと考えてよい。
disk-timeout のデフォルト値は 0 であり、無限のタイムアウトを意味する。タイムアウトは 0.1 秒単位で指定する。このオプションは DRBD 8.3.12. から有効である。
md-flushes
on-io-error handler
pass_on
call-local-io-error
detach
read-balancing policy
このオプションは、DRBD 8.4.1 から有効である。
resync-after res-name/volume
rs-discard-granularity byte
この値は、下位ブロックデバイスの discard 粒度によって制約される。 rs-discard-granularity が下位ブロックデバイスの discard 粒度の乗数でない場合、DRBD はそれを切り上げる。この機能は、下位ブロックデバイスが discard コマンドの後に、ゼロを読み戻す場合にのみアクティブになる。
デフォルト値は 0 である。このオプションは 8.4.7 から有効である。
discard-zeroes-if-aligned {yes | no}
異なるノードで DRBD が discard 特性が異なるデバイスによって構成されている場合、discard はデータの不一致(古いデータまたはゴミが 1 つのバックエンドに残り、別のバックエンドではゼロが残る)の原因となる。オンライン照合は、数多くの偽の差異を報告する可能性がある。たぶんほとんどのユースケース (ファイルシステム上の fstrim) では無害であるが、DRBD はそれを持つことはできない。
安全に動作させるには、ローカルのバックエンド(プライマリ上)が "discard_zeroes_data=true" をサポートしていない場合、 discard のサポートを無効にする必要がある。受信側(セカンダリ)がマップされていなかった領域を割り当て、 "discard_zeroes_data = true" をサポートしていない場合、受信側で discard を明示的にゼロに変換する必要がある。
discard をサポートしているのに、discard_zeroes_data = false をアナウンスするデバイス(特に LVM/DM シンプロビジョニング)がある。DM-thin の場合、チャンクサイズに合わせた discard はマップされず、マッピングされていないセクタからの読み込みはゼロを返す。ただし、discard リクエストのアライメントされていない部分ヘッドまたはテール領域は暗黙に無視する。
整列したフル・チャンクの discard をパスし、これらの整列していない部分領域を明示的にゼロ・アウトするヘルパーを追加すると、そのようなデバイスでは discard_zeroes_data = true を効果的に達成する。
discard-zeroes-if-aligned を yes に設定すると、 discard_zeroes_data = false を通知するバックエンドであっても DRBD は discard を使用し、 discard_zeroes_data = true を通知する。
discard-zeroes-if-aligned を no に設定すると、それぞれのバックエンドが discard_zeroes_data = false をアナウンスする場合、DRBD は常に受信側でゼロアウトにフォールバックし、プライマリ側では discard に関して通知しない。
私たちは、 discard_zeroes_data 設定を完全に無視していました。確立し、期待された動作を壊さず、シンプロビジョニング LV の fstrim がスペースを解放する代わりにスペースを使い果たさないためのデフォルト値は yes である。
このオプションは 8.4.7 から有効である。
disable-write-same {yes | no}
disable-write-same を yes に設定すると、WRITE_SAME サポートが手動で無効にできる。
disable-write-same のデフォルト値は no である。このオプションは 8.4.7 から有効である。
peer-device-options セクションのパラメータ
disk キーワードでセクションを開くこともできる。c-delay-target delay_target,
c-fill-target fill_target,
c-max-rate max_rate,
c-plan-ahead plan_time
c-plan-ahead パラメーターは DRBD が再同期速度の変化にどのくらい速く適応するかを定義する。ネットワークの往復時間の 5 倍以上に設定する必要がある。 c-plan-ahead のデフォルト値は 20 で 0.1 秒単位で設定する。
c-fill-target パラメーターはどのくらいの量の再同期データを DRBD 実行中に常に持つかを定義する。通常のデータパスの一般的な値は 4K から 100K である。 c-fill-target のデフォルト値は 100 で単位はセクターである。
c-delay-target パラメータは DRBD が目指すべき再同期パスの遅延を定義する。これはネットワークの往復時間の 5 倍以上に設定する必要がある。 c-delay-target のデフォルト値は 10 で、0.1 秒単位である。
c-max-rate パラメーターは、動的に制御される再同期で使用される最大帯域幅を制限する。これをゼロに設定すると、制限がなくなる(DRBD 9.0.28 以降)。DRBD ホストと DRBD プロキシをホストするマシン間で利用可能な帯域幅、または利用可能なディスク帯域幅のいずれかに設定する。 c-max-rate のデフォルト値は 102400 で、単位は KiB/s である。
動的な再同期速度制御は DRBD 8.3.9 から有効である。
c-min-rate min_rate
c-min-rate の値 0 は、再同期の書き込みに使用できる帯域幅に制限がないことを意味する。これにより、アプリケーションの書き込みが大幅に遅くなる可能性がある。再同期速度の最低値は 1(1 KiB/s) である。
c-min-rate のデフォルト値は 250 で、単位は KiB/s である。
resync-rate rate
global セクションのパラメータ
dialog-refresh timedisable-ip-verification
usage-count {yes | no | ask}
このパラメータは、クラスタノードが利用カウンターに参加するかどうかを定義する。サポートされている値は yes, no, ask(ユーザーに聞く、デフォルト) である。
DRBD の開発を推進する貴重なフィードバックを得るため、ユーザーにオンライン利用カウンターへの参加を依頼したいと考えている。
udev-always-use-vnr
# implicit single volume without "volume 0 {}" block DEVICE=drbd<minor> SYMLINK_BY_RES=drbd/by-res/<resource-name> SYMLINK_BY_DISK=drbd/by-disk/<backing-disk-name> # explicit volume definition: volume VNR { } DEVICE=drbd<minor> SYMLINK_BY_RES=drbd/by-res/<resource-name>/VNR SYMLINK_BY_DISK=drbd/by-disk/<backing-disk-name>
global セクションでこのパラメータを定義すると、drbdadm は常に .../VNR の部分を追加し、ボリューム定義が暗黙的であるか明示的であるかを気にしない。
過去との互換性のために、これはデフォルトでは無効になっているが、有効にすることを推奨する。
handlers セクションのパラメータ
after-resync-target cmdbefore-resync-target cmd
before-resync-source cmd
out-of-sync cmd
quorum-lost cmd
fence-peer cmd
unfence-peer cmd
initial-split-brain cmd
local-io-error cmd
pri-lost cmd
pri-lost-after-sb cmd
ノードが現在プライマリで、スプリットブレイン後の自動回復プロセスが失敗したときに呼び出される。ノードのデータは放棄されるべきである。
pri-on-incon-degr cmd
split-brain cmd
disconnected cmd
net セクションのパラメータ
after-sb-0pri policydisconnect
discard-younger-primary,
discard-older-primary
discard-zero-changes
discard-least-changes
discard-node-nodename
after-sb-1pri policy
disconnect
consensus
violently-as0p
discard-secondary
call-pri-lost-after-sb
after-sb-2pri policy
disconnect
violently-as0p
call-pri-lost-after-sb
allow-two-primaries
いくつかのシナリオでは、2 つのノードを一度にプライマリにしたい場合がある。 DRBD 以外のメカニズムで、共有され複製されたデバイスへの書き込みが調整される方法を使用する必要がある。これは、OCFS2 や GFS などの共有ストレージクラスタファイルシステム、または仮想マシンイメージと仮想マシンを物理マシン間で移動できる仮想マシンマネージャを使用して実行できる。
allow-two-primaries は、2つのノードを同時にプライマリにすることを DRBD に指示する。非分散ファイルシステムを使用する場合は、このオプションを有効にしてはならない。データ破損とノードクラッシュが発生する。
always-asbp
このオプションを指定すると、両ノードのデータに関連性があるとして、スプリットブレイン発生後のポリシーが適用される。UUID の分析により 3 番目のノードの存在が疑われる場合には、フル同期が行われることがある。(または、なんらかの別の原因によって間違った UUID セットで判断してしまった場合)
connect-int time
cram-hmac-alg hash-algorithm
csums-alg hash-algorithm
csums-alg アルゴリズムが指定されている場合、同期ターゲットは、非同期データの要求と、現在持っているデータのハッシュ値も送信する。同期ソースは、このハッシュ値とそれ自身のバージョンのデータを比較する。ハッシュ値が異なる場合、新しいデータを同期ターゲットに送信し、そうでない場合はデータが同じであることを通知する。これにより、必要なネットワーク帯域幅が削減されるが、CPU 使用率が高くなり、同期ターゲットの I/O が増加する可能性がある。
csums-alg は、カーネルによってサポートされている安全なハッシュアルゴリズムの 1 つに設定できる。 /proc/crypto にリストされている shash アルゴリズムを参照。デフォルトでは、 csums-alg 設定されていない。
csums-after-crash-only
ほとんどの場合、再同期が必要であるとマークされたブロックは実際に変更されているため、チェックサムの計算、および再同期ターゲット上のブロックの読み書きはすべてオーバーヘッドである。
チェックサムベースの再同期の利点は、大部分がプライマリのクラッシュリカバリの後である。リカバリでは、アクティビティログでカバーされるより大きな領域が再同期が必要なものとしてマークされている。8.4.5 から導入された。
data-integrity-alg alg
data-integrity-alg は、カーネルによってサポートされている安全なハッシュアルゴリズムの 1 つに設定できる。 /proc/crypto にリストされている shash アルゴリズムを参照。デフォルトでは、このメカニズムは無効である。
CPU のオーバーヘッドが発生するため、本番環境でこのオプションを使用しないことを推奨する。また、「データ整合性に関する注意」も参照。
fencing fencing_policy
フェンシングは、両方のノードがプライマリで切断されている状態を回避するための予防措置である。これはスプリットブレイン状態とも呼ばれている。DRBDは、次のフェンシングポリシーをサポートする:
dont-care
resource-only
resource-and-stonith
ko-count number
max-buffers number
max-epoch-size number
on-congestion policy,
congestion-fill threshold,
congestion-extents threshold
DRBD を DRBD-proxy と一緒に使用する場合は、 送信キューがいっぱいになる前に DRBD を AHEAD/BEAIND モードに切り替える pull-ahead on-congestion ポリシーといっしょに使用することが望ましい。DRBD は、自身と対向ノードとの間の違いをビットマップに記録するが、もはや対向ノードに複製はしない。十分なバッファスペースが再び利用可能になると、ノードは対向ノードと同期を再開し、通常の複製に戻る。
これには、キューがいっぱいになってもアプリケーションの I/O をブロックしないという利点があるが、対向ノードの同期が大幅に遅れるという欠点もある。また、再同期している間、対向ノードは inconsistent(不整合) になる。
利用可能な congestion ポリシーは block (デフォルト), pull-ahead である。congestion-fill は、この接続で動作中に許可されているデータ量を定義する。デフォルト値は 0 で、この輻輳制御のメカニズムを無効にする(最大 10 ギガバイト)。congestion-extents は、 AHEAD/BEAIND モードに切り替える前にアクティブにできるビットマップエクステントの数を定義する。 al-extents と同じデフォルトと制限をもつ。congestion-extents は、 al-extents より小さい値に設定した場合のみ有効である。
AHEAD/BEHIND モードは DRBD 8.3.10 から有効である。
ping-int interval
ping-timeout timeout
socket-check-timeout timeout
このような場合、socket-check-timeout に DRBD と DRBD-Proxy 間の round trip time(RTT) を設定するとよい。たいていの場合 1 である。
デフォルトの単位は 10 分の 1 秒である。デフォルト値は 0 で socket-check-timeout 値の代わりに ping-timeout 値を使用する。8.4.5 から導入された。
protocol name
A
B
C
rcvbuf-size size
rr-conflict policy
disconnect
retry-connect
violently
call-pri-lost
shared-secret secret
sndbuf-size size
tcp-cork
timeout time
transport type
DRBD9 では、DRBD によって使用されるネットワークトランスポートは個別のモジュールとしてロードされる。このオプションを使用すると、ロードするトランスポートとモジュールを指定できる。現在のところ、tcp と rdma の 2 つのみをサポートする。RDMA トランスポートモジュールは LINBIT から購入したライセンスでのみ利用可能である。デフォルトは tcp。
use-rle
非常に大きなデバイスのビットマップは比較的大きいが、通常、ランレングス符号化を使用して非常にうまく圧縮される。これにより、ビットマップ転送の時間と帯域幅を節約できる。
use-rle は run-length エンコーディングを使用するかどうかを指定する。DRBD 8.4.0 以降デフォルトで有効である。
verify-alg hash-algorithm
低負荷の期間(例えば、月に1回)で定期的にオンライン照合をスケジュールすることを推奨する。また、「データ整合性に関する注意」も参照。
allow-remote-read bool-value
プライマリノードのディスクが切り離されると、DRBDはクラスタ内の別のノードから読み書きを続ける。このために、up-to-date データを持つノードを検索し、見つかったノードを使用してオペレーションを再開する。しかし、対向ノードは複製ターゲットとしてのみ使用されるため、対向ノードからデータを読み戻すことが望ましくない場合もある。この場合、 allow-remote-read を no にセットすることで、このノードが対向ノードからデータを読み取ることを禁止できる。
allow-remote-read パラメータは DRBD 9.0.19 から利用可能である。デフォルトは yes 。
on セクションのパラメータ
address [address-family] address:portアドレスファミリは ipv4, ipv6, ssocks (Dolphin Interconnect Solutions の「スーパーソケット」), sdp (Infiniband Sockets Direct Protocol), sci がサポートされる (sci は ssocks の別名である)。アドレスファミリが指定されていない場合、 ipv4 が仮定される。ipv6 アドレスファミリ以外は、 address に IPv4 アドレス表記を使用する(たとえば、1.2.3.4)。ipv6 アドレスは角括弧で囲み、 IPv6 アドレス表記法を使用する(たとえば、 [fd01:2345:6789:abcd :: 1])。ポートは常に 1〜65535 の 10 進数で指定される。
各ホストで、ポート番号は各アドレスごとに一意でなければならない。ポートは共有できない。
node-id value
ノード識別子は、クラスタがダウンしている場合にのみ、クラスタ内で再割り当てすることができる。構成内およびデバイスメタデータ内のノード識別子が、すべてのホスト上で一貫して変更されることが不可欠である。メタデータを変更するには、 drbdmeta dump-md でダンプし、ビットマップスロット割り当てを調整し、drbdmeta restore-md でメタデータを更新する。
node-id パラメータは DRBD 9 以降存在する。その値の範囲は 0 から 16 である。デフォルトはない。
options セクションのパラメータ (リソース options)
auto-promote bool-valueDRBD 9 より前は、これを明示的に行う必要があった( "drbdadm primary")。DRBD 9 以降、 auto-promote を使用すると、デバイスの 1 つが書き込み用にマウントまたはオープンされるときに、リソースをプライマリに自動的に昇格させることができる。すべてのデバイスがアンマウントされるか、オープンしているユーザがいなくなると、すぐにリソースの役割がセカンダリになる。
自動プロモーションは、クラスタの状態が許可する場合にのみ成功する(つまり、明示的な drbdadm primary コマンドが成功するなら)。それ以外の場合は、DRBD 9 より前と同様にデバイスのマウントまたはオープンが失敗する: mount(2) システムコールは、 errno を EROFS(読み取り専用ファイルシステム) に設定して失敗する。open(2) システムコールは、 errno を EMEDIUMTYPE(メディアタイプが間違っている) に設定してが失敗する。
auto-promote の設定に関係なく、デバイスが明示的に昇格された場合 (drbdadm primary)、明示的に降格する必要がある(drbdadm secondary)。
auto-promote は DRBD 9.0.0 から有効で、デフォルトは yes である。
cpu-mask cpu-mask
on-no-data-accessible policy
io-error
suspend-io
この設定は、DRBD 8.3.9 から有効である。デフォルトのポリシーは io-error である。
peer-ack-window value
ノードが書き込みリクエストを受け取ると、書き込みノードのビットマップを更新する方法はわかるが、ノード間のビットマップを更新する方法はわからない。この例では、書き込みリクエストがノード A から B および C に伝搬するとき、ノード B および C はノード A と同じデータを有するが、両方が同じデータを有するか不明である。
是正措置として、書き込みノードは、時には、相手との間にどのような状態があるかを示すピアツーピアパケットを対向ノードに送信する。
peer-ack-window は、peer-ack パケットを送信する前に、プライマリノードが送信するデータ量を指定する。値が小さいとネットワークトラフィックが増加する。値が大きいとネットワークトラフィックは減少するが、セカンダリノードのメモリ消費量が大きくなり、プライマリノードの障害後に、セカンダリノード間の再同期時間が長くなる。(注:peer-ack パケットは、他の理由でも送信される場合がある。たとえば、メンバーシップの変更または peer-ack-delay タイマーの満了など)。
peer-ack-window のデフォルト値は、2 MiB であり、単位はセクタである。このオプションは 9.0.0 から有効である。
peer-ack-delay expiry-time
このパラメータは、リモートノードの再同期動作に影響を与える可能性がある。対向ノードは、 AL-extent のロックを解除する peer-ack を受信するまで待つ必要がある。対向ノード間の再同期操作は、これらのロックを待つ必要がある。
peer-ack-delay のデフォルト値は、100 ミリ秒であり、単位はミリ秒である。このオプションは 9.0.0 から有効である。
quorum value
オプションの値は、 off, majority, all, または数値である。数値を設定する場合は、値がノード数の半分を超えていることを確認すること。クォーラムはデータの不一致を回避するメカニズムであり、2 つ以上の複製が存在する場合にフェンシングの代わりに使用されるときがある。デフォルトは off である。
切断されたノードがすべて outdated(無効) としてマークされている場合、パーティションのサイズに関係なく、常にクォーラムを持つ。つまり、すべてのセカンダリノードを正常に切断すると、1 つのプライマリが動作し続ける。1 つのセカンダリが切断された瞬間に、切断されたすべてのセカンダリノードがパーティションを形成すると仮定する。パーティションが他のパーティションよりも小さい場合、この時点ではクォーラムは失われる。
ディスクレスノードがクォーラムを常に取得できるようにする場合、majority, all オプションは使用しないことを推奨する。クラスタ内のディスクフルノードの完全な数を決定するための DBRD のヒューリスティックな方法は正確でないため、絶対数を指定することを推奨する。
クォーラムの実装は、DRBD カーネルドライバのバージョン 9.0.7 から有効である。
quorum-minimum-redundancy value
オプションの値は、 off, majority, all, または数値である。数値を設定する場合は、値がノード数の半分を超えていることを確認すること。
ディスクレスノードがクォーラムを常に取得できるようにする場合、majority, all オプションは使用しないことを推奨する。クラスタ内のディスクフルノードの完全な数を決定するための DBRD のヒューリスティックな方法は正確でないため、絶対数を指定することを推奨する。
このオプションは、DRBD カーネルドライバのバージョン 9.0.10 から有効である。
on-no-quorum {io-error | suspend-io}
通常、on-no-data-accessible は on-no-quorum と同じ値に設定する。
on-no-quorum オプションは、DRBD カーネルドライバのバージョン 9.0.8 から有効である。
startup セクションのパラメータ
このセクションのパラメータは、DRBD init スクリプトでシステム起動時の DRBD の動作を定義する。システムが起動し、実行後には効果がない。degr-wfc-timeout timeout
タイムアウトは秒単位で指定する。デフォルト値は 0 であり、無限のタイムアウトを意味する。wfc-timeout パラーメータも参照。
outdated-wfc-timeout timeout
タイムアウトは秒単位で指定する。デフォルト値は 0 であり、無限のタイムアウトを意味する。wfc-timeout パラーメータも参照。
stacked-timeouts
wait-after-sb
wfc-timeout timeout
volume セクションのパラメータ
device /dev/drbdminor-numberこのデバイスに加えて、udev は、 /dev/drbd/by-res/resource/ volume, /dev/drbd/by-disk/lower-level-device シンボリックリンクをデバイスに作成する。
disk {[disk] | none}
meta-disk internal,
meta-disk device,
meta-disk device [index]
index を指定すると、複数のレプリケートされたデバイスが同じメタデータデバイスを共有でき、それぞれ別のインデックスを使用する。各インデックスは 128 MiB のデータを占有し、2 つのクラスタノードで最大 4 TiB の複製されたデバイスサイズに対応する。メタデータデバイスは共有しないで、必要に応じて lvm ボリュームマネージャを使用してメタデータデバイスを作成することを推奨する。
index を指定しない場合、下位レベルのデバイスのサイズによってメタデータのサイズが決定される。必要なサイズは 36 KiB +(下位デバイスのサイズ) / 32K *(ノード数-1) である。もしメタデータデバイスがそれよりも大きい場合、余分なスペースは使用されない。
このパラメータは、disk が none 以外に設定されている場合は必須で、disk が none に設定されている場合は無視される。disk パラメータなしの meta-disk パラメータは使用できない。
データ整合性に関する注意
DRBD は、データの整合性チェックのための 2 つの異なるメカニズムをサポートする。 data-integrity-alg ネットワークパラメータを使用すると、ネットワーク経由で送信されたデータにチェックサムを追加できる。もう 1 つのオンライン照合メカニズム(drbdadm verify, verify-alg パラメータ)を使用すると、ディスク上のデータの違いをチェックできる。両方のメカニズムは、データが I/O 中に変更された場合(つまり、ネットワークを介して送信されている間、またはディスクに書き込まれている間)、誤検出を引き起こす可能性がある。これは常に問題を示すとは限らない。たとえば、一部のファイルシステムやアプリケーションでは、特定の操作のために I/O 下のデータを変更する。スワップ領域も I/O 中に変更される可能性がある。
ネットワークデータの整合性チェックは、データの送信後に送信側のチェックサムを検証することによって、 I/O 中のデータ変更を識別しようとする。不一致が検出された場合は、エラーを記録する。また、受信側も、不一致を検出するとエラーをログに記録する。したがって、受信側でのみ記録されるエラーはネットワーク上のエラーを示し、両側に記録されたエラーは I/O でのデータ変更を示す。
直近の例 (2007 年) では系統的なデータ損傷のケースがあり、特定の種類のギガビット NIC の TCP オフロードエンジンとドライバのバグが原因であった。データの破損が、コアメモリからカードへの DMA 転送で発生していた。TCP チェックサムはカード上で計算されたため、 TCP/IP プロトコルチェックサムではこの問題を検出できませんでした。
VERSION
このドキュメントは DRBD バージョン 9.0.0 向けに改訂されている。AUTHOR
Written by Philipp Reisner <[email protected]> and Lars Ellenberg <[email protected]>.REPORTING BUGS
Report bugs to <[email protected]>.COPYRIGHT
Copyright 2001-2018 LINBIT Information Technologies, Philipp Reisner, Lars Ellenberg. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.SEE ALSO
drbd(8), drbdsetup(8), drbdadm(8), DRBD User's Guide[1], DRBD Web Site[3]NOTES
- 1.
- DRBD User's Guide
- 2.
- オンライン利用カウンター
- 3.
- DRBD Web Site
17 January 2018 | DRBD 9.0.x |