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
DRBDのインストール
DRBDは標準リポジトリに含まれないため、elrepoリポジトリを追加してインストール
※elrepoはRHELやCentosの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メタデータに書き込むここまでの設定をスタンバイ機でも実施する。
本日のメモは一旦ここまで。お疲れ様でした。