Scroll to navigation

DRBDSETUP(8) System Administration DRBDSETUP(8)

NAME

drbdsetup - DRBD カーネルモジュールを構成する

SYNOPSIS

drbdsetup command {argument...} [option...]

DESCRIPTION

drbdsetup ユーティリティは、DRBD カーネルモジュールを構成し、また現在の構成を表示する。ユーザは通常、 drbdsetup でなく、DRBD に対してより高度なインタフェースを提供する drbdadm ユーティリティを通して使用する。(drbdadmdrbdsetup をどのように使うかを表示するには drbdadm--dry-run オプションを使用する。)

一部のオプション引数には、素の数値が指定されたときに適用されるデフォルトのスケールがある(たとえば、Kilo は数値の1024倍)。このようなデフォルトのスケールは、接尾辞を使用して上書きすることができる。(メガの場合は M)。共通の接尾語 K = 2^10 = 1024, M = 1024 K, G = 1024 M はサポートされている。

COMMANDS

drbdsetup attach minor lower_dev meta_data_dev meta_data_index,
drbdsetup disk-options minor

attach コマンドは、下位デバイスを既存の複製デバイスに接続する。disk-options コマンドは、接続された下位デバイスのディスクオプションを変更する。複製されたデバイスは、 drbdsetup new-minor で作られている必要がある。

複製されたデバイスをその minor 番号で指定する。lower_devは、下位レベルデバイスの名前である。meta_data_dev は、メタデータを含むデバイスの名前であり、 lower_dev と同じにできる。meta_data_index は、数値のメタデータインデックス、内部メタデータ用のキーワード internal 、または可変サイズの外部メタデータ用のキーワード flexible のどれかである。利用可能なオプション:

--al-extents extents

DRBD は、直近の書き込み活動に基づいて、すぐに書き直される可能性のある「ホット」または「アクティブ」ディスク領域を自動的に維持する。「アクティブ」ディスク領域はすぐに書き込むことができるが、「非アクティブ」ディスク領域は最初に「アクティブ化」する必要があり、このためのメタデータ書き込みが必要である。このアクティブなディスク領域を「アクティビティログ」として参照する。

アクティビティーログはメタデータに書き込まれるが、失敗したノードのリカバリー時にはログ全体を再同期化する必要がある。アクティビティログのサイズは、再同期にかかる時間やクラッシュ後に複製されるディスクが整合状態になる時間に影響を与える。

アクティビティログは、4メガバイトのセグメントから構成される。その al-extents パラメータは、同時にアクティブにできるセグメントの数を決定する。al-extents のデフォルト値は 1237、 最小値は 7、 最大値は 65536 である。

有効な最大値はもっと小さくなる点に注意が必要であり、メタデータのデバイスの作成方法によっても異なる。次のマニュアルページを参照、drbdmeta(8)。有効な最大値は 919 * (使用できる オンディスクのアクティビティログのリングバッファ領域 /4KB -1) である。リングバッファはデフォルトで 32KB で、有効な最大値は 6433 である (データは 25GiB 以上カバーしている)。下位デバイスの量とレプリケーションリンク全体が 5 分以内で再同期できるようにすることを推奨する。

--al-updates {yes | no}

このパラメータを使用すると、アクティビティログを完全にオフにすることができる(al-extents パラメータを参照)。メタデータの書き込みが少なくて済むため、書き込みが高速になるが、故障したプライマリノードの回復のためにデバイス全体を再同期する必要がある。al-updates のデフォルト値は yes である。

--disk-barrier,
--disk-flushes,
--disk-drain

DRBD は、依存書き込みリクエストの順序を処理する 3 つの方法がある:

disk-barrier

ディスクバリアを使用して、リクエストが正しい順序でディスクに書き込まれるようにする。バリアの前に提出されたすべてのリクエストが、バリアの後に提出されたリクエストの前にディスクに書き込まれることを保証する。これは、SCSI デバイスの 'tagged command queuing' と SATA デバイスの 'native command queuing' を使用して実装される。一部のデバイスおよびデバイススタックのみがこの方法をサポートする。デバイスマッパー (LVM) は、一部の構成でのみバリアをサポートする。

ディスクバリアをサポートしていないシステムで、このオプションを有効にするとデータが消失または破損する可能性がある。DRBD 8.4.1 までは、下位デバイスがバリアをサポートする場合 disk-barrier が有効でした。しかし、linux-2.6.36 (または RHEL6 の 2.6.32) 以降のカーネルでは、バリアがサポートされているかどうかを検出できなくなりました。drbd-8.4.2 以降、このオプションはデフォルトでは無効であり、使用する場合は明示的に有効にする必要がある。

disk-flushes

依存書き込みリクエスト間でディスクフラッシュを使用する(ドライブベンダーにより 'force unit access' とも呼ばれる)。これにより、すべてのデータが強制的にディスクに格納される。このオプションは、デフォルトで有効である。

disk-drain

依存書き込みリクエストを送信する前に、リクエストキューが排出されるまで待つ(つまり、リクエストが完了するのを待つ)。この方法は、リクエストが完了するとディスク上で安定している。DRBD 8.0.9 より前は、これが実装された唯一の方法でした。このオプションは、デフォルトで有効である。運用環境では無効にしないことを推奨する。

これらの3つの方法から、DRBD は設定が有効で、下位デバイスもサポートしている最初のものを使用する。これらの3つのオプションがすべて無効になっている場合、DRBD は依存関係を気にせずに書き込みリクエストを送信する。下位デバイスによって、書き込みリクエストを並べ替えることができ、異なるクラスタノード上で異なる順序で書き込みリクエストを送信できる。これは、データの損失または破損の原因となる。したがって、書き込み順序を制御する 3 つの方法をすべて無効にしないことを推奨する。

書込み順序を設定する一般的なガイドラインは、揮発性書込みキャッシュを備えた通常のディスク(または通常のディスクアレイ)を使用する場合は、disk-barrier または disk-flushes を使用することである。キャッシュを持たないストレージまたはバッテリバックアップのライトキャッシュでは、 disk-drain が適している。

--disk-timeout

DRBD デバイスのデータを格納する下位レベルデバイスが、指定した disk-timeout 以内で I/O リクエストを完了しない場合、DRBD はこれを障害とみなす。下位デバイスは切り離され、デバイスのディスク状態はディスクレス状態になる。DRBD が 1 台以上の対向ノードに接続したとき、失敗したリクエストはそのうちの 1 台に伝えられる。

このオプションは カーネルパニックを引き起こす可能性があり、注意が必要である

リクエストの「中断」あるいはディスクの強制切り離しは、完全に下位デバイスをブロックまたはハンギングして、リクエストをまったく処理せずエラーも処理しなくなる。この状況ではハードリセットとフェイルオーバ以外になす術がない。

「中断」すると、基本的にローカルエラーの完了を装い、すみやかにサービスの移行を行うことで安全な切り替えを行う。それでもなお、影響を受けるノードは "すぐ" に再起動される必要はある。

リクエストを完了することで、上位レイヤーに関連するデータページを再利用させることができる。

後にローカルの下位デバイスが「復帰」すると、ディスクから元のリクエストページへの DMA のデータは、うまくいくと未使用のページへランダムなデータを送るが、多くの場合その間に関係のないデータに変形してしまい、様々なダメージの原因になる。

つまり遅延した正常な完了は、特に読み込みリクエストの場合 panic() の原因になる。遅延した「エラー」完了は、その都度に通知は行うが、問題ないと考えてよい。

disk-timeout のデフォルト値は 0 であり、無限のタイムアウトを意味する。タイムアウトは 0.1 秒単位で指定する。このオプションは DRBD 8.3.12. から有効である。

--md-flushes

