目次
はじめに †
概要 †
DRBDの基礎的な動作設定を行う。
環境情報 †
OS | CentOS Linux release 7.3.1611 |
Kernel | Linux version 3.10.0-514.10.2.el7.x86_64 |
DRBD | drbd84-utils-8.9.8-1.el7.elrepo.x86_64 |
DRBD Kernel Module | kmod-drbd84-8.4.9-1.el7.elrepo.x86_64 |
設定 †
設定ファイル †
DRBDの動作設定は/etc/drbd.confにて行う。
実際のパラメータ設定は /etc/drbd.d/ 配下のファイルを使用し、global_common.confとリソースファイル(初期状態では/etc/drbd.d/*.res)を読み込む動作をしている。
各セクションの設定に関する公式情報は以下のサイトを参照のこと。
https://blog.3ware.co.jp/drbd-users-guide-8.3/re-drbdconf.html
セクション †
設定ファイルの中身は複数のセクションで区切られており、セクション内に動作内容を設定する。
global_common.confには何も設定をせずにリソース設定ファイル(*.res)にのみ設定を行うことで動作させることも可能である。
- セクション
global | グローバルパラメータの定義 |
common | 全てのセクションに引き継がれるオプションの定義 |
handlers | 特定のイベントに応じた処理の定義 |
startup | DRBD起動時のタイムアウトに関する定義 |
disk | 物理ストレージに関する定義 |
net | ネットワークに関する定義 |
syncer | DRBDの同期処理に関する定義 |
redource | DRBDリソース(同期するパーティション)に関する定義 |
設定内容 †
各セクションの代表的なパラメータを記載する。
globalセクション †
usage-count yes; | DRBDプロジェクトにDRBDの利用状況の統計情報を送信する設定 |
handlersセクション †
pri-on-incon-degr | 自身がプライマリで、セカンダリと切断されておりかつデータに不整合があった時、指定コマンドを実行 |
pri-lost-after-sb | 自身がプライマリで、スプリットブレイン(※2)後の修復が失敗した場合に指定したコマンドを実行 |
local-io-error | ローカルディスクのI/Oでエラーが発生した場合に指定したコマンドを実行 |
startupセクション †
wfc-timeout | 起動時の相手DRBDノードとの接続タイムアウトを秒で指定。0はタイムアウトしない(デフォルト) |
degr-wfc-timeout | 指定した秒数のタイムアウト後デグレードモードになる(相手ノードの障害時と同じ状態) |
become-primary-on | 起動時にプライマリにするノードを指定。未指定(デフォルト)の場合、両方ともセカンダリとして起動する。 |
diskセクション †
on-io-error | IOエラーが発生した場合の動作を設定。 |
disk-flushes | ディスクフラッシュの確認。 |
disk-barrier | ネイティブ・コマンド・キューイング(NCQ)の使用有無の指定。カーネル2.6.36以降及びRHEL6の2.6.32では、オプションを使ってはならないとの事。 |
md-flushes | メタデバイスへのディスクフラッシュの有無。 |
- on-io-error
call-local-io-error | handlersのlocal-io-erroeを呼び出す |
pass_on | 上位(MWやOS)にI/Oエラーを返す |
detach | 該当のデバイスを切り離し継続 |
- disk-flushes
yes | ディスクへの書き込まれた時点で書き込み完了とみなす |
no | キャッシュに書き込まれた時点で書き込み完了とみなす |
netセクション †
protocol | 同期に使用するプロトコルタイプの定義(protocolを参照) |
csums-alg | 対向ノードの認証を行いたい場合、HMACアルゴリズムを指定する。 |
verify-alg | verifyサブコマンドでディスク内容をオンライン照合する際、DRBDはビット単位の比較ではなく、ブロックごとのハッシュ値を計算し、対向ノードのハッシュ値と比較する。(md5、sha1、crc32cが使用可能) |
after-sb-0pri | スプリットブレインが検出されたときに両ノードともセカンダリロールの場合に適用されるポリシーを定義 |
after-sb-1pri | スプリットブレインが検出されたときにどちらか1つのノードがプライマリロールである場合に適用されるポリシーを定義 |
after-sb-2pri | スプリットブレインが検出されたときに両ノードともプライマリロールである場合に適用されるポリシーを定義 |
- protocol
使用する同期のアルゴリズムを選択する。通常はProtocol Cが推奨。(以下、マニュアルからの転記)
A | 非同期レプリケーションプロトコル。プライマリノードでのディスクへの書き込みは、自機のディスクに書き込んだ上でレプリケーションパケットを自機のTCP送信バッファに送った時点で、完了したと判断されます。システムクラッシュなどの強制的なフェイルオーバが起こると、データを紛失する可能性があります。クラッシュが原因となったフェイルオーバが起こった場合、待機系ノードのデータは整合性があると判断されますが、クラッシュ直前のアップデート内容が反映されない可能性があります。 |
B | メモリ同期(半非同期)レプリケーションプロトコル。プライマリノードでのディスクへの書き込みは、自機のディスクに書き込んだ上でレプリケーションパケットが他機に届いた時点で、完了したと判断されます。通常、システムクラッシュなどの強制的なフェイルオーバでのデータ紛失は起こりません。しかし、両ノードに同時に電源障害が起こり、プライマリノードのストレージに復旧不可能な障害が起きると、プライマリ側にのみ書き込まれたデータを失う可能性があります。 |
C | 同期レプリケーションプロトコル。プライマリノードでのディスクへの書き込みは、両ノードのディスクへの書き込みが終わった時点で完了したと判断されます。このため、どちらかのノードでデータを失っても、系全体としてのデータ紛失には直結しません。当然ながら、このプロトコルを採用した場合であっても、両ノードまたはそのストレージサブシステムに復旧できない障害が同時に起こると、データは失われます。 |
- after-sb-0pri
disconnect | 自動復旧は実行せず、split-brain ハンドラスクリプト(設定されている場合)を呼び出し、コネクションを切断して切断モードで続行。 |
discard-younger-primary | 最後にプライマリロールだったホストに加えられた変更内容を破棄してロールバック。 |
discard-least-changes | 変更が少なかったほうのホストの変更内容を破棄してロールバック。 |
discard-zero-changes | 変更がなかったホストがある場合は、他方に加えられたすべての変更内容を適用して続行。 |
- after-sb-1pri
disconnect | 自動復旧は実行せず、split-brain ハンドラスクリプト(設定されている場合)を呼び出し、コネクションを切断して切断モードで続行。 |
consensus | after-sb-0priで指定したものと同じ復旧ポリシーが適用。 |
call-pri-lost-after-sb | after-sb-0priで指定した復旧ポリシーが適用。 |
discard-secondary | クラスタからノードを強制的に削除。 |
- after-sb-2pri
disconnect | 自動復旧は実行せず、split-brain ハンドラスクリプト(設定されている場合)を呼び出し、コネクションを切断して切断モードで続行。 |
call-pri-lost-after-sb | after-sb-0priで指定した復旧ポリシーが適用。 |
syncerセクション †
rate | DRBDのデータ同期で使用する帯域の上限値の設定(単位はbps) |
after | 優先して同期処理するリソースの指定 |
verify-alg | ディスク内容をオンライン検証するためのハッシュアルゴリズムを指定。(md5、sha1、crc32cが使用可能) |
resourceセクション †
resource [n] | リソース名を定義 |
protocol | netセクションのprotocolを参照 |
on [HSOTNAME] | クラスタのメンバーとなるホストを設定 |
device | DRBDで使うデバイス名の定義(DRBDが生成するスペシャルファイル名。既存のファイル名との重複は不可) |
disk | DRBD用として使用するパーティションの指定 |
address | 同期に使用するIPアドレスとポート番号。DRBD単体では複数の経路を指定できないため、冗長化を行うには他の方式(LinuxBondingDriverの使用、802.11adの使用など)との併用が必要。 |
meta-disk | メタデータ用パーティションの指定。internalを指定すると同期対象のパーティション内にメタデータを保管する(一応、非推奨) |
設定サンプル †