DRBD+Pacemaker+corosyncで作るHAサーバー


この記事の所要時間: 852

メールサーバーはいったん動き出してしまえばおとなしく仕事を続けてくれますが、
滅多に止まらないと思っていても一台のみで運用していると実際に止まると
復旧までに何時間ものダウンタイムが生じる恐れがあります。

今回はDRBDでリアルタイムミラーリングを行なって片方に障害が発生しても
数分以内でフェイルオーバーするようにPacemaker+corosyncを使用しました。
PacemakerはHeartbeatの後継にあたるもので、
特に理由のない限りはPacemakerを使用することが推奨されています。

今回は簡単そうなApacheのフェイルオーバーをするようにしてみました。
基本的にすべてrootユーザーで作業を行います。

構成

  • CentOS6.3
  • DRBD 8.4.2
  • Pacemaker
  • corosync

ネットワーク構成は、

  • 仮想IP(VIP): 192.168.0.20/24
  • primarycentos: 192.168.0.21
  • secondarycentos: 192.168.0.21

DRBD用のディスク領域を確保します

50GBくらいの容量を準備しました。

DRBDのインストール

Master/Slave両方に同じ作業を行います。
DRBDはすごくナイーブで動かすのに苦労しました。
DRBDはバージョンごとにインストールのさせ方が異なってくるので注意します。

以下のコマンドでDRBDのカーネルモジュールのビルドを行うのですが、
上でmake installした時点でカーネルモジュールがインストールされている気がするので、
いらない気がします。

起動時にDRBDモジュール読み込み

DRBD足回りの設定

次が一番大事です。

メタデータの構築

リブートしたら自動的にモジュールを読み込んでくれますが、とりあえず手動でカーネルモジュールを読み込みます。

ロードされていることの確認。

よくあるエラー

マニュアル通りに進めていくと以下のエラーに悩まされるのですが、
ここでは無視して次に進みます。

サービス起動

Master/Slave両方ほぼ同時に立ち上げます。
両方同時にサービスを立ちあげないと固まります。

動いているかどうか確認します。

マイナー番号1がアタッチされています。
ds:Inconsistent/Inconsistentなので現在同期がとれていません。
マスタ側のサーバーで以下のコマンドでフル同期を行います。

同期している最中。

UpToDateになったら同期完了。

DRBDディスク上にファイルシステムを構築する

DRBDでリアルタイムミラーリングしているディスクは /dev/drbd1 というブロックデバイスに割り当てられています。

マウントできます。
ファイルも書き込めます。

他方にミラーリングされているのを確認するときはいったんumountします。

cat /proc/drbd でPrimary/Secondaryが入れ替わっているのを確認します。
ミラーリングされたブロックデバイスはPrimaryでしかmountできないようです。

Pacemaker+corosync

本当はインターコネクト回線が必要らしいです。
とりあえず、Master/Slave構成にするにあたって、
サービスの起動はすべてPacemakerに任せることになるので、
冗長化する部分はchkconfig … off、
service … stopしておきます。

インストール

依存関係解決の過程でcorosyncも一緒に入ります。

Pacemakerの設定

Vyattaみたいな使い方をします。

以下の記述は Pacemaker+Corosync+DRBDを利用したWEBサーバの冗長化 – OSSでLinuxサーバ構築 を参考にさせていただきました。

corosyncサービスのスタート。
これもMaster/Slaveどちらも同時に立ち上げます。

ステータスの確認。

む、DRBDはアクティブになったみたいだけど、起動しない。
man crmしたらstartで起動してやる必要があるみたいです。

ping 192.168.0.20に対して応答を返すようになりました。
仮想IPがうまくあたっているようです。
どうもMaster/Slave構成は効いているようですが、Apacheが立ち上がらないようです。
server-statusのチェックで.example.comでdenyされてしまっているからでした。
その他にもpidチェックも必要でした。

fail_countのリセット

テストで繰り返し再起動をしていたりしてfail_countが規定の数に達していると
スレーブにできないので、リセットします。

フェイルオーバーのテスト

現在の設定だとリソースグループ内の一つのサービスが落ちると
全体的にフェイルオーバーされる設定になっています。
Apacheのサービスを意図的に落としてみます。

ものの1分しないうちにsecondarycentosにフェイルオーバーされました。
http://192.168.0.20/ も普通に見れるようです。

仮にマスターが復旧したとして、再度マスターに昇格させるには
マスタ側で以下のコマンドを入力します。

secondarycentosにフェイルオーバーしたいときは除去しないといけないよと怒られています。

crm_resource -r rg_web -M よりも手動フェイルオーバーしたほうがいいのかもしれないです。

参考にしたサイト

DRBD関連

人気の記事

コメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

PAGE TOP