メタデータデバイスでディスクフラッシュとディスクバリアを有効にする。このオプションは、デフォルトで有効である。disk-flushes のパラーメータを参照。

--on-io-error handler

DRBD が下位レベルデバイスの I/O エラーにどのように反応するかを設定する。次のポリシーが定義される:

pass_on

ディスクのステータスを inconsistent(不整合) にし、 I/O エラーを起こしたブロックに対応するビットマップにマークをつけ、リモートのクラスターノード上で I/O 操作を再度行う。

call-local-io-error

local-io-error ハンドラを呼び出す (handlers セクションを参照)。

detach

下位レベルデバイスを切り離し、ディスクレスモードで続行する。

--read-balancing policy

policy 定義された読み取りリクエストで、クラスターノード間に負荷分散する。次のポリシーがサポートされる: prefer-local (デフォルト), prefer-remote, round-robin, least-pending, when-congested-remote, 32K-striping, 64K-striping, 128K-striping, 256K-striping, 512K-striping and 1M-striping.

このオプションは、DRBD 8.4.1 から有効である。

Note: the when-congested-remote option has no effect on Linux kernel 5.18 or above. It is deprecated starting from DRBD 9.1.12.

resync-after minor

デバイスは、指定されたデバイスの後でのみ再同期する必要があることを定義する。デフォルトでは、デバイス間の順序は定義されず、すべてのデバイスが並行して再同期される。下位レベルデバイスの構成、および使用可能なネットワークとディスクの帯域幅によっては、全体の再同期プロセスが遅くなる可能性がある。このオプションは、デバイス間の依存関係チェーンやツリーを形成するために使用できる。

--size size

下位レベルデバイスのサイズを自動的に決定するのではなく、明示的に指定する。デバイスサイズは一度決定されると、デバイスのライフタイムの間、維持される。自動的に決定するには、すべてのノードのすべての下位レベルデバイスの接続が必要であるが、サイズが明示的に指定されている場合は、これが必要でない。size 値はデフォルトでセクタ (512バイト) 単位であるとみなされる。

--discard-zeroes-if-aligned {yes | no}

Linux のブロックデバイスで discard/trim/unmap のサポートにはいくつかの側面がある。discard が一般的にサポートされていても、暗黙に失敗したり、discard リクエストを部分的に無視したりすることがある。デバイスは、また、マップされていないブロックからの読み込みが、定義済みのデータ(通常はゼロ)、未定義のデータ(おそらく古いデータか、ゴミ)のどちらを返すか通知する。

異なるノードで 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}

一部のディスクは、WRITE_SAME サポートをカーネルに通知するが、実際にそのようなリクエストを受信すると、I/O エラーで失敗する。これは主に、仮想化されたディスクを使用しているときに発生する。特に、この動作は VMware の仮想ディスクで観察されている。

disable-write-sameyes に設定すると、WRITE_SAME サポートが手動で無効にできる。

disable-write-same のデフォルト値は no である。このオプションは 8.4.7 から有効である。

--rs-discard-granularity byte

rs-discard-granularity がゼロ以外の正の値に設定されている場合、DRBD はこのサイズで再同期操作をリクエストする。そのようなブロックが同期ソースノード上にゼロバイトしか含まない場合、同期ターゲットノードは、その領域に対して discard/trim/unmap コマンドを発行する。

この値は、下位ブロックデバイスの discard 粒度によって制約される。 rs-discard-granularity が下位ブロックデバイスの discard 粒度の乗数でない場合、DRBD はそれを切り上げる。この機能は、下位ブロックデバイスが discard コマンドの後に、ゼロを読み戻す場合にのみアクティブになる。

The usage of rs-discard-granularity may cause c-max-rate to be exceeded. In particular, the resync rate may reach 10x the value of rs-discard-granularity per second.

デフォルト値は 0 である。このオプションは 8.4.7 から有効である。

drbdsetup peer-device-options resource peer_node_id volume

これらは、 peer のデバイスに影響を与えるオプションである。

--c-delay-target delay_target,
--c-fill-target fill_target,
--c-max-rate max_rate,
--c-plan-ahead plan_time

再同期速度を動的に制御する。次のモードが使用できる。

•フィル・ターゲットによる動的制御 (デフォルト)。c-plan-ahead がゼロ以外で、c-fill-target がゼロ以外の場合に有効になる。ゴールは、定義された量のデータでデータパスのバッファーを埋めることである。このモードは DRBD プロキシを使用する場合に推奨される。 c-plan-ahead, c-fill-target, c-max-rate で設定する。

•遅延ターゲットによる動的制御。c-plan-ahead がゼロ以外 (デフォルト) で、c-fill-target がゼロの場合に有効になる。ゴールは、データパスで定義された遅延を持つことである。 c-plan-ahead, c-delay-target, c-max-rate で設定する。

•固定した再同期レート。c-plan-ahead がゼロの場合に有効である。DRBD は、固定レートで再同期 I/O を実行しようとする。 resync-rate で設定される。

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 は、再同期の書き込みに使用できる帯域幅を制限する。残りの帯域幅はアプリケーションの書き込みに使用される。

c-min-rate の値 0 は、再同期の書き込みに使用できる帯域幅に制限がないことを意味する。これにより、アプリケーションの書き込みが大幅に遅くなる可能性がある。再同期速度の最低値は 1(1 KiB/s) である。

c-min-rate のデフォルト値は 250 で、単位は KiB/s である。

--resync-rate rate

DRBD が再同期に使用できる帯域幅を定義する。DRBD では、再同期中でも「通常の」アプリケーション I/O が可能である。再同期の帯域幅が大きすぎると、アプリケーション I/O が非常に遅くなる可能性がある。このパラメータは、これを避けることができる。これは、動的な再同期コントローラが無効の場合にのみ機能する。

drbdsetup check-resize minor

指定された複製デバイスの下位デバイスの現在のサイズを記録する。drbdadm によって使用される。サイズ情報は、/var/lib/drbd/drbd-minor-minor.lkbd という名前で記録される。

drbdsetup new-peer resource peer_node_id,
drbdsetup net-options resource peer_node_id

new-peer コマンドは、 resource に接続を作成する。リソースは drbdsetup new-resource で作成されている必要がある。net-options オプションは、既存の接続のネットワークオプションを変更する。connect コマンドで接続をアクティブにする前に、少なくとも1つのパスを new-path コマンドで追加する必要がある。利用可能なオプション:

--after-sb-0pri policy

スプリットブレインが検出され、2 つのノードのいずれもプライマリでない場合の対応方法を定義する。(2 つのノードが接続されたときにスプリットブレインを検出する、スプリットブレインの決定は常に2つのノード間である) 定義されたポリシーは次のとおり:

disconnect

自動再同期はしない。単に切断する。

discard-younger-primary,
discard-older-primary

最初(discard-younger-primary)、または最後(discard-older-primary) にプライマリなったノード から再同期する。両方のノードが独立してプライマリになった場合、 discard-least-changes ポリシーが使用される。

discard-zero-changes

スプリットブレイン状況が検出されてからノードの 1 つだけがデータを書き込んだ場合は、このノードからもう 1 つのノードに再同期する。両方のノードがデータを書き込んだ場合は切断する。

discard-least-changes

より多くの変更されたブロックを持つノードから再同期する。

discard-node-nodename

名前付きノードと常に再同期する。

--after-sb-1pri policy

1 つのノードがプライマリ、もう 1 つのノードをセカンダリのときに、スプリットブレインが検出された場合の対応方法を定義する。(2 つのノードが接続されたときにスプリットブレインを検出する、スプリットブレインの決定は常に2つのノード間である) 定義されたポリシーは次のとおり:

disconnect

自動再同期を行わず接続を切断する。

consensus

