• ホーム
  • サーバ
  • DRBD
  • drbd.conf
  • drbd.conf

    DRBD設定ファイル
    http://www.drbd.jp/users-guide/re-drbdsetup.html
    ■設定
    /etc/drbd.conf
    サンプル/usr/share/doc/drbd84-utils-8.4.2/drbd.conf.example
    # You can find an example in  /usr/share/doc/drbd.../drbd.conf.example
    include "drbd.d/global_common.conf";	このままの設定で使う場合は、下記設定内容詳細のcommonセクション内の物は
    				このファイルに記載する事
    include "drbd.d/*.res";
    
    ※両ノード(ホスト)で全く同じ設定内容を使う事
    なお初期状態では、このようにglobalセクションとcommmonセクションは別ファイルになっています。
    また、resourceセクションも.resの拡張子で別ファイルでの定義にしてもわかりやすい。
    
    
    [設定内容詳細]
    ○globalセクション---グローバルパラメータを定義する
    global {
    	usage-count yes;	DRBDプロジェクトにDRBDの利用状況の統計情報を送信する設定(http://usage.drbd.org/で見れる)
    			デフォルトON
    }
    
    ○commonセクション---ここで設定されたオプションは、全てのセクションに引き継がれる
    common {
    	○handlersセクション---特定のイベントに応じた処理を行う
    	handlers {
    		pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
    		自身がプライマリで、セカンダリと切断されておりかつデータに不整合があった時、指定コマンドを実行
    		(上記はデフォルト値)
    		pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
    		自身がプライマリで、スプリットブレイン(※2)後の修復が失敗した場合に指定したコマンドを実行
    		(上記はデフォルト値)
    		local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
    		ローカルディスクのI/Oでエラーが発生した場合に指定したコマンドを実行
    		(上記はデフォルト値)
    	}
    	○syncerセクション---DRBDの同期処理に関する設定
    	syncer {
    		rate 250K;	同期処理の通信速度を設定。デフォルト=250KB/sec。K(KB/sec),M(MB/sec),G(GB/sec)で指定。
    		after r0;		優先して同期処理するリソースを指定
    		verify-alg アルゴリズム;	ディスク内容をオンライン検証するためのハッシュアルゴリズムを指定。
    					デフォルト=無効。md5、sha1、crc32cが使用可能
    	}
    
    	○startupセクション---DRBD起動時のタイムアウトに関する設定
    	startup {
        		wfc-timeout 0;	起動時の相手DRBDノードとの接続タイムアウトを秒で指定。0はタイムアウトしない(デフォルト)
    				指定すると起動時タイムアウト後、プロンプトが返ってくるので指定した方が良さそう
    				(タイムアウトしない場合は、To abort waiting enter 'yes' [経過秒数]:のままで
    				yesと入力しないとこのまま)
    		degr-wfc-timeout 60;	指定した秒数のタイムアウト後デグレードモードになる(相手ノードの障害時と同じ状態)
    		become-primary-on ノード名;	起動時にプライマリにするノードを指定。
    					デフォルトでは指定されていないので両方セカンダリで起動する
    	}
    	
    	○diskセクション---HDD(ストレージ)に関する設定
    	disk {
    		on-io-error detach;	次のいずれかを指定。call-local-io-error(handlersのlocal-io-erroeを呼び出す)、
    					pass_on(上位にI/Oエラーを返す)、detach(該当のデバイスを切り離し継続)
    		disk-flushes no;		ディスクフラッシュ命令の確認
    					キャッシュに書き込まれた時点で書き込み完了とみなす=no
    					キャッシュではなくディスクへの書き込みを保障=yes(デフォルト)
    					http://www.drbd.jp/users-guide/s-disable-flushes.html
    		disk-barrier no;		TCQ(NCQ)を使うかどうか。ただしカーネル2.6.36以降及びRHEL6の2.6.32では、この
    					オプションを使ってはならないとの事なので、無効にする。
    		md-flushes no;		メタデバイスにもディスクフラッシュを使用しないという意味
    	}
    
    	○netセクション---ネットワークに関する設定
    	net {
    		cram-hmac-alg "sha1";		相手ノードとの認証を行う場合に指定。
    						md5,sha1,sha256,sha512,wp256,wp384,wp512,shared-secretが使える
    		shared-secret "secret_string";	その暗号キー(パスワード)
    		connect-int 10;			相手DRBDノードへの接続確認を指定した秒単位で行う
    	}
    }
    
    ○resourceセクション---DRBDリソースを定義する
    resource r0 {		リソース名は何でも可(ここではr0とします)
    	protocol B;	(※1)
    	○startupセクション---DRBD起動時のタイムアウトに関する処理
    	startup {
    	}
    	○on ホスト名---ホスト毎の必要な情報を定義。ホスト名は実際のホスト名でないといけないらしいuname -nで確認。名前解決できる必要はなさそう
    	on host1.example.com {
    		device	/dev/drbd0;	DRBDで使うデバイス名の定義(もちろん/devにすでにあるデバイス名はNG)
    		disk	/dev/vg_test1/lv_drdb-data1;	DRBD用として使用するパーティション
    		address	192.168.1.100:7788;		そのホストのIPアドレスとDRBDで使用するポート番号(デフォルト7788)
    							クロスケーブルで直結するならそちらのNICのIP
    		meta-disk	/dev/vg_test1/lv_drdb-meta1;	メタデータ用パーティションの指定
    		なおここでmeta-disk internal; とするとdiskで指定した中にメタデータを作成するという意味になる(非推奨方法)
    	}
    	on host2.example.com {		DRBDでミラーを行う別ホストの情報も定義(もちろんそのホストの情報に合わせる事)
    		device	/dev/drbd0;
    		disk	/dev/vg_test1/lv_drdb-data1;
    		address	192.168.1.101:7788;
    		meta-disk	/dev/vg_test1/lv_drdb-meta1
    	}
    }
    
    
    
    (※1)DRBDリアルタイムミラーリングプロトコルの種類
    protocol A	ローカルディスクへの書き込みが完了し、リモート側へ書き込み要求が完了した時に書き込み完了とする。
    protocol B	ローカルディスクへの書き込みが完了し、リモート側へ書き込み要求が受け付けられ
    		リモート側バッファへ書き込まれた時に書き込み完了とする。
    protocol C	ローカルディスクへの書き込みが完了し、リモート側へ書き込みが完了した時に書き込み完了とする。
    A→B→Cの順に安全になるが、同順に速度が遅くなるデメリットもある。
    
    (※2)スプリットブレイン
    ■スプリットブレイン
    両方のノードがプライマリ、又スタンドアロン運用状態となり各ノード個別にデータが更新されており同期されていない状態
    再同期するには、どちらの内容が正しいか判断しどちらかのノードのデータを捨てる必要があります。
    http://www.drbd.jp/users-guide/s-resolve-split-brain.html
    又はDRBDの自動復旧ポリシーを設定しておき、自動的に復旧させます。
    http://www.drbd.jp/users-guide/s-split-brain-notification-and-recovery.html
    after-sb-0pri [下記ポリシー]	両ノード(ホスト)ともセカンダリになっている場合に適応されるポリシー
    	ポリシー
    	disconnect		自動復旧は実行しない(データも同期しない)
    	discard-younger-primary	最後に新しいデータが書き込まれた方を破棄して復旧(古いデータの方のノードで運用)
    	discard-least-changes	データの変更量が少なかった方のデータを破棄して復旧(変更データが多かったノードで運用)
    	discard-zero-changes	データ変更が無かったノードがある場合は、そのデータを破棄して復旧(変更があった方で運用)
    
    after-sb-1pri [下記ポリシー]	どちらか1つがプライマリの場合に適応されるポリシー
    	ポリシー
    	disconnect		自動復旧は実行しない(データも同期しない)
    	consensus			セカンダリノード側のデータを破棄して復旧
    	call-pri-lost-after-sb	after-sb-0priで定義した動作を行う。犠牲ノード側でpri-lost-after-sbハンドラを起動する
    	discard-secondary		セカンダリノードを削除する(セカンダリノードを無くす)
    
    after-sb-2pri [下記ポリシー]	両ノード(ホスト)ともプライマリになっている場合に適応されるポリシー
    	ポリシー
    	after-sb-1priと同じポリシーが定義できる。(ただしdiscard-secondaryとconsensus は除く)
    
    
    
    
    次の設定(メタデータの作成)
    設定ファイル作成後 drbdadm create-md [リソース名] -c [コンフィグファイル] にてmetaデータ(運用中発生する差分データの管理情報)を作成する drbdadm create-md r0 -c /etc/drbd.conf ↓ このように出ればOK Writing meta data... initializing activity log NOT initializing bitmap New drbd meta data block successfully created. success ※プライマリ、セカンダリノードで共に実施する
    設定例
    (プライマリ、セカンダリ同じ) ○global_common.conf common { options { on-no-data-accessible suspend-io; } handlers { pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f"; pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f"; local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f"; } syncer { rate 10M; } startup { wfc-timeout 120; degr-wfc-timeout 120; } } ○drbd.conf # You can find an example in /usr/share/doc/drbd.../drbd.conf.example include "drbd.d/global_common.conf"; include "drbd.d/*.res"; resource r0 { # The disk section is possible on resource level and in each # volume section disk { # If you have a resonable RAID controller # with non volatile write cache (BBWC, flash) disk-flushes no; disk-barrier no; md-flushes no; } protocol B; on test1.example.com { device /dev/drbd0; disk /dev/vg_test1/lv_drdb-data1; address 192.168.5.101:7788; meta-disk /dev/vg_test1/lv_drdb-meta1; } on test2.example.com { device /dev/drbd0; disk /dev/vg_test2/lv_drdb-data1; address 192.168.5.102:7788; meta-disk /dev/vg_test2/lv_drdb-meta1; } }

    前へ  トップへ inserted by FC2 system