インフラエンジニアXの備忘

とある企業のシステム部門のインフラエンジニアです。忘れっぽい自分のメモ書きとしてこのブログを使用します。

DRBD構築手順メモ

目的

postgresqlのDBサーバー冗長化のため、
DRBDによるネットワーク越しのデータミラーリング環境を構築

本来はHeartbeatを利用して双方を監視し、何かあった場合には自動的に切替るような
HA構成を組むと思いますが

  • HA構成にした場合、障害ポイントによってはPrimary/Primaryのような構成になってしまうこと
  • IPアドレスも双方がアクティブにすることでバッティングしてしまうこと

のようになってしまった場合に、どちらのDB領域を更新したのかわからなくなるのでは
等々の懸念事項により、今回はHA構成にはしません。

DBサーバーに障害が発生した場合には
まず原因を確認し、その原因に応じて切り替えるのかどうかを判断し

  • 切り替える必要がある場合は手動で実行する

という運用設計のもと設定を実施します。

環境

  • プライマリ機
    • ホスト名 devel1
    • IP 172.16.10.1
    • OS centos6.4 x64
  • セカンダリ機
    • ホスト名 devel2
    • IP 172.16.10.2
    • OS centos6.4 x64
  • パッケージ
    • drbd84-utils.x86_64 8.4.2-1.el6.elrepo
    • kmod-drbd84.x86_64 8.4.2-1.el6_3.elrepo

DRBDのインストール

DRBDは標準リポジトリに含まれないため、elrepoリポジトリを追加してインストール
※elrepoはRHELCentosのScientific Linuxの開発メンバが中心で運用されているリポジトリ

# rpm -Uvh http://elrepo.org/elrepo-release-6-4.el6.elrepo.noarch.rpm

■通常時はelrepoリポジトリを無効にしておく

# vi /etc/yum.repos.d/elrepo.repo

[elrepo]
name=ELRepo.org Community Enterprise Linux Repository - el6
baseurl=http://elrepo.org/linux/elrepo/el6/$basearch/
mirrorlist=http://elrepo.org/mirrors-elrepo.el6
enabled=0       →ここを1から0に変更
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org
protect=0

■DRBDをelrepoからインストール

# yum --enablerepo=elrepo list drbd*
# yum --enablerepo=elrepo install drbd84-utils.x86_64
# yum --enablerepo=elrepo list kmod-drbd*
# yum --enablerepo=elrepo install kmod-drbd84

■drbd.confを修正する。
オリジナルをコピーしておく。
# cp -pr drbd.conf drbd.conf.org
# vi /etc/drbd.conf


global {
        usage-count yes;
}

common {
        syncer { rate 50M; }
}

resource r0 {
        protocol C;
        startup {
                wfc-timeout 120;
                degr-wfc-timeout 120;
        }
        net {
                cram-hmac-alg "sha1";
                shared-secret "password";
                after-sb-0pri disconnect;
                after-sb-1pri disconnect;
                after-sb-2pri disconnect;
        }
        disk {
                on-io-error pass_on;
        }
        on devel1 {                  # uname -n
                device /dev/drbd0;
                disk /dev/sdb1;
                address 172.16.10.1:7788;
                meta-disk internal;
        }
        on devel2 {                  # uname -n
                device /dev/drbd0;
                disk /dev/sdb1;
                address 172.16.10.2:7788;
                meta-disk internal;
        }
}

今回のサーバーはNICが2枚ささっているものであったが
bondインターフェースを利用しているため
通常利用するNICとDRBD専用のNICというような使用はせずに
通常のLANでDRBDデータミラーリングも行う。

■メタファイルの作成
メタファイルには設定情報などが格納されている。
DRBDメタデータの作成(DRBDの設定情報格納用)

# drbdadm create-md r0
【正常終了時のログ】

  --==  Thank you for participating in the global usage survey  ==--
The server's response is:

Writing meta data...
initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created.
success

【実行時のエラーログ】

  --==  Thank you for participating in the global usage survey  ==--
The server's response is:

you are the 12087th user to install this version
md_offset 214748360704
al_offset 214748327936
bm_offset 214741774336

Found ext3 filesystem
   209715200 kB data area apparently used
   209708764 kB left usable by current configuration

Device size would be truncated, which
would corrupt data and result in
'access beyond end of device' errors.
You need to either
   * use external meta data (recommended)
   * shrink that filesystem first
   * zero out the device (destroy the filesystem)
Operation refused.

Command 'drbdmeta 0 v08 /dev/sdb1 internal create-md' terminated with exit code 40

上記のエラーが発生し、metaファイルの作成に失敗するときは
現状利用しようとしている/dev/sdb1にext3のファイルフォーマットデータが
作成されている場合に出力されるようなので、
その場合はddコマンドを利用してmeta-diskのデバイスをゼロで埋める。

# dd if=/dev/zero bs=1M count=1 of=/dev/sdb1; sync

■初回同期に時間がかかるため、同期済みステータスとする。
# drbdadm -- 6::::1 set-gi r0 ← DRBDメタデータ上ディスク同期済にする
  previously 0000000000000004:00000000…省略
  set GI to  0000000000000006:00000000…省略

  Write new GI to disk?
  [need to type 'yes' to confirm] yes ← yes応答

# drbdadm dump-md r0 > /tmp/md ← DRBDメタデータを/tmp/mdへ保存
# sed -i -r -e 's/0xF{16}/0x0000000000000000/g' /tmp/md ← /tmp/md上のディスク同期済フラグをつける
# drbdmeta /dev/drbd0 v08 /dev/sdb1 internal restore-md /tmp/md ; rm -f /tmp/md

  Valid meta-data in place, overwrite?
  [need to type 'yes' to confirm] yes ← yes応答

  Successfully restored meta data

 ← /tmp/mdディスク同期済フラグをDRBDメタデータに書き込む
ここまでの設定をスタンバイ機でも実施する。
本日のメモは一旦ここまで。お疲れ様でした。