after-sb-0pri アルゴリズムの結果が現在のセカンダリノードのデータを破棄することになる場合、セカンダリノードのデータを破棄する。それ以外の場合は切断する。

violently-as0p

プライマリのデータに大きな変更がある場合でも、常に after-sb-0pri アルゴリズムの判断を採用する。このポリシーは allow-two-primaries オプションを指定し、 1 ノードファイルシステム (OCF2 や GFS ではない) を使用している場合のみ有用である。このオプションを使用すると、プライマリノードがクラッシュする可能性があり、推奨しない。

discard-secondary

セカンダリノード上のデータを破棄する。

call-pri-lost-after-sb

常に after-sb-0pri アルゴリズムの判断を採用する。プライマリノードでデータを破棄することになる場合は、 プライマリノードで pri-lost-after-sb ハンドラを呼び出す。

--after-sb-2pri policy

スプリットブレインが検出され、両方のノードがプライマリである場合の対応方法を定義する。(2 つのノードが接続されたときにスプリットブレインを検出する、スプリットブレインの決定は常に2つのノード間である) 定義されたポリシーは次のとおり:

disconnect

自動再同期を行わず接続を切断する。

violently-as0p

after-sb-1priviolently-as0p ポリシーを参照。

call-pri-lost-after-sb

そのマシンがセカンダリに降格できる場合を除いて、いずれかのマシンの pri-lost-after-sb ヘルパープログラムを呼び出す。ヘルパープログラムはマシンを再起動することが期待され、ノードをセカンダリにする。どのマシンがヘルパープログラムを実行するかは、 after-sb-0pri ポリシーによって決定される。

--allow-two-primaries

DRBD デバイスを構成する最も一般的な方法は、一度に 1 つのノードのみをプライマリ(したがって書き込み可能)にすることである。

いくつかのシナリオでは、2 つのノードを一度にプライマリにしたい場合がある。 DRBD 以外のメカニズムで、共有され複製されたデバイスへの書き込みが調整される方法を使用する必要がある。これは、OCFS2 や GFS などの共有ストレージクラスタファイルシステム、または仮想マシンイメージと仮想マシンを物理マシン間で移動できる仮想マシンマネージャを使用して実行できる。

allow-two-primaries は、2つのノードを同時にプライマリにすることを DRBD に指示する。非分散ファイルシステムを使用する場合は、このオプションを有効にしてはならない。データ破損とノードクラッシュが発生する。

--always-asbp

通常、3 番目のノードが存在しないことが現在の UUID 値から明らかな場合のみ、スプリットブレイン発生後の修復ポリシーだけが適用される。

このオプションを指定すると、両ノードのデータに関連性があるとして、スプリットブレイン発生後のポリシーが適用される。UUID の分析により 3 番目のノードの存在が疑われる場合には、フル同期が行われることがある。(または、なんらかの別の原因によって間違った UUID セットで判断してしまった場合)

--connect-int time

2つのノード間の接続が drbdsetup connect で構成される、DRBD はすぐに接続を確立しようとする。これが失敗すると、DRBD はconnect-int 秒後に接続を試みる。connect-int のデフォルト値は 10 秒である。

--cram-hmac-alg hash-algorithm

対向ノードの認証に使用するハッシュベースのメッセージ認証コード (HMAC) またはセキュアハッシュアルゴリズムを構成する。カーネルはいくつかの異なるアルゴリズムをサポートしており、その中にはカーネルモジュールとしてロード可能なものもある。/proc/crypto にリストされている shash アルゴリズムを参照。デフォルトで cram-hmac-alg は設定されていない。対向ノードの認証には、shared-secret も構成する必要がある。

--csums-alg hash-algorithm

通常、2 つのノードが再同期するとき、同期ターゲットは同期ソースから非同期データを要求し、同期ソースはデータを送信する。多くの使用パターンで、それらのブロックのかなりの数が実際には同一になっている。

csums-alg アルゴリズムが指定されている場合、同期ターゲットは、非同期データの要求と、現在持っているデータのハッシュ値も送信する。同期ソースは、このハッシュ値とそれ自身のバージョンのデータを比較する。ハッシュ値が異なる場合、新しいデータを同期ターゲットに送信し、そうでない場合はデータが同じであることを通知する。これにより、必要なネットワーク帯域幅が削減されるが、CPU 使用率が高くなり、同期ターゲットの I/O が増加する可能性がある。

csums-alg は、カーネルによってサポートされている安全なハッシュアルゴリズムの 1 つに設定できる。 /proc/crypto にリストされている shash アルゴリズムを参照。デフォルトでは、 csums-alg 設定されていない。

--csums-after-crash-only

このオプション(および上記の csums-alg) を有効にすると、プライマリクラッシュ後の最初の再同期に対してのみチェックサムベースの再同期を使用するが、その後の「ネットワーク復帰」では使用しない。

ほとんどの場合、再同期が必要であるとマークされたブロックは実際に変更されているため、チェックサムの計算、および再同期ターゲット上のブロックの読み書きはすべてオーバーヘッドである。

チェックサムベースの再同期の利点は、大部分がプライマリのクラッシュリカバリの後である。リカバリでは、アクティビティログでカバーされるより大きな領域が再同期が必要なものとしてマークされている。8.4.5 から導入された。

--data-integrity-alg alg

DRBD は通常、 TCP/IP プロトコルに組み込まれたデータ整合性チェックに依存するが、データ整合性アルゴリズムが設定されている場合は、さらに、このアルゴリズムを使用して、ネットワーク経由で受信したデータが送信者のものと一致することを確認する。データの整合性エラーが検出された場合、DRBD はネットワーク接続を閉じ、再接続し、再同期を行う。

data-integrity-alg は、カーネルによってサポートされている安全なハッシュアルゴリズムの 1 つに設定できる。 /proc/crypto にリストされている shash アルゴリズムを参照。デフォルトでは、このメカニズムは無効である。

CPU のオーバーヘッドが発生するため、本番環境でこのオプションを使用しないことを推奨する。また、「データ整合性に関する注意」も参照。

--fencing fencing_policy

フェンシングは、両方のノードがプライマリで切断されている状態を回避するための予防措置である。これはスプリットブレイン状態とも呼ばれている。DRBDは、次のフェンシングポリシーをサポートする:

dont-care

フェンシングのためのアクションを実行しない。これがデフォルトのポリシーである。

resource-only

ノードが切り離されたプライマリ状態になると、対向ノードをフェンシングしようとする。この動作は fence-peer ハンドラによって行われる。このハンドラは、レプリケーション用とは別のネットワーク経由で対向ノードにアクセスし、 そこで 'drbdadm outdate minor' の実行を想定する。

resource-and-stonith

ノードが切り離されたプライマリ状態になると、 DRBD はすべてのディスク I/O を停止して fence-peer ハンドラを呼び出す。このハンドラは、レプリケーション用とは別のネットワーク経由で対向ノードにアクセスし、 そこで 'drbdadm outdate minor' の実行を想定する。これが実行できない場合、 STONITH 機能を使って対向ノードを強制排除する。これらが完了したら、ディスク I/O を再開する。fence-peer ハンドラが失敗した場合、 'drbdadm resume-io' コマンドでディスク I/O を再開できる。

--ko-count number

セカンダリノードが書き込みリクエストを timeout 内で ko-count 回以上失敗した場合、そのセカンダリノードはクラスタから排除される。プライマリノードは、このセカンダリノードへの接続をスタンドアロンに設定する。この機能を無効にするには、明示的に 0 に設定する必要がある。デフォルトはバージョン間で変更されている。8.4 は 7 がデフォルト値である。

--max-buffers number

再同期、オンライン照合を行う際に、受信側で DRBD マイナーデバイスあたりに使用するメモリを制限する。単位は PAGE_SIZE で、ほとんどのシステムで 4KiB である。設定できる最小値は 32 (=128 KiB) でハードコードされている。これらバッファはディスクからの読み書きの際にデータブロックを保持するために使用される。輻輳時のデッドロックを回避するために、この設定はハード制限というよりは閾値として使用される。最大バッファページが使用されると、プールからのそれ以上の割り当てが制限される。受信側の I/O バックエンドに余裕がない場合には、 max-buffers を増やすとよい。

--max-epoch-size number

書き込みバリアを発行する前に DRBD が発行できる書き込みリクエストの最大数を定義する。デフォルト値は 2048 で、最小値は 1 、最大値は 20000 である。このパラメータを 10 未満の値に設定すると、パフォーマンスが低下する可能性がある。

--on-congestion policy,
--congestion-fill threshold,
--congestion-extents threshold

デフォルトでは、 TCP 送信キューが一杯になると、 DRBD は書き込みをブロックする。これにより、より多くのバッファスペースが再び利用可能になるまで、アプリケーションがさらに書き込みリクエストを生成するのを防ぐ。

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

対向ノードへの TCP/IP 接続で ping-int 秒間に何も通信が行われなかった場合、DRBD はキープアライブパケットを送信して、対向ノードまたはネットワーク接続の失敗がすぐに検出されるようにする。デフォルト値は 10 秒で、最小値は 1 、最大値は 120 秒である。単位は秒である。

--ping-timeout timeout

キープアライブパケットへの応答のタイムアウトを定義する。対向ノードが ping-timeout 間で応答しない場合、 DRBD は接続を終了し、再接続しようとする。デフォルト値は 0.5 秒で、最小値は 0.1 秒、最大値は 30 秒である。単位は 10 分の 1 秒である。

--socket-check-timeout timeout

DRBD-Proxy を使っていて大量のバッファを確保する必要がある環境では ping-timeout に非現実的な大きな値を指定しなければならないことがある。TCP コネクションが開始したときの安定するのを待つ局面でも、 DRBD はデフォルトで ping-timeout を使ってしまう。DRBD-Proxy は通常、同じデータセンターに配置されているため、長い待機時間は DRBD の接続プロセスを妨げる可能性がある。

このような場合、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

DRBD デバイスへの書き込みは、ローカルディスクへの書き込みと TCP/IP 送信バッファに到達した時点で完了とする。

B

DRBD デバイスへの書き込みは、ローカルディスクへの書き込みと、すべての対向ノードが書き込みリクエストを受信をした時点で完了とする。

C

DRBD デバイスへの書き込みは、ローカルディスクとすべてのリモートディスクへの書き込みが終わった時点で完了とする。

--rcvbuf-size size

TCP/IP 受信バッファのサイズを指定する。0(デフォルト) を指定すると、バッファサイズが動的に調整される。このパラメータは通常設定する必要はないが、最大 10MiB まで設定できる。デフォルトの単位はバイトである。

--rr-conflict policy

このオプションは、再同期決定の結果がクラスタ内の現在のロール割り当てと互換性がない場合を解決するのに役立つ。定義されたポリシーは次のとおり:

disconnect

自動再同期を行わず接続を切断する。

retry-connect

今すぐ切断し、その後すぐに再接続する。

violently

プライマリノードへの再同期が許可され、ブロックデバイス上のデータがノードの 1 つに対して安定しているという前提に反す。このオプションは危険であり、使ってはならない。

call-pri-lost

どこか 1 つのマシンで pri-lost ハンドラを呼び出す。ハンドラはマシンを再起動することが期待され、ノードをセカンダリにする。

auto-discard

Auto-discard reverses the resync direction, so that DRBD resyncs the current primary to the current secondary. Auto-discard only applies when protocol A is in use and the resync decision is based on the principle that a crashed primary should be the source of a resync. When a primary node crashes, it might have written some last updates to its disk, which were not received by a protocol A secondary. By promoting the secondary in the meantime the user accepted that those last updates have been lost. By using auto-discard you consent that the last updates (before the crash of the primary) should be rolled back automatically.

--shared-secret secret

対向ノードの認証に使用する共有秘密鍵を設定する。secret は 64 文字までで指定する。対向ノードの認証には、 cram-hmac-alg も設定する必要がある。

--sndbuf-size size

TCP/IP 送信バッファのサイズを指定する。DRBD 8.0.13/8.2.7 以降、 0 (デフォルト) を指定すると、バッファサイズが動的に調整される。32 KiB 未満の値は、この接続のスループットに有害である。大きなバッファサイズは、プロトコル A が遅延の大きいネットワークで使用される場合に特に有用である。サポートされる最大値は 10 MiB である。

--tcp-cork

デフォルトで、DRBD は TCP_CORK ソケットオプションを使用して、カーネルが部分的なメッセージを送信しないようにする。その結果、ネットワーク上のパケット量が少なくなり、サイズが大きくなる。一部のネットワークスタックでは、この最適化で悪化する可能性がある。tcp-cork を使用してこの最適化を無効にすることができる。

--timeout time

ネットワークを介した応答のタイムアウトを定義する。対向ノードが指定された timeout 時間内で応答を送信しない場合、対向ノードが死んだと判断して TCP/IP コネクションを切断する。タイムアウト値は、 connect-intping-int より小さい値でなければならない。デフォルトは 6 秒である。値は 10 分の 1 秒単位で指定する。

--use-rle

クラスタノード上の複製された各デバイスには、それぞれの対向ノードデバイス用の個別のビットマップがあある。このビットマップは、ローカルデバイスと対向ノードデバイスの違いを追跡するために使用される。クラスタの状態によっては、デバイスのビットマップ、対向ノードデバイスのビットマップ、または両方のビットマップにディスクが異なるとマークできる。2つのクラスタノードが接続すると、相互のビットマップを交換し、ローカルと対向ノードのビットマップを検査して全体的な違いを判断する。

非常に大きなデバイスのビットマップは比較的大きいが、通常、ランレングス符号化を使用して非常にうまく圧縮される。これにより、ビットマップ転送の時間と帯域幅を節約できる。

use-rle は run-length エンコーディングを使用するかどうかを指定する。DRBD 8.4.0 以降デフォルトで有効である。

--verify-alg hash-algorithm

オンライン照合(drbdadm verify) は、ディスクブロックのチェックサム(すなわち、ハッシュ値)を計算して比較し、それらが異なるかどうかを検出する。verify-alg は、これらのチェックサムに使用するアルゴリズムを決定する。オンライン照合を使用するには、カーネルでサポートされている安全なハッシュアルゴリズムの1つに設定する必要がある。 /proc/crypto にリストされている shash アルゴリズムを参照。

低負荷の期間(例えば、月に1回)で定期的にオンライン照合をスケジュールすることを推奨する。また、「データ整合性に関する注意」も参照。

drbdsetup new-path resource peer_node_id local-addr remote-addr

new-path コマンドは、接続にパスを作成する。接続は drbdsetup new-peer で作成されている必要がある。local_addr, remote_addr は、ローカルとリモートのプロトコル、ネットワークアドレス、ポートの形式を [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])。port のデフォルトは 7788 である。

drbdsetup connect resource peer_node_id

connect コマンドは接続をアクティブにする。つまり、DRBD ドライバは接続パスのすべてのローカルアドレスをバインドしてリッスンする。接続パスを 1 つ以上確立しようとする。利用可能なオプション:

--tentative

対向ノードへの接続が確立できるかどうか、および実際に接続を確立したり、再同期を開始したりすることなく、再同期が必要かどうか(また、その方向も)を判断する。--tentative なしだと、DRBD が何をするかシステムログを調べて、確認する。

--discard-my-data

ローカルデータを破棄して、最新データを持つ対向ノードと再同期する。スプリットブレイン状態から復旧するときに、このオプションを手作業で指定する。

drbdsetup del-peer resource peer_node_id

del-peer コマンドは、 resource から接続を削除する。

drbdsetup del-path resource peer_node_id local-addr remote-addr

del-path コマンドは、接続からパスを削除する。接続先の接続を維持するためにパスが必要な場合は失敗しないようにする。すべてのパスを削除するには、まず接続を切断する。

drbdsetup cstate resource peer_node_id

接続の現在の状態を表示する。接続は、対向ノードの node-id によって識別される。drbdsetup connect コマンを参照。

drbdsetup del-minor minor

複製されたデバイスを削除する。下位レベルのデバイスに接続できまない。drbdsetup detach を参照。

drbdsetup del-resource resource

リソースを削除する。すべてのボリュームと接続を最初に削除する必要がある (drbdsetup del-minordrbdsetup disconnect)。あるいは、 drbdsetup down すべてのボリュームと接続とともにリソースを削除するために使用できる。

drbdsetup detach minor

複製されたデバイスの下位デバイスを切り離す。利用可能なオプション:

--force,
--diskless

強制的に切り離し、すぐに戻る。これにより、保留中のすべての I/O が完了するまで下位レベルのデバイスが失敗した状態になり、デバイスが切り離される。下位レベルのデバイスにまだ送信されていない I/O (デバイスの I/O が中断されたなど) は失敗したものとみなされる。 Mark the detached volume as "permanently diskless", converting it to "intentionally diskless client", in contrast to temporarily diskless, to be re-attached later.

drbdsetup disconnect resource peer_node_id

対向ノードへの接続を削除する。接続は、対向ノードの node-id によって識別される。drbdsetup connect コマンを参照。

drbdsetup down {resource | all}

すべてのボリューム、接続、およびリソース自体を削除して、リソースを落とす。

drbdsetup dstate minor

下位デバイスの現在のディスク状態を表示する。

drbdsetup events2 {resource | all}

設定されたすべての DRBD オブジェクトの現在の状態、状態へのすべての変更を表示する。

出力形式は、機械だけでなく人も読める形式である。各行は、イベントの種類を示す単語で始まる: exists は既存オブジェクトの場合; create, destroy, change はオブジェクトが作成、破棄、変更された場合; call, response はイベントハンドラが呼び出された、戻った場合、rename はオブジェクトの名前が変更された場合。2 番目の単語は、イベントが適用されるオブジェクトを示す: resource, device, connection, peer-device, helper, 現在の状態が完全にダンプされたことを示すための dash (-) 。

残りの単語はオブジェクトを識別し、オブジェクトが入っている状態を記述する。いくつかの特別なキーは言及する価値がある:

resource may_promote:{yes|no}

プライマリへの昇格が成功すると予想されるかどうか。 quorum が有効になっている場合、これを使用してフェイルオーバーをトリガーできる。このノードで may_promote:yes が報告されると、他のノードでは書き込みができなくなる。つまり、通常、アプリケーションが別のノードで実行されている場合でも、このノードでアプリケーションを起動できるようになる。

resource promotion_score:score

このリソースをプロモートするための相対的なヒューリスティック整数。ローカルディスクがあり、最新のデータにアクセスできるという点では、スコアが高いほど優れている。一部のノードがプライマリである場合でも、スコアは正の場合がある。クォーラムまたは最新データへのアクセスがないためにプロモーションが不可能な場合は、0 になる。

利用可能なオプション:

--now

現在の状態を報告した後に終了する。デフォルトでは、継続的に監視し、状態の変化を報告する。

--poll

stdin を読み込み、n キーが入力されたときに更新する。改行は無視され、他のすべての入力はコマンドを終了する。

--now オプションがない場合は、出力を継続する。n キーごとに現在の状態がフェッチされるが、変更されたオブジェクトのみが出力される。これは、統計が変更された場合にのみしか DRBD が更新を送信しないため、--statistics または --full とともに使用すると便利である。

--now オプションとともに使用されると、完全な状態が n キーごとに出力される。その他の変更は出力されない。

--statistics

統計情報を出力に含める。

--diff

古い状態と新しい状態を diff 形式で情報を書き出す。状態追跡を必要とするツールに便利である。

--full

Write complete state information, especially on change events. This enables --statistics.

--timestamps

Prefix event lines with a timestamp in ISO 8601 format (YYYY-MM-DDThh:mm:ss.ssssss±hh:mm). The timetsamp is generated by drbdsetup just before it prints the event line(s). If a single event causes multiple lines to be printed, they should all have the same timestamp prefix.

--color={always | auto | never}

出力をカラー化する。 --color=auto, drbdsetup は標準出力が端末に接続されている場合にのみカラーコードを出力する。

drbdsetup get-gi resource peer_node_id volume

特定の接続上のデバイスのデータ世代識別子を表示する。デバイスは、そのボリューム番号によって識別される。接続はそのエンドポイントによって識別される。drbdsetup connect コマンドを参照。

出力は、現在の UUID、ビットマップ UUID、および最初の2つの履歴 UUID で構成され、一連のフラグが続く。現在の UUID と履歴 UUID はデバイス固有である。ビットマップ UUID およびフラグは、対向ノードのデバイス固有である。このコマンドは、最初の2つの履歴 UUID のみを表示する。内部的には、DRBD は各対向ノードのデバイスの履歴 UUID を1つ保持する。

drbdsetup invalidate minor

デバイスのローカルデータを対向ノードのローカルデータで置き換える。すべてのローカルデータが非同期とマークされ、指定された対向ノードデバイスとの再同期が始まる。

利用可能なオプション:

--reset-bitmap=no

通常、invalidate は対向ノードからの再同期を開始する前に、ビットマップのすべてのビットを out-of-sync に設定する。--reset-bitmap=no を指定すると、DRBD はビットマップをそのまま使用する。通常、これはオンライン検証で下位デバイスの違いが見つかった後に使用される。

--reset-bitmap オプションは、DRBD カーネルドライバー 9.0.29 および drbd-utils9.17 以降で使用できる。

--sync-from-peer-node-id

このオプションを指定すると、呼び出し元は再同期するノードを選択できる。指定しない場合、DRBD は適切なソースノードを選択する。

drbdsetup invalidate-remote resource peer_node_id volume

対向ノードのリソースデータをローカルデータで置き換える。対向ノードデバイスのデータは非同期にマークされ、ローカルノードから指定された対向ノードへの再同期が始まる。

利用可能なオプション:

--reset-bitmap=no

通常、invalidate remote は対向ノードへの再同期を開始する前に、ビットマップのすべてのビットを out-of-sync に設定する。--reset-bitmap=no を指定すると、DRBD はビットマップをそのまま使用する。通常、これはオンライン検証で下位デバイスに違いが見つかった後に使用される。

--reset-bitmap オプションは、DRBD カーネルドライバー 9.0.29 および drbd-utils9.17 以降で使用できる。

drbdsetup new-current-uuid minor

Generate a new current UUID and rotates all other UUID values. This has three use cases: start the initial resync; skip the initial resync; bootstrap a single node cluster.

利用可能なオプション:

--force-resync

Start an initial resync. A precondition is that the volume is in disk state Inconsistent on all nodes. This command updates the disk state on the current node to UpToDate and makes it source of the resync operations to the peers.

--clear-bitmap

Clears the sync bitmap in addition to generating a new current UUID. This skips the initial resync. As a consqeuence this volume's disk state changes to UpToDate on all nodes in this resource.

Both operations require a "Just Created" meta data. Here is the complete sequence step by step how to skip the initial resync:

1.両ノードでメタデータを初期化してデバイスを設定する。

drbdadm create-md --force res/volume-number

2.それぞれのサイズを知るために初期ハンドシェークが必要となる。

drbdadm up res

3.Secondary/Secondary Inconsistent/Inconsistent の状態で接続される。新しい現在 UUID を作りダーティなビットマップをクリアする。

drbdadm --clear-bitmap new-current-uuid res

4.Secondary/Secondary UpToDate/UpToDate の状態で接続される。片方をプライマリに切り替えてファイルシステムを作成する。

drbdadm primary res

mkfs -t fs-type $(drbdadm sh-dev res/vol)

この方法の明らかな欠点は、別の方法でディスク内容を同一にしない限り、複製物全体に古いゴミのデータが残ることである。このため、オンライン照合は多数の非同期ブロックを見出してしまう。

この方法は、すでにデータのあるディスクに適用してはならない! 最初は動作しているように見えても、ノードの切り替えを行うとデータが壊れてしまい二度と使えなくなる。そのため、mkfs を省略してはならない (またはそれに相当する操作)。

Bootstraping a single node cluster

このコマンドは、最初のノードを本稼働させた後でディスク自体を 2 番目のノードに移すという手法により、クラスタの初期化時間を短縮する目的にも適用できる。この方法は、切断されたデバイスに対してのみ有効である。デバイスのロールはプライマリでもセカンダリでもよい。

必要なステップは以下のとおり:

1.drbdsetup new-current-uuid --clear-bitmap minor

2.現在のアクティブなサーバのディスクをコピーする。たとえば RAID1 コントローラ配下のディスクを 1 本抜く、 dd でコピーするなど。実際のデータ領域とメタデータの両方をコピーする必要がある。

3.drbdsetup new-current-uuid minor

このディスクをセカンダリのノードに挿入してクラスタに参加させる。ステップ 1 での drbdsetup の実行以降に変更した箇所の再同期が行われる。

drbdsetup new-minor resource minor volume

Create a new replicated device within a resource. The command creates a block device inode for the replicated device (by default, /dev/drbdminor). The volume number identifies the device within the resource.

--block-size size

Block storage devices have a particular sector size or block size. This block size has many different names. Examples are 'hw_sector_size', 'PHY-SEC', 'physical block (sector) size', and 'logical block (sector) size'.

DRBD needs to combine these block sizes of the backing disks. In clusters with storage devices with different block sizes, it is necessary to configure the maximal block sizes on the DRBD level. Here is an example highlighting the need.

Let's say node A is diskless. It connects to node B, which has a physical block size of 512 bytes. Then the user mounts the filesystem on node A; the filesystem recognizes that it can do I/O in units of 512 bytes. Later, node C joins the cluster with a physical block size of 4096 bytes. Now, suddenly DRBD starts to deliver I/O errors to the filesystem if it chooses to do I/O on, e.g., 512 or 1024 bytes.

The default value of block-size 512 bytes. This option is available since drbd-utils 9.24 and the drbd kernel driver 9.1.14 and 9.2.3.

drbdsetup new-resource resource node_id,
drbdsetup resource-options resource

new-resource コマンドは、新しいリソースを作成する。resource-options コマンドは、既存のリソースのリソースオプションを変更する。利用可能なオプション:

--auto-promote bool-value

書き込みのためにデバイスをマウントまたはオープンする前に、リソースをプライマリに昇格させる必要がある。

DRBD 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 である。

--auto-promote-timeout 1/10-of-seconds

When a user process promotes a drbd resource by opening one of its devices, DRBD waits up to auto-promote-timeout for the device to become promotable if it is not in the first place.

auto-promote-timeout is specified in units of 0.1 seconds. Its default value is 20 (2 seconds), its minimum value is 0, and its maximum value is 600 (=one minute).

--cpu-mask cpu-mask

DRBD のカーネルスレッドに CPU アフィニティマスクを設定する。CPU マスクは 16 進数で指定する。デフォルト値は 0 で、スケジューラがどの CPU 上でカーネルスレッドを実行するかを決定する。システムに存在しない cpu-mask CPU番号は無視される。

--max-io-depth value

This limits the number of outstanding requests on a DRBD device. Any process that tries to issue more I/O requests will sleep in "D state" (uninterruptible by signals) until some previously issued requests finish.

max-io-depth has a default value of 8000, its minimum value is 4, and its maximum value is 2^32.

--on-no-data-accessible policy

要求されたデータがローカルまたはリモートで使用できない場合に(たとえば、すべてのディスクに障害が発生した場合など)、どのように I/O 要求を処理するかを決定する。クォーラムが有効になっている場合は on-no-data-accessibleon-no-quorum と同じ値に設定する必要がある。定義されたポリシーは次のとおり:

io-error

errno を EIO に設定してシステムコールは失敗する。

suspend-io

リソースは I/O を中断する。下位レベルのデバイスを接続(再接続)したり、データにアクセスできる対向ノードに接続したり、drbdadm resume-io res で DRBD に I/O を再開させたりすることで、 再開できる。データがない場合、 I/O を強制的に再開すると、 io-error ポリシーと同じ結果になる。

この設定は、DRBD 8.3.9 から有効である。デフォルトのポリシーは io-error である。

--on-no-quorum {io-error | suspend-io}

By default DRBD freezes IO on a device, that lost quorum. By setting the on-no-quorum to io-error it completes all IO operations with an error if quorum is lost.

通常、on-no-data-accessibleon-no-quorum と同じ値に設定する。

on-no-quorum オプションは、DRBD カーネルドライバのバージョン 9.0.8 から有効である。

--on-suspended-primary-outdated {disconnect | force-secondary}

This setting is only relevant when on-no-quorum is set to suspend-io. It is relevant in the following scenario. A primary node loses quorum hence has all IO requests frozen. This primary node then connects to another, quorate partition. It detects that a node in this quorate partition was promoted to primary, and started a newer data-generation there. As a result, the first primary learns that it has to consider itself outdated.

When it is set to force-secondary then it will demote to secondary immediately, and fail all pending (and new) IO requests with IO errors. It will refuse to allow any process to open the DRBD devices until all openers closed the device. This state is visible in status and events2 under the name force-io-failures.

The disconnect setting simply causes that node to reject connect attempts and stay isolated.

The on-suspended-primary-outdated option is available starting with the DRBD kernel driver version 9.1.7. It has a default value of disconnect.

--peer-ack-delay expiry-time

最後に終了した書き込みリクエストの後に expiry-time 間、新しい書き込みリクエストが発行されない場合、peer-ack パケットが送信される。タイマーが満了する前に新しい書き込みリクエストが発行されると、タイマーは expiry-time にリセットされる。(注:peer-ack パケットは、他の理由でも送信される場合がある。たとえば、メンバーシップの変更または peer-ack-window オプションなど)。

このパラメータは、リモートノードの再同期動作に影響を与える可能性がある。対向ノードは、 AL-extent のロックを解除する peer-ack を受信するまで待つ必要がある。対向ノード間の再同期操作は、これらのロックを待つ必要がある。

peer-ack-delay のデフォルト値は、100 ミリ秒であり、単位はミリ秒である。このオプションは 9.0.0 から有効である。

--peer-ack-window value

各ノード上の各デバイスのために、DRBD は、ローカルデータと各対向ノードデバイスのリモートデータの差分のビットマップを維持する。例えば、それぞれが単一デバイスを有する 3 ノード構成 (ノード A、B、C) において、各ノードは、各対向ノードに対して 1 つのビットマップを維持する。

ノードが書き込みリクエストを受け取ると、書き込みノードのビットマップを更新する方法はわかるが、ノード間のビットマップを更新する方法はわからない。この例では、書き込みリクエストがノード A から B および C に伝搬するとき、ノード B および C はノード A と同じデータを有するが、両方が同じデータを有するか不明である。

是正措置として、書き込みノードは、時には、相手との間にどのような状態があるかを示すピアツーピアパケットを対向ノードに送信する。

peer-ack-window は、peer-ack パケットを送信する前に、プライマリノードが送信するデータ量を指定する。値が小さいとネットワークトラフィックが増加する。値が大きいとネットワークトラフィックは減少するが、セカンダリノードのメモリ消費量が大きくなり、プライマリノードの障害後に、セカンダリノード間の再同期時間が長くなる。(注:peer-ack パケットは、他の理由でも送信される場合がある。たとえば、メンバーシップの変更または peer-ack-delay タイマーの満了など)。

peer-ack-window のデフォルト値は、2 MiB であり、単位はセクタである。このオプションは 9.0.0 から有効である。

--quorum value

有効にすると、レプリケートされたデータセットを変更するために、クラスタパーティションはクォーラムを必要とする。つまり、クラスタパーティション内のノードは、クラスタパーティションにクォーラムがある場合にのみプライマリに昇格できる。昇格すべきノードにディスクが直接接続されているすべてのノードが対象である。プライマリノードが書き込みリクエストを実行する必要があるが、クラスタパーティションがクォーラムを失った場合、 I/O をフリーズするか、または書き込みリクエストを拒否する(on-no-quorum の設定に依存)。クォーラムが失われると、プライマリは常に quorum-lost ハンドラを呼び出す。ハンドラは通知のためのものであり、リターンコードは無視される。

オプションの値は、 off, majority, all, または数値である。数値を設定する場合は、値がノード数の半分を超えていることを確認すること。クォーラムはデータの不一致を回避するメカニズムであり、2 つ以上の複製が存在する場合にフェンシングの代わりに使用されるときがある。デフォルトは off である。

切断されたノードがすべて outdated(無効) としてマークされている場合、パーティションのサイズに関係なく、常にクォーラムを持つ。つまり、すべてのセカンダリノードを正常に切断すると、1 つのプライマリが動作し続ける。1 つのセカンダリが切断された瞬間に、切断されたすべてのセカンダリノードがパーティションを形成すると仮定する。パーティションが他のパーティションよりも小さい場合、この時点ではクォーラムは失われる。

ディスクレスノードがクォーラムを常に取得できるようにする場合、majority, all オプションは使用しないことを推奨する。クラスタ内のディスクフルノードの完全な数を決定するための DBRD のヒューリスティックな方法は正確でないため、絶対数を指定することを推奨する。

クォーラムの実装は、DRBD カーネルドライバのバージョン 9.0.7 から有効である。

--quorum-minimum-redundancy value

このオプションは、パーティションがクォーラムを獲得できるように UpToDate のディスクを持つノードの必要最小限の数を設定する。これは、素の quorum とは異なる要件である。

オプションの値は、 off, majority, all, または数値である。数値を設定する場合は、値がノード数の半分を超えていることを確認すること。

ディスクレスノードがクォーラムを常に取得できるようにする場合、majority, all オプションは使用しないことを推奨する。クラスタ内のディスクフルノードの完全な数を決定するための DBRD のヒューリスティックな方法は正確でないため、絶対数を指定することを推奨する。

このオプションは、DRBD カーネルドライバのバージョン 9.0.10 から有効である。

--twopc-retry-timeout 1/10-of-seconds

Due to conflicting two-phase-commit sometimes DRBD needs to retry them. But if two nodes retry their intended two-phase-commits after the same time, they would end up in an endless retry loop. To avoid that, DRBD selects a random wait time within an upper bound, an exponential backoff, and a function of the retry number. The twopc-retry-timeout is a base multiplier for that function.

twopc-retry-timeout has a default value of a (0.1 seconds), its minimum value is 1 (0.1 seconds), and its maximum value is 50 (5 seconds).

--twopc-timeout 1/10-of-seconds

In some situations, a DRBD cluster requires a cluster-wide coordinated state transition. A perfect example of this is the 'promote-to-primary' action. Even if two not directly connected nodes in a cluster try this action concurrently, it may only succeed for one of the two.

For these cluster-wide coordinated state transitions, DRBD implements a two-phase commit protocol. If a connection breaks in phase one (prepare packet sent), the coordinator of the two-phase commit might never get the expected reply packet.

A cluster in this state can not start any new cluster-wide coordinated state transition, as the already prepared one blocks all such attempts. After twopc-timeout all nodes abort the prepared transaction and unlock the cluster again.

twopc-timeout has a default value of 300 (30 seconds), its minimum value is 50 (5 seconds), and its maximum value is 600 (one minute).

drbdsetup outdate minor

下位デバイスのデータ内容が「無効」であるとマークする。これはフェンシングに使用され、デバイスが含まれているリソースが将来プライマリになるのを防ぐ。--fencing ディスクオプションを参照。

drbdsetup pause-sync resource peer_node_id volume

ローカルポーズフラグを設定して、ローカルデバイスと対向ノードとの再同期を停止する。再同期は、接続の両側の一時停止フラグがクリアされた場合にのみ再開することができる。

drbdsetup primary resource

リソース内のノードの役割をプライマリに変更する。これにより、このリソース内の複製されたデバイスを書き込み用にマウントまたはオープンすることができる。利用可能なオプション:

--overwrite-data-of-peer

このオプションは、 --force オプション の別名である。

--force

一部のデバイスで最新のデータが保証されていない場合でも、リソースを強制的にプライマリにする。このオプションは、新しく作成されたクラスタ内のいずれかのノードをプライマリノードに切り替える場合や、障害から手動で回復する場合に使用する。

これは、スプリットブレインにつながる可能性があることに注意すること。また、不整合なデバイスを最新のデバイスに強制的に変更する場合は、使用可能な完全性チェック(ファイルシステムチェックなど)を使用して、システムをクラッシュさせずにデバイスを使用できることを確認すること。

DRBD では、通常、クラスタ内の 1 つのノードだけがプライマリの役割を果たすことができる。 DRBD はノード間のリソース内のデバイスを調整できる。--allow-two-primaries ネットワークオプションは、これを変更する。その場合、DRBD 以外のメカニズムはデバイスアクセスを調整する必要がある。

drbdsetup resize minor

すべてのノードで、複製されたデバイスの下位デバイスのサイズを再確認する。このコマンドは、複製されたデバイスのサイズを調整するために、すべてのノードの下位レベルのデバイスが拡張された後に呼び出されれる。利用可能なオプション:

--assume-peer-has-space

現時点では、対向ノードのデバイスの一部が接続されていない場合でも、デバイスのサイズを変更する。DRBD は、次に接続するときに対向ノードのデバイスのサイズを変更しようとする。対向ノードの小さすぎるデバイスへの接続は拒否する。

--assume-clean

追加されたディスクスペースを再同期しない。代わりに、すべてのノードで同一であると仮定する。このオプションは、ディスクスペースが初期化されておらず、相違していない場合や、すべてのノードで同一であることが分かっている場合に使用できる。drbdsetup verify コマンドを参照。

--size val

このオプションは、DRBD デバイスの使用可能なサイズをオンラインで縮小するために使用できる。ファイルシステムがこの操作によって破損しないことはユーザ責任において確認する。

--al-stripes val --al-stripes val

これらのオプションを使用して、アクティビティログのレイアウトをオンラインで変更することができる。内部メタデータの場合には、同時に、下位デバイスのユーザーに見えるサイズ(--size を使用して)の縮小、または拡大が必要である。

drbdsetup resume-io minor

複製されたデバイスの I/O を再開する。--fencing ネットオプションを参照。

drbdsetup resume-sync resource peer_node_id volume

ローカル同期の一時停止フラグをクリアして、再同期を再開できるようにする。

drbdsetup role resource

リソースの現在の役割を表示する。

drbdsetup secondary resource

リソース内のノードの役割をセカンダリに変更する。複製されたデバイスが使用中の場合、このコマンドは失敗する。

--force

A forced demotion to secondary causes all pending and new IO requests to terminate with IO errors.

Please note that a forced demotion returns immediately. The user should unmount any filesystem that might be mounted on the DRBD device. The device can be used again when force-io-failures has a value of no. (See drbdsetup status and drbdsetup events2).

drbdsetup show {resource | all}

リソースまたはすべてのリソースの現在の構成を表示する。利用可能なオプション:

--show-defaults

すべての設定パラメータを表示する。設定ファイルに未設定のパラメータも初期値の設定で表示する。このオプションをつけないと、初期値のパラメータは確認できない。

drbdsetup show-gi resource peer_node_id volume

特定の接続上のデバイスのデータ世代識別子を表示する。さらに、出力の説明を行う。他は drbdsetup get-gi コマンドと同じである。

drbdsetup state

これは drbdsetup role の別名である。推奨しない。

drbdsetup status {resource | all}

リソースの全ての有効な設定情報を表示する。出力は、構成されたリソースごとに 1 つの段落で構成される。各段落は、リソースごとに 1 行、各デバイスに 1 行、接続ごとに 1 行が続く。デバイスと接続行はインテンドされる。各接続行は、対向ノードのデバイスごとに 1 行、これらは接続行に対してインテンドされる。

長い行は端末の幅で折り返され、どの行に属しているかを示すためにインデントされる。利用可能なオプション:

--verbose

冗長か無関係であっても、より多くの情報を出力に含める。

--statistics

出力にデータ転送の統計情報を含める。

--color={always | auto | never}

出力をカラー化する。 --color=auto, drbdsetup は標準出力が端末に接続されている場合にのみカラーコードを出力する。

たとえば、1 つの接続と1 つのボリュームのみを持つリソースの出力は、次のようになる。

drbd0 role:Primary

disk:UpToDate
host2.example.com role:Secondary
disk:UpToDate

--verbose を使用すると, 同じリソースは次のように出力される:

drbd0 node-id:1 role:Primary suspended:no

volume:0 minor:1 disk:UpToDate blocked:no
host2.example.com local:ipv4:192.168.123.4:7788
peer:ipv4:192.168.123.2:7788 node-id:0 connection:WFReportParams
role:Secondary congested:no
volume:0 replication:Connected disk:UpToDate resync-suspended:no

drbdsetup suspend-io minor

複製されたデバイスの I/O を停止する。通常、このコマンドを使用する必要はない。

drbdsetup verify resource peer_node_id volume

オンライン照合を開始するか、デバイスの検証部分を変更するか、オンライン照合を停止する。このコマンドでは、指定した対向ノードを接続する必要がある。

オンライン照合では、ローカルと対向ノードの各ディスクブロックを比較する。ノード間で異なるブロックは非同期としてマークされるが、 自動的に同期化されない。それらを同期させるには、drbdsetup invalidate または drbdsetup invalidate-remote--reset-bitmap=no とともに使用する。進行状況は、 drbdsetup status --statistics の出力で監視できる。利用可能なオプション:

--start position

オンライン照合を開始する場所を定義する。オンライン照合がすでに進行中の場合、このパラメータは無視される。開始パラメータが指定されていない場合、オンライン照合は以前に中断された場所(対向ノードの接続が照合中に失われた場合)、前回の終了したセクタの後(以前にオンライン照合が完了した場合)、またはデバイスの最初(以前に終わりに達した場合、または以前にオンライン照合が実行されていない場合)から続けられる。

ディスク上の位置は、デフォルトでディスクセクタ(512バイト)で指定される。

--stop position

オンライン照合を停止する場所を定義する。オンライン照合が既に進行中の場合、進行中のオンライン照合プロセスの停止位置が変更される。これを使用してオンライン照合を停止する。

ディスク上の位置は、デフォルトでディスクセクタ(512バイト)で指定される。

また、'notes' のデータの完全性に関する注意を参照。drbd.conf(5) manual page.

drbdsetup wait-connect-volume resource peer_node_id volume,
drbdsetup wait-connect-connection resource peer_node_id,
drbdsetup wait-connect-resource resource,
drbdsetup wait-sync-volume resource peer_node_id volume,
drbdsetup wait-sync-connection resource peer_node_id,
drbdsetup wait-sync-resource resource

wait-connect-* コマンドは、対向ノード上のデバイスが表示されるまで待機する。wait-sync-* コマンドは、対向ノード上のデバイスが最新の状態になるまで待機する。両方のコマンドで利用可能なオプション:.PP --degr-wfc-timeout timeout
システムが停止したとき、クラスタが単一ノードで構成されている場合、すべてのピアが接続されるまで待機する時間を定義する。このパラメータは通常、 wfc-timeout より小さい値に設定する。再起動前に到達できなかった対向ノードが再起動後に到達できる可能性は低いため、待機が助けになる可能性は低いということである。

タイムアウトは秒単位で指定する。デフォルト値は 0 であり、無限のタイムアウトを意味する。wfc-timeout パラーメータも参照。

--outdated-wfc-timeout timeout

システムが停止したとき、すべての対向ノードが outdated(無効) であった場合、すべての対向ノードが接続されるまで待機する時間を定義する。このパラメータは通常、 wfc-timeout より小さい値に設定する。outdated(無効) の対向ノードがその間にプライマリになることはできないので、以前に生存していたノードを待つ必要がないということである。

タイムアウトは秒単位で指定する。デフォルト値は 0 であり、無限のタイムアウトを意味する。wfc-timeout パラーメータも参照。

--wait-after-sb

このパラメータは、スプリットブレイン状況が検出された場合でも、DRBD が init スクリプトで待機し続けるため、ノード間の接続が拒否される。

--wfc-timeout timeout

すべての対向ノードが接続されるまで init スクリプトが待機する時間を定義する。これは、DRBD リソースを管理できないクラスタマネージャと組み合わせて使用する場合に便利である。クラスタマネージャが起動すると、DRBD リ ソースはすでに起動して実行されている。Pacemaker などのより優れたクラスターマネージャを使用すると、クラスターマネージャが DRBD リソースを制御できるようになる。タイムアウトは秒単位で指定する。デフォルト値は 0 であり、無限のタイムアウトを意味する。degr-wfc-timeout パラーメータも参照。

drbdsetup forget-peer resource peer_node_id

forget-peer コマンドは、対向ノードのすべての痕跡をメタデータから削除する。これは、メタデータ内のビットマップスロットを解放し、今まで接続したことのないノードが接続した場合、より多くのビットマップスロットを割り当てることを可能にする。

このコマンドを使用するには、接続を解除する必要がある。対向ノードが後で再接続する場合、ビットマップベースの再同期は完全同期に変わる。

drbdsetup rename-resource resource new_name

ローカルノードで resource の名前を new_name に変更する。DRBD のネットワークプロトコルにはリソース名の概念がないため、技術的には異なるノードのリソースに異なる名前を付けることは可能である。ただし、クラスタ全体で一貫した名前を付けて、すべてのノードで同じ rename-resource コマンドを発行することを推奨する。

新しい名前をユーザーに通知するために、events2 ストリームで rename イベントが発行される。

EXAMPLES

詳しくは DRBD User's Guide[1] を参照。

VERSION

このドキュメントは DRBD バージョン 9.0.0 向けに改訂されている。

AUTHOR

Written by Philipp Reisner <philipp.reisner@linbit.com> and Lars Ellenberg <lars.ellenberg@linbit.com>.

REPORTING BUGS

Report bugs to <drbd-user@lists.linbit.com>.

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.conf(5), drbd(8), drbdadm(8), DRBD User's Guide[1], DRBD Web Site[2]

NOTES

1.
DRBD User's Guide
2.
DRBD Web Site
17 January 2018 DRBD 9.0